我创建了一个DefaultTableModel,它在JTabbedPane中显示了一个非常基本的用户联盟表。
我想使用从不同类中收集的一些数据添加一行。此代码不会运行,但这里有一个示例:
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
public class Statistics extends JPanel {
public Object[][] data;
public Statistics() {
super(new GridLayout(1,0));
String[] columnNames = {"Name", "Games Played", "Games Won"};
Object[][] data = {
{"Tom", new Integer(5), new Integer(2)},
{"Steve", new Integer(2), new Integer(0)},
};
DefaultTableModel model = new DefaultTableModel(data, columnNames);
JTable table = new JTable(model);
table.setFillsViewportHeight(true);
table.setVisible(true);
table.setEnabled(false);
JScrollPane scrollPane = new JScrollPane(table);
add(scrollPane);
}
}
然后我从我的主要课程中调用它:
...
stats = new JPanel(); //create a new JPanel for table to go on
...
tp.addTab ("Statistics", stats); // add panel to JTabbedPane
..
leagueTable = new Statistics();// add the table to the stats panel
stats.add(leagueTable);
这是出现并且很好,但任何人都可以指导我使用什么语法添加一行,我试过:
leagueTable.addRow(table.getRowCount(), new Object[]{"ange", 5, 3});
但这不起作用,eclipse要求我向Statistics类添加一个名为'addRow'的方法,但我认为'addRow'已经是DefaultTableModel的一个方法,所以我很困惑。任何人都可以帮我解决如何向表中添加一行数据的问题吗?谢谢IA
答案 0 :(得分:2)
addRow
是TableModel
的一种方法,但您正在调用Statistics
类上的方法。您可以创建一个新方法来添加数据:
public class Statistics extends JPanel {
private DefaultTableModel model
public Statistics() {
super(new GridLayout(1,0));
model = new DefaultTableModel(data, columnNames);
...
}
public void addData(Object[] data) {
model.addRow(data);
}
}
旁注:如果不添加新功能,通常您不想在此扩展JPanel
,因此可能需要重新设计
答案 1 :(得分:2)
leagueTable是您Statistics
课程的一个实例。所以它没有addRow()
方法。
可能的解决方案:
DefaultTableModel
课程中为Statistics
变量。addRow()
。