Java 如果';重新使用记事本将数据放入jtable

Java 如果';重新使用记事本将数据放入jtable,java,swing,jtable,notepad,Java,Swing,Jtable,Notepad,表1.repaint();和tableModel.fireTableDataChanged();不起作用。我尝试了这两个函数,但jtable无法刷新。当调用行数较少的记事本时,其中行数较多的记事本将保留在jTable中 我正在使用BufferedReader和FileReader从记事本中读取它 是否仍要将表刷新为默认值,然后再次显示记事本中的数据?谢谢。因此,基本思路是要么更新现有的表格模型,要么换成新的 因为请求之间的行数似乎会发生变化,因此,例如,替换模型似乎是更安全的选择 这是取自您的r

表1.repaint();和tableModel.fireTableDataChanged();不起作用。我尝试了这两个函数,但jtable无法刷新。当调用行数较少的记事本时,其中行数较多的记事本将保留在jTable中

我正在使用BufferedReader和FileReader从记事本中读取它


是否仍要将表刷新为默认值,然后再次显示记事本中的数据?谢谢。

因此,基本思路是要么更新现有的
表格模型
,要么换成新的

因为请求之间的行数似乎会发生变化,因此,例如,替换模型似乎是更安全的选择

这是取自您的
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();
}