java - 在 JTable 中显示变量数据

标签 java swing jtable tablemodel

我已经看过很多教程/示例(我在这里花了很多时间 http://docs.oracle.com/javase/tutorial/uiswing/components/table.html ),但我仍然不知道如何正确使用 JTable 来表示在运行时更改的数据(都是字符串)。我不希望通过选择行/单元格来修改它。在最初创建表(创建为空)后,我的程序在运行时修改数据(包括行数)。

我尝试了内部类

private class PairingsTableModel extends AbstractTableModel {
 ...
 public void setValueAt(String value, int row, int col) {
  data[row][col] = value;
  fireTableCellUpdated(row, col);
 }
 ...
}

我的 JTable 实例化如下

JTable pairingsTable = new JTable(new PairingsTableModel());

它使用我提供的数据作为pairingsTableModel的实例变量,但pairingsTable.getModel()似乎没有返回pairingsTableModel(调用pairingsTable.getModel().setValueAt("Hello",0,0)什么也不做,Eclipse认为我没有在任何地方使用setValueAt)

最佳答案

您没有正确地重写 setValueAt(...),您实际上是通过使用 String 参数而不是 Object 来重载...

这意味着以下调用 TableModel.setValueAt(Object aValue, int rowIndex, int columnIndex) 而不是您的自定义方法 setValueAt(String aValue, int rowIndex, int columnIndex)

pairingsTable.getModel().setValueAt("Hello", 0, 0) 

将 setValueAt() 更改为以下内容,事情应该开始按预期工作

public void setValueAt(Object value, int row, int col) {
    data[row][col] = (String)value;
    fireTableCellUpdated(row, col);
}

完整的 MCVE

private static class PairingsTableModel extends AbstractTableModel {
    private String[][] data = new String[][] { new String[] { "foo", "bar" } };
    public void setValueAt(Object value, int row, int col) {
        data[row][col] = (String)value;
        fireTableCellUpdated(row, col);
    }
    @Override
    public int getRowCount() {
        return data.length;
    }
    @Override
    public int getColumnCount() {
        return 1;
    }
    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        return data[rowIndex][columnIndex];
    }
}
private static int clock;

public static void main(String args[]) {
    JFrame frame = new JFrame();
    final PairingsTableModel model = new PairingsTableModel();
    JTable pairingsTable = new JTable(model);
    frame.setLayout(new BorderLayout());
    frame.add(pairingsTable, BorderLayout.CENTER);
    frame.setVisible(true);
    new Timer().scheduleAtFixedRate(new TimerTask() {
        @Override
        public void run() {
            pairingsTable.getModel().setValueAt("test" + clock++, 0, 0);
        }
    }, 0, 1000);
}

关于java - 在 JTable 中显示变量数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28942151/

相关文章:

java - 在Java sesame中打印一条语句

java - 如何增加Tab中JTextField的宽度?

java - 如何检查 JTable JAVA 中是否存在行?

java - 为 Xtext 语法创建一个自己的解释器

java - 封装、访问器 C# 与 Java

java - 将 actionBar 主题更改为 Holo.Light?

java可扩展的JDialog

java - JTable - 删除行时更改行

java - 单击按钮打开一个新的 JTable

Java Swing JTable 数据收集在最后一个单元格上失败