Java JTable.updateUI()不';不要刷新我的桌子
单击“加载”按钮时,我正在尝试刷新我的表格面板。单击GUI中的加载按钮时,将调用replaceText()方法。将发送一个新的columnNames列表和显示内容来更新扩展AbstractTableModel的my tableModel。然后调用table.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;
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(…)
,允许您重置模型中的数据