0

以下代码用于设置 JTable 的行和列:

    private void createUIComponents() {
    ergebnisModel = (DefaultTableModel) setupColumnsAndRows();
    ergebnisTabelle = new JTable(ergebnisModel);
    ergebnisTabelle.setFont(new Font("Arial", Font.PLAIN, 15));

    //ergebnisModel.setRowCount(0);

    tabellenScroll = new JScrollPane(ergebnisTabelle);

    vergleichPlotter = new Plotter(calculator, 450, 400, Plotter.GraphType.VERGLEICH);
    stromPlotter = new Plotter(calculator, 180, 150, Plotter.GraphType.STROM);
    spannungPlotter = new Plotter(calculator, 180, 150, Plotter.GraphType.SPANNUNG);
    leistungPlotter = new Plotter(calculator, 180, 150, Plotter.GraphType.LEISTUNG);
}

private TableModel setupColumnsAndRows() {
    DefaultTableModel ergebnisModel = new DefaultTableModel();
    ergebnisModel.addColumn("Größen");
    ergebnisModel.addColumn("R in Ohm");
    ergebnisModel.addColumn("XL in Ohm");
    ergebnisModel.addColumn("XC in Ohm");

    ergebnisModel.addRow(new String[] {"Widerstand", String.valueOf(calculator.getWiderstand()),
            String.valueOf(calculator.calculateXL()), String.valueOf(calculator.calculateXC())});
    ergebnisModel.addRow(new String[]{"I1", String.valueOf(calculator.getSpannung() / calculator.getWiderstand()), null, null});
    ergebnisModel.addRow(new String[]{"I2", null, String.valueOf(calculator.getSpannung() / calculator.calculateXL()), null});
    ergebnisModel.addRow(new String[]{"I3", null, null, String.valueOf(calculator.getSpannung() / -calculator.calculateXC())});
    ergebnisModel.addRow(new String[] {null, null, null, null});
    ergebnisModel.addRow(new String[]{"P", String.valueOf(calculator.calculateP()), null, null});
    ergebnisModel.addRow(new String[]{"Q", String.valueOf(calculator.calculateQ()), null, null});
    ergebnisModel.addRow(new String[]{"S", String.valueOf(calculator.calculateS()), null, null});
    ergebnisModel.addRow(new String[]{"R Ges", String.valueOf(calculator.calculateGesWiderstand()), null, null});
    ergebnisModel.addRow(new String[]{"I Ges", String.valueOf(calculator.getGesamtstrom()), null, null});

    return ergebnisModel;
}

} 其中 null 表示一个空格。计算器是-惊喜,惊喜-我的计算器类,它执行所有数学函数。它适用于之前通过 GUI 传入的数字。

该表是输出对话框的一部分。现在我遇到的问题是,在同一会话期间第二次打开对话框后,使用来自第一个屏幕的不同输入,数据没有刷新。它仍然显示使用旧输入完成的计算。

传递对象不会是问题,calculator因为依赖于该对象的其他组件(Plotter实例)总是由

问题出在哪里?

还有另一种更好的方式将数据放入表中吗?

编辑

我正在使用 IntelliJ 的 GUI Builder,它使用 XML 文件来标记 componentbeans 的状态。因此,一些组件(见上文)是手动创建的,而其他组件是我们给定的 XML 文件。

4

1 回答 1

2
model.fireTableDataChanged();

不要直接调用该方法。当数据改变时调用方法是模型的责任。

在同一会话期间第二次打开对话框后,使用来自第一个屏幕的不同输入,数据不会刷新。

我猜您正在创建一个新的 JTable,但该表只是位于内存中,实际上并未添加到滚动窗格的视口中。

不要创建新的 JTable 和 TableModel。

相反,只需使用新数据刷新模型:

model.setRowCount(0);
model.addRow(...);
...
于 2016-05-16T21:26:10.900 回答