gpt4 book ai didi

java - fireTableDataChanged() 的问题

转载 作者:行者123 更新时间:2023-12-02 04:25:51 24 4
gpt4 key购买 nike

我即将使用 Eclipse 创建一个使用 JTable 的 Java 程序。我所做的是创建 JTable,将其与一个扩展 AbstractTableModel 的类(我称为 ResultsTableModel)相关联,并创建一个名为刷新的方法,该方法使用 fireTableDataChanged() 方法。该类如下所示:

public class ResultPanel extends JPanel {

ResultsTableModel rm;
JTable table;
public ResultPanel() {
rm = new ResultsTableModel();
table = new JTable();

setLayout(new BorderLayout());

add(new JScrollPane(table), BorderLayout.CENTER);
}

public void setData(List<Entry> entries) {
rm.setData(entries);
}

public void refresh() {
rm.fireTableDataChanged();
}

}

问题是,当我运行程序时,该程序在某个时刻调用refresh()方法,表数据不会刷新,事实上,表甚至根本没有显示。这是我构建表模型的类:

public class ResultsTableModel extends AbstractTableModel {

private List<Entry> entries = new ArrayList<Entry>();

private String[] colNames = {"STATUS", "ROOT", "DEFINITION"};


public void setData(List<Entry> list) {
this.entries = list;
}

@Override
public String getColumnName(int column) {
return colNames[column];
}


@Override
public int getColumnCount() {
return 3;
}

@Override
public int getRowCount() {
return entries.size();
}

@Override
public Object getValueAt(int arg0, int arg1) {
Entry entry = entries.get(arg0);

switch(arg1) {
case 0:
return entry.getStatus();
case 1:
return entry.getRoot();
case 2:
return entry.getDef();
default:
return "Invalid index";
}
}

}

这只是我能给出的对我遇到的问题的最好描述。程序没有抛出异常,只是没有显示表事件,尽管我调用了 setVisible(true);方法就可以了。任何帮助将不胜感激,谢谢。

最佳答案

您从未告诉您的 JTable 实际上包含创建的 TableModel。

您可以通过构造函数传递它:

rm = new ResultsTableModel();
table = new JTable(rm);
<小时/>

此外,我建议仅从 ResultsTableModel 类中调用 fireTableDataChanged()(例如,在 setData() 的末尾) > 方法),而不是从您的观点(JPanel)明确地看出。拥有 TableModel 的全部意义在于 separate您从模型中看到的 View 。

关于java - fireTableDataChanged() 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32194464/

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