在Java Swing中填充空表格

4

我希望有一个包含10列空表格的JFrame窗口。当鼠标点击事件发生时,应该用一个包含10个或更少项目的列表填充表格,然后留下未使用的表格行。如何完成这个任务?


我并不要求提供完整的代码,只是想知道是否可能以及应该使用哪些方法...谢谢! - Anto
“10或更少”有点模糊不清... - user85421
你想填充表格然后清空它吗?你能更详细地描述一下吗? - marionmaiden
我有一个初始的空表格,共有10行,我只想在其中6行填充新内容,因此剩下的4行保持为空。 - Anto
3个回答

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

请您能否给我一个简短的例子? - Anto
@Vijay:http://java.sun.com/docs/books/tutorial/uiswing/components/table.html#data - trashgod

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];}
});

就是这样。我想你不会在创建对象矩阵方面遇到问题。


0
除了像Adamski所解释的那样创建自己的TableModel之外,您可以直接使用javax.swing.table.DefaultTableModel
它有一个构造函数,该构造函数以列数和行数作为参数,并具有管理数据的方法(addRowinsertRowsetDataAt等)。
我更喜欢创建自己的TableModel,除非它是为一个非常简单的程序/功能。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接