java - 添加新行后如何使我的 JTable 刷新

标签 java swing jtable

在我将新行添加到 JTable 之后。写入的信息进入 txt 文件,但我的 JTable 没有显示最后一个原始文件。但是如果我关闭程序并再次运行它,它的信息就会出现在表格中。那么,有没有办法在不关闭应用程序并重新运行的情况下刷新JTable中的数据呢?

String[] columns = {"nume", "compozitie", "indicatii", "contraindicatii", "administrare", "pret", "compensabil", "stoc"};

Object[][] data = null;
try {
    File file = new File("medicamente.txt");
    FileReader fileReader = new FileReader(file);
    BufferedReader bufferedReader = new BufferedReader(fileReader);
    data = new Object[100][];
    String line;
    int numLines = 0;
    while ((line = bufferedReader.readLine()) != null) {
        data[numLines] = line.split(",");
        numLines++;
    }

    fileReader.close();

} catch (IOException e) {
    e.printStackTrace();
}

TableModel model = new DefaultTableModel(data, columns) {
    @Override
    public Class getColumnClass(int column) {
        Class returnValue;
        if ((column >= 0) && (column < getColumnCount())) {
            returnValue = getValueAt(0, column).getClass();
        } else {
            returnValue = Object.class;
        }
        return returnValue;
    }
};

JTable table = new JTable(model) {
    public boolean isCellEditable(int row, int column) {
        return false;
    }
};

final TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model);
table.setRowSorter(sorter);
JScrollPane scrollPane = new JScrollPane(table);
scrollPane.setPreferredSize(new Dimension(1000, 500));
mainPanel.add(scrollPane);
scrollPane.setBounds(0, 240, 995, 510);

final JTextField filterText = new JTextField(null);
mainPanel.add(filterText);
filterText.setBounds(0, 750, 850, 25);

JButton button = new JButton("Filter");
mainPanel.add(button);
button.setBounds(850, 750, 150, 25);
button.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        String text = filterText.getText();
        if (text.length() == 0) {
            sorter.setRowFilter(null);
            //   model.fireTableDataChanged();                       

        } else {
            sorter.setRowFilter(RowFilter.regexFilter(text));
        }
    }
});

最佳答案

看起来就像您所想的那样,当文件更新时,JTable 也应该更新。它不是那样工作的。您需要做的是向 TableModel 添加一行。你的情况的一个缺点是

TableModel model = new DefaultTableModel(   data, columns)

您正在使用 TableModel 接口(interface),您可以使用的方法非常有限。而是这样做

DefaultTableModel model = new DefaultTableModel(   data, columns)

然后您可以使用 DefaultTableModel 中的这些方法之一

所以当你想添加一行时,你可以将你的数据收集到一个数组中,addRow(..) 然后表格会自动为你更新。

Object[] row = { data1, data2, data2, data4, data5 };
DefaultTableModel model = (DefaultTableModel)table.getModel();
model.addRow(row);

在我看来,您的 JTable 也是本地范围的。你可能想给它一个全局的类成员范围,这样你就可以从任何需要的地方访问它。

关于java - 添加新行后如何使我的 JTable 刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21777959/

相关文章:

java - 将 spring-ldap 与 ssl 结合使用

java - 使用 JList 和 ListCellRenderer 在 ListCell 上显示多行文本

Java:当没有焦点时,在第二个监视器中保持窗口全屏

Java实现ActionListener的问题

java - 如何启用/禁用调用 AbstractTableModel 的 tableChanged(TableModelEvent e) 方法

java - JTable 不显示标题

java - JFrame 调整大小以适应可见组件

java - 引用的DS OSGi服务设置后如何直接使用?

java - 如何使用 JOptionPane 和数组创建用户多个输入的列表?

java - 如何将 JTable 中的数据导出到 CSV