Java 如果';重新使用记事本将数据放入jtable
表1.repaint();和tableModel.fireTableDataChanged();不起作用。我尝试了这两个函数,但jtable无法刷新。当调用行数较少的记事本时,其中行数较多的记事本将保留在jTable中 我正在使用BufferedReader和FileReader从记事本中读取它Java 如果';重新使用记事本将数据放入jtable,java,swing,jtable,notepad,Java,Swing,Jtable,Notepad,表1.repaint();和tableModel.fireTableDataChanged();不起作用。我尝试了这两个函数,但jtable无法刷新。当调用行数较少的记事本时,其中行数较多的记事本将保留在jTable中 我正在使用BufferedReader和FileReader从记事本中读取它 是否仍要将表刷新为默认值,然后再次显示记事本中的数据?谢谢。因此,基本思路是要么更新现有的表格模型,要么换成新的 因为请求之间的行数似乎会发生变化,因此,例如,替换模型似乎是更安全的选择 这是取自您的r
是否仍要将表刷新为默认值,然后再次显示记事本中的数据?谢谢。因此,基本思路是要么更新现有的
表格模型
,要么换成新的
因为请求之间的行数似乎会发生变化,因此,例如,替换模型似乎是更安全的选择
这是取自您的readCar
方法,因为它是
private void car_combo1ActionPerformed(java.awt.event.ActionEvent evt) {
String choice = String.valueOf(car_combo1.getSelectedItem());
JTableHeader th = car_table.getTableHeader();
if (choice.equals("STATE-Description")) {
car_table.getColumnModel().getColumn(0).setHeaderValue("STATE");
car_table.getColumnModel().getColumn(1).setHeaderValue("Description");
String[] change_choice_to = {"-", "1006", "1009", "1011", "1013", "1015", "1017", "1018", "1019", "1020", "1021", "1022", "1023"};
DefaultComboBoxModel model = new DefaultComboBoxModel(change_choice_to);
car_combo2.setModel(model);
DefaultTableModel model2 = (DefaultTableModel) car_table.getModel();
model1.fireTableDataChanged();
readCar();
}
}
try(BufferedReader br=new BufferedReader(new FileReader(new File(filename))){
DefaultTableModel=new DefaultTableModel(新字符串[]{“状态”,“描述”},0);
对于(int i=0;i
所做的一切就是为文件的每一行创建一个新的DefaultTableModel
,向模型添加一行,然后在完成后将模型应用于表
如果失败,则可能是代码中有其他内容不起作用,或者文件已正确读取(或保存)
查看和了解更多详细信息public tablecar(){
try (BufferedReader br = new BufferedReader(new FileReader(new File(filename)))) {
DefaultTableModel model = new DefaultTableModel(new String[]{"STATE", "Description"}, 0);
for (int i = 0; i < ctr; i++) {
dataCar[i] = br.readLine();
String[] temp = dataCar[i].split("\\*");
model.addRow(temp);
}
car_table.setModel(model);
} catch (IOException e) {
e.printStackTrace();
}
对于(int i=0;i您说的是“再次显示记事本中的数据”就好像我们知道您的程序看起来像什么或正在做什么一样。请通过提供更多的细节和代码来改进您的问题,以便我们更好地理解它。当您更改其模型中的数据时,JTable将更改其显示内容,这在很大程度上取决于您如何构建模型。TableModel
是当内容改变时,可以向表提供通知。查看更多的细节。还可以考虑提供一个演示您的问题的代码。这不是代码转储,而是您正在做的一个例子,它突出了您所面临的问题。这将导致更少的混乱和更好的响应。“是否仍要将表刷新为默认值,然后再次显示记事本中的数据?谢谢。"-将文件读入一个新的TableModel
并将其设置为JTable
…调用repaint
或TableModel
都没有意义,实际上您根本没有更改TableModel
,因此没有任何更改。您似乎有两个JTable
,但我不知道为什么,您的readCar
方法只是为opsim_表
的现有内容设置单元格值,这有点危险,因为如果表中有更多行,那么可能会出现索引越界错误。将数据直接包装到新的TableModel
中,然后在加载操作后将模型应用到表中很抱歉。我对同一个表使用了相同的代码。等等,我会感谢你的代码,但我找到了一些方法。我将在这里发布@MadProgrammer
try (BufferedReader br = new BufferedReader(new FileReader(new File(filename)))) {
DefaultTableModel model = new DefaultTableModel(new String[]{"STATE", "Description"}, 0);
for (int i = 0; i < ctr; i++) {
dataCar[i] = br.readLine();
String[] temp = dataCar[i].split("\\*");
model.addRow(temp);
}
car_table.setModel(model);
} catch (IOException e) {
e.printStackTrace();
}
public void eraseTableCar(){
for(int i = 0; i<110 ; i++){
car_table.setValueAt(" ",i,0);
car_table.setValueAt(" ",i,1);
}
}
public void readCar() {
String choice = String.valueOf(car_combo1.getSelectedItem());
int ctr = 0;
String filename = null;
if (choice.equals("STATE-Description")) {
filename = TEXT_CAR1.getText();
ctr = 12;
} else if (choice.equals("DISCAS-Camera")) {
filename = TEXT_CAR2.getText();
ctr = 3;
} else if (choice.equals("DISCAS-CAR(for removal)")) {
filename = TEXT_CAR3.getText();
ctr = 11;
} else if (choice.equals("DISCAS-PAR(for removal)")) {
filename = TEXT_CAR4.getText();
ctr = 9;
} else if (choice.equals("Closing CAS for chg w/ customer initiated")) {
filename = TEXT_CAR5.getText();
ctr = 11;
}
eraseTableCar();
try {
File file = new File(filename);
FileReader fr = new FileReader(file.getAbsoluteFile());
BufferedReader br = new BufferedReader(fr);
for (int i = 0; i < ctr; i++) {
dataCar[i] = br.readLine();
String[] temp;
temp = dataCar[i].split("\\*");
car_table.setValueAt(temp[0], i, 0);
car_table.setValueAt(temp[1], i, 1);
}
} catch (IOException e) {
e.printStackTrace();
}