Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JTable.updateUI()不';不要刷新我的桌子_Java_Swing_Jtable - Fatal编程技术网

Java JTable.updateUI()不';不要刷新我的桌子

Java JTable.updateUI()不';不要刷新我的桌子,java,swing,jtable,Java,Swing,Jtable,单击“加载”按钮时,我正在尝试刷新我的表格面板。单击GUI中的加载按钮时,将调用replaceText()方法。将发送一个新的columnNames列表和显示内容来更新扩展AbstractTableModel的my tableModel。然后调用table.updateUI()刷新表 public class Table { private JPanel panel; private TableModel model; private JTable table;

单击“加载”按钮时,我正在尝试刷新我的表格面板。单击GUI中的加载按钮时,将调用replaceText()方法。将发送一个新的columnNames列表和显示内容来更新扩展AbstractTableModel的my 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;
    }

}
公共类表{
私人JPanel小组;
私有表模型;
专用JTable表;
私有JScrollPane滚动窗格;
公共表(){
this.panel=new JPanel();
this.model=新的TableModel();
此表=新JTable(型号);
this.scrollPane=新的JScrollPane(表);
}
public void replaceText(数组列表名称,字符串[][]内容){
更新(名称、内容);
table.updateUI();
}
公共JPanel构建(){
面板设置尺寸(1000300);
panel.setLayout(新的BorderLayout());
panel.add(滚动窗格,BorderLayout.CENTER);
面板设置可见(真);
返回面板;
}
}
下面是我的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;
    }
}
公共类TableModel扩展了AbstractTableModel{
字符串[]colNames=新字符串[]{};
字符串[][]内容=新字符串[][]{};
@凌驾
public int getRowCount(){
返回content.length;
}
@凌驾
public int getColumnCount(){
返回colNames.length;
}
@凌驾
公共对象getValueAt(int行索引、int列索引){
返回内容[行索引][列索引];
}
公共字符串getColumnName(int-ColumnIndex){
返回colNames[columIndex];
}
公共无效更新(ArrayList名称,字符串[][]内容){
this.colNames=names.toArray(新字符串[0]);
this.content=内容;
}
}
有一个名为
TableModel
的接口。不要将类命名为与接口相同的名称。这令人困惑

table.updateUI();
您不应该调用updateUI()。当您更改LAF时,Swing仅在内部使用该方法。更改数据并不改变LAF

当模型的数据发生变化时,“模型”负责更新“视图”

public void update(ArrayList<String> names, String[][] content){
    this.colNames = names.toArray(new String[0]);
    this.content = content;
}
更新(…)方法中AbstractTableModel的方法

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

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

table.updateUI();
您不应该调用updateUI()。当您更改LAF时,Swing仅在内部使用该方法。更改数据并不改变LAF

当模型的数据发生变化时,“模型”负责更新“视图”

public void update(ArrayList<String> names, String[][] content){
    this.colNames = names.toArray(new String[0]);
    this.content = content;
}
更新(…)方法中AbstractTableModel的方法

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