Java JTable中的数组数据
以下代码用于设置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
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都是新创建的,所以我是否刷新新数据应该无关紧要,不是吗?