gpt4 book ai didi

java - JTable.updateUI() 不刷新我的表

转载 作者:行者123 更新时间:2023-12-02 00:59:02 27 4
gpt4 key购买 nike

当我单击“加载”按钮时,我试图刷新我的表格面板。当单击 GUI 中的 LOAD 按钮时,将调用 ReplaceText() 方法。将发送新的 columnNames 列表和显示内容来更新扩展 AbstractTableModel 的 tableModel。然后调用table.updateUI()刷新表格。

public class Table {
private JPanel panel;
private TableModel model;
private JTable table;
private JScrollPane scrollPane;

public Table(){
this.panel = new JPanel();
this.model = new TableModel();
this.table = new JTable(model);
this.scrollPane = new JScrollPane(table);
}

public void replaceText(ArrayList<String> names, String[][] content){
model.update(names, content);
table.updateUI();
}

public JPanel build(){
panel.setSize(1000, 300);
panel.setLayout(new BorderLayout());
panel.add(scrollPane, BorderLayout.CENTER);
panel.setVisible(true);

return panel;
}

}

这是我的 tableModel 中的代码:

public class TableModel extends AbstractTableModel {

String[] colNames = new String[] {};
String[][] content = new String[][] {};
@Override
public int getRowCount() {
return content.length;
}

@Override
public int getColumnCount() {
return colNames.length;
}

@Override
public Object getValueAt(int rowIndex, int columnIndex) {
return content[rowIndex][columnIndex];
}

public String getColumnName(int columIndex){
return colNames[columIndex];
}

public void update(ArrayList<String> names, String[][] content){
this.colNames = names.toArray(new String[0]);
this.content = content;
}
}

最佳答案

public class TableModel extends AbstractTableModel {

有一个名为TableModel的接口(interface)。不要将类命名为与接口(interface)相同的名称。这很令人困惑。

table.updateUI();

您不应该调用 updateUI()。该方法仅在您更改 LAF 时由 Swing 在内部使用。更改数据并不会更改 LAF。

当模型的数据发生变化时,“模型”有责任更新“ View ”。

public void update(ArrayList<String> names, String[][] content){
this.colNames = names.toArray(new String[0]);
this.content = content;
}

您的 update(...) 方法不会通知 View 数据已更改。这可以通过调用来完成:

fireTableStructureChanged(…);

update(…) 方法中 AbstractTableModel 的方法。

但是,我认为没有理由创建自定义 TableModel。我建议您只使用 DefaultTableModel。它有一个方法setDataVector(…),允许您重置模型中的数据。

关于java - JTable.updateUI() 不刷新我的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60942783/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com