`
mfhappy
  • 浏览: 38095 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

DefaultTableModel

阅读更多

我们曾提到过DefaultTableModel类,并说明了此类是继承AbstractTableModel抽象类而来,且实现了getColumnCount(),getRowCount()
与getValueAt()3个方法.因此在实际的使用上,DefaultTableModel比AbstractTableModel要来得简单许多,也较常被拿来使用
.DefaultTableModel内部使用Vector来使用表格的数据,若佻所要显示的表格格式是比较单纯的变化,笔者建议使用DefaultTableModel类会
来得方便也简单许多.若佻所要显示的数据模式非常复杂,例如我们所举的成绩表格外加学生选课信息等,像这类的表格通常显示的信息会因
人面异,因此使用AbstractTableModel会比较容易设计些.

下面是DefaultTableModel的构造函数:
DefaultTableModel():建立一个DefaultTableModel,里面没有任何数据.
DefaultTableModel(int numRows,int numColumns):建立一个指定行列数的DefaultTableModel.
DefaultTableModel(Object[][] data,Object[] columnNames):建立一个DefaultTableModel,输入数据格式为Object Array.系统会
自动调用setDataVector()方法来设置数据。
DefaultTableModel(Object[] columnNames,int numRows):建立一个DefaultTableModel,并具有Column Header名称与行数信息。
DefaultTableModel(Vector columnNames,int numRows):建立一个DefaultTableModel,并具有column Header名称与行数信息。
DefaultTableModel(Vector data,Vector columnNames):建立一个DefaultTableModel,输入数据格式为Vector.系统会自动调用
setDataVector()方法来设置数据。

DefaultTableModel类提供相当多好用的方法,如之前我们谈论过的getColumnCount(),getRowCount(),getValueAt(),isCellEditable()
setValueAt()等方法,均可直接使用。且DefaultTableModel也提供了addColumn()与addRow()等方法,可让我们随时增加表格的数据。下
面我们就举一个动态增加表格字段的例子:

import java.awt.*;
import java.awt.event.*;
import java.util.Vector;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;

public class AddRemoveCells implements ActionListener
{
JTable table = null;
DefaultTableModel defaultModel = null;

public AddRemoveCells()
{
JFrame f = new JFrame();
String[] name = {"字段 1","字段 2","字段 3","字段 4","字段 5"};
String[][] data = new String[5][5];
int value =1;
for(int i=0; i<data.length; i++)
{
for(int j=0; j<data.length ; j++)
data[j] = String.valueOf(value++);
}

defaultModel = new DefaultTableModel(data,name);
table=new JTable(defaultModel);
table.setPreferredScrollableViewportSize(new Dimension(400, 80));
JScrollPane s = new JScrollPane(table);

JPanel panel = new JPanel();
JButton b = new JButton("增加行");
panel.add(b);
b.addActionListener(this);
b = new JButton("增加列");
panel.add(b);
b.addActionListener(this);
b = new JButton("删除行");
panel.add(b);
b.addActionListener(this);
b = new JButton("删除列");
panel.add(b);
b.addActionListener(this);

Container contentPane = f.getContentPane();
contentPane.add(panel, BorderLayout.NORTH);
contentPane.add(s, BorderLayout.CENTER);

f.setTitle("AddRemoveCells");
f.pack();
f.setVisible(true);

f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
/*要删除列必须使用TableColumnModel界面定义的removeColumn()方法。因此我闪先由JTable类的getColumnModel()方法取得
*TableColumnModel对象,再由TableColumnModel的getColumn()方法取得要删除列的TableColumn.此TableColumn对象当作是
*removeColumn()的参数。删除此列完毕后必须重新设置列数,也就是使用DefaultTableModel的setColumnCount()方法来设置。
*/
public void actionPerformed(ActionEvent e)
{
if(e.getActionCommand().equals("增加列"))
defaultModel.addColumn("增加列");
if(e.getActionCommand().equals("增加行"))
defaultModel.addRow(new Vector());
if(e.getActionCommand().equals("删除列"))
{
int columncount = defaultModel.getColumnCount()-1;
if(columncount >= 0)//若columncount<0代表已经没有任何列了。
{
TableColumnModel columnModel = table.getColumnModel();
TableColumn tableColumn = columnModel.getColumn(columncount);
columnModel.removeColumn(tableColumn);
defaultModel.setColumnCount(columncount);
}
}
if(e.getActionCommand().equals("删除行"))
{
int rowcount = defaultModel.getRowCount()-1;//getRowCount返回行数,rowcount<0代表已经没有任何行了。
if(rowcount >= 0)
{
defaultModel.removeRow(rowcount);
defaultModel.setRowCount(rowcount);//删除行比较简单,只要用DefaultTableModel的removeRow()方法即可。删除
//行完毕后必须重新设置列数,也就是使用DefaultTableModel的setRowCount()方法来设置。
}
}
table.revalidate();
}

public static void main(String args[]) {
new AddRemoveCells();
}
}
分享到:
评论

相关推荐

    学会用JScrollPane和Jtable以及table的Defaulttablemodel*

    这个可以用于做项目表格时用到,因为一个大型的项目所收藏的东西自然会很多故可以用JScrollPane

    Java中DefaultTableModel的用法.pdf

    Java中DefaultTableModel的用法.pdf

    swing中JTable的使用

    DefaultTableModel dtm = (DefaultTableModel) tableModel; /* * TableModel是一个接口 没有删除一行的方法 * AbstractTableModel是TableModel的实现类(抽象类) 也没有删除一行的方法 * DefaultTableModel继承...

    jtable增删改查和jtree连接

    DefaultTableModel dtm=new DefaultTableModel(this.tf.data,this.tf.title); this.tf.jTable1.setModel(dtm); } public Vector setVector(){ Vector v=new Vector(); v.add(""); v.add(""); v.add("...

    j2se项目源码及介绍_飞鸽传书

    d) 使用DefaultTableModel定制需要的JTable。 e) 使用SystemTray、TrayIcon制作托盘图标。 四、 类图 a) 类图 b) 类图说明 类名称 IPMsg 类描述 飞鸽传书主程序。 包描述 main 函数描述 public static void main...

    java万年历源代码

    private DefaultTableModel dtm = new DefaultTableModel(null,astr); private JTable table = new JTable(dtm); //装日期的表格 private JScrollPane sp = new JScrollPane(table); private JButton bLastYear...

    java万年历课程设计

    private DefaultTableModel dtm = new DefaultTableModel(null,astr); private JTable table = new JTable(dtm); //装日期的表格 private JScrollPane sp = new JScrollPane(table); private JButton bLastYear...

    基于Java和Oracle实现的图书馆管理系统设计含全部java源码和SQL文件.rar

    DefaultTableModel defaultModel=null; public BorrowBookList() { super("书籍借阅一览!"); c=getContentPane(); c.setLayout(new BorderLayout()); BookNameLabel=new JLabel("书名 ",JLabel.CENTER);...

    基于java的连连看小程序

    else { return (String.valueOf(length / 1024 / 1024) + "kb");... class LocalTableModel extends DefaultTableModel { public boolean isCellEditable(int row, int column) { return false; } } }

    java+通讯录

    static DefaultTableModel model = new DefaultTableModel(PersonInfo,head); static JTable table=new JTable(model); //****************************初始化主窗口******************************* public ...

    使用 AbstractTableModel 构建Table 在表格中添加JButton按钮

    DefaultTableModel is designed to work with DefaultTableCellRenderer and will return java.lang.String.class for columns containing data types that it does not specifically handle. The exact method ...

    java界面程序代码

    dtm = new DefaultTableModel(null,title);//建立表格数据模型 table = new JTable(dtm);//利用数据模型建立表格 scroll2 =new JScrollPane(table); initTable();//建立表 splitPane = new JSplitPane...

    Java学生签到系统源码

    Java学生签到系统源码

    学生信息系统

    public void freshTable(String sql){ myConnection conn=new myConnection(); ResultSet rs; rs=conn.getResult(sql); if (rs!=null){ try{ mm.setRowCount(0);... String 学号 = rs.getString(...

    javaSE代码实例

    第一篇 起步篇 第1章 初识Java 3 1.1 Java简介 3 1.1.1 Java的不同平台 3 1.1.2 Java发展的历程 3 1.1.3 Java的特点 4 1.2 安装开发工具包 5 1.2.1 下载JDK 5 1.2.2 安装JDK 6 ...

    随机数,文件读取,j2se

    j2se编写的午饭随机选取系统,方便不知道中午吃什么的用户,随机抽取中饭吃什么。其中技术有:随机数,文件读取,j2se,JTable,DefaultTableModel,隐藏文件,显示文件等等!

    java 给JTable更换表标题Demo.rar

    主要代码: DefaultTableModel model = (DefaultTableModel) table.getModel(); model.setColumnIdentifiers(new String[] {"标题一", "标题二", "标题三"});

    Java:具有反射和注释的通用表模型

    对于任何说过从不使用DefaultTableModel的人来说,有些人已经保证了它的死机,但是很少有人花时间来开发自己的TableModel,因此许多人使用它并没有发现问题。 但是可以肯定的是,维护DefaultTableModel的复杂性很高...

    JTable应用实例

    简单易懂的JTable应用实例,import javax.swing.table.DefaultTableModel;

    sql与mysql可视化增删改查.pdf

    与SQL可视化增,删,改 建立表格: : public JTable table;...public DefaultTableModel dftm; public String[] columnNames = new String[] { "序号", "用户名", "密码" }; // 定义数组表示表格标题

Global site tag (gtag.js) - Google Analytics