0

我创建了一个 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

4

2 回答 2

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此处扩展,因此可能需要重新设计

于 2013-10-22T12:28:18.357 回答
2

LeagueTable 是你的Statistics类的一个实例。所以它没有addRow()方法。

可能的解决方案:

  • 在你的课堂上做DefaultTableModel一个变量。Statistics
  • 在 Statistics 中创建一个通过调用模型与表模型交互的方法addRow()
于 2013-10-22T12:30:43.790 回答