我几乎完成了使用Eclipse使用JTable在Java中创建程序的过程。我所做的是制作一个JTable,将其与一个扩展AbstractTableModel的类(我称为ResultsTableModel)相关联,并制作了一个名为refresh的方法,该方法使用了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);




此外,我建议仅从您的fireTableDataChanged()类内部(例如,在ResultsTableModel方法的末尾)而不是从您的视图(JPanel)中调用setData()
具有TableModel的全部目的是要在模型中separate查看。

09-11 18:47