Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JTable中的数组数据_Java_Arrays_Swing_Jtable_Data Consistency - Fatal编程技术网

Java JTable中的数组数据

Java JTable中的数组数据,java,arrays,swing,jtable,data-consistency,Java,Arrays,Swing,Jtable,Data Consistency,以下代码用于设置JTable的行和列: private void createUIComponents() { ergebnisModel = (DefaultTableModel) setupColumnsAndRows(); ergebnisTabelle = new JTable(ergebnisModel); ergebnisTabelle.setFont(new Font("Arial", Font.PLAIN, 15)); //ergebni

以下代码用于设置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传入的数字

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

传递
计算器
对象不会有问题,因为依赖此对象的其他组件(
绘图仪
实例)总是最新的

问题在哪里

还有没有其他更好的方法将数据放入表中

编辑

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

model.fireTableDataChanged();
不要直接调用该方法。当数据更改时,模型负责调用方法

在同一会话中使用第一个屏幕的不同输入再次打开对话框后,数据不会刷新

我猜您正在创建一个新的JTable,但该表只是存储在内存中,实际上还没有添加到滚动窗格的视口中

不要创建新的JTable和TableModel

只需使用新数据刷新模型即可:

model.setRowCount(0);
model.addRow(...);
...
不要直接调用该方法。当数据更改时,模型负责调用方法

在同一会话中使用第一个屏幕的不同输入再次打开对话框后,数据不会刷新

我猜您正在创建一个新的JTable,但该表只是存储在内存中,实际上还没有添加到滚动窗格的视口中

不要创建新的JTable和TableModel

只需使用新数据刷新模型即可:

model.setRowCount(0);
model.addRow(...);
...

感谢您的回答,我必须在哪里输入代码来刷新数据?因为我明白您的意思,但是我还可以在哪里创建JTable?当您将所有其他组件添加到框架中时,您创建了JTable。之后,您只需通过清除TableModel来刷新表,然后向模型中添加新行数据。但是,由于整个JDialog都是新创建的,所以我是否刷新新数据应该无关紧要,是吗?谢谢您的回答,我必须在哪里输入代码来刷新数据?因为我明白你的意思,但是我还能在哪里创建JTable?当你将所有其他组件添加到框架中时,你会创建JTable。之后,您只需通过清除TableModel来刷新表,然后向模型中添加新行数据。但是,由于整个JDialog都是新创建的,所以我是否刷新新数据应该无关紧要,不是吗?