我想有一个JFrame窗口,其初始空表为10列。通过鼠标单击生成的操作事件应该使用10个或更少项的列表填充表,将表的已用行留空。该怎么做?
答案 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。
它有一个构造函数,它以列数和行数作为参数和方法来管理数据(addRow
,insertRow
,setDataAt
,...)。
我更喜欢创建一个自己的TableModel,除非它是一个非常简单的程序/功能。