在Java Swing中填充空表

时间:2010-01-25 10:51:03

标签: java swing jtable

我想有一个JFrame窗口,其初始空表为10列。通过鼠标单击生成的操作事件应该使用10个或更少项的列表填充表,将表的已用行留空。该怎么做?

3 个答案:

答案 0 :(得分:4)

我建议您通过继承AbstractTableModel来定义自己的TableModel实现。这样,您可以使用任何合适的集合(例如java.util.List)“返回”您的模型。当一个ActionEvent被触发时,你通常会修改你的底层集合,然后触发TableModelEvent以使JTable被重新绘制。

答案 1 :(得分:2)

为此,您应该使用所需的数据创建 DefaultTableModel ,对于空行,您可以使用 null 值填充对象表。

使用一些代码更简单:

由于我不知道您的数据来自哪里,我认为它来自一个行数少于10行的矩阵:

String data[][] = {{"a","b"}, {"c","d"}};

您必须使用之前的数据创建一个新矩阵,并使用 null 单元格来完成表格。最后你会有这样的事情。

Object data2[][] = {{"a","b"}, 
{"c","d"}, 
{null,null}, 
{null,null}, 
{null,null}, 
{null,null}, 
{null,null}, 
{null,null}, 
{null,null}, 
{null,null}};

这样你就会有一个10x2的矩阵来填充你的桌子。现在,您可以更新 DefaultTableModel

yourTable.setModel(
        new DefaultTableModel(data2, new String [] {"Column1Title", "Cloumn2Title"}) {
        Class[] types = new Class[] {String.class,String.class}; 
        boolean[] canEdit = new boolean[] {true, true};
        @Override
        public Class getColumnClass(int columnIndex){ return types [columnIndex];}
        @Override
        public boolean isCellEditable(int rowIndex, int columnIndex){ return canEdit [columnIndex];}
});

就是这样。我认为你没有问题来创建你的对象矩阵。

答案 2 :(得分:0)

除了按照Adamski的说明创建自己的TableModel之外,您还可以直接使用javax.swing.table.DefaultTableModel
它有一个构造函数,它以列数和行数作为参数和方法来管理数据(addRowinsertRowsetDataAt,...)。

我更喜欢创建一个自己的TableModel,除非它是一个非常简单的程序/功能。