首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >不执行刷新JTable firetableDataChanged

不执行刷新JTable firetableDataChanged
EN

Stack Overflow用户
提问于 2015-02-06 14:04:35
回答 1查看 973关注 0票数 0

在我从数据结构中的excel导入电子表格的名称之后,我尝试用fireTableChanged()方法更新我的fireTableChanged,但是该方法没有被执行。我通过测试确认数据是正确导入的,jtable应该有必要的信息。

如果JTable被正确更新,我需要做什么?我找到了其他几个关于这个话题的链接,但没有一个对我有用:

刷新Jtable

如何在更新数据库后使JTable显示刷新的数据?

JTable如何在插入、删除或更新数据后刷新表模型。

AbstractDataTable fireTableDataChanged()不刷新jtable

不能用新数据刷新JTable

型号:

代码语言:javascript
复制
public class Model extends Observable {
String[][] data;
List<Arbeitsmappe> AMList = new LinkedList<>();
.....
public void setAMList(List<Arbeitsmappe> aMList) {
AMList = aMList; //new List replace the old
this.getData(); //The 2dimensional Array is filled with the names from the list
setChanged(); 
notifyObservers(Controller.Command_Excel_Eingelesen);
 }
}

查看:

代码语言:javascript
复制
    JTextField cellEditorTF = new JTextField();
    cellEditorTF.setEditable(false);
    DefaultCellEditor cellEditor = new DefaultCellEditor(cellEditorTF);

    ContentTable = new JTable(model.getData(), Model.columnNames);
    //Cell Editable FALSE
    ContentTable.getColumnModel().getColumn(0).setCellEditor(cellEditor);
    //Single Interval Selection 
    ContentTable.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
    //Cell Listener - When Cell is edited the new informationen is safed in AMLISt
    Action action = new AbstractAction()
    {
        public void actionPerformed(ActionEvent e)
        {
            TableCellListener tcl = (TableCellListener)e.getSource();
            Model.AMList.get(tcl.getRow()).Speichername = String.valueOf(tcl.getNewValue());
           // System.out.println("Row: " + tcl.getRow() + "  " + Model.data[tcl.getRow()][1]);
        }
    };
    TableCellListener tcl = new TableCellListener(ContentTable, action);
    JScrollPane scrollPane = new JScrollPane(ContentTable);
    ContentTable.setFillsViewportHeight(true);
    ContentTable.getTableHeader().setReorderingAllowed(false);

    this.add(BorderLayout.NORTH,ButtonPanel);
    this.add(BorderLayout.SOUTH,scrollPane);

}

@Override
public void update(Observable arg0, Object arg1) {
    if(arg0 instanceof Model){
        Model model = (Model) arg0;
        String cmd = (String) arg1;
        if(cmd.equals(Controller.Command_Excel_Eingelesen)){

            ((AbstractTableModel)ContentTable.getModel()).fireTableDataChanged();
            ContentTable.repaint();
            this.repaint();
        }
    }
EN

回答 1

Stack Overflow用户

发布于 2015-02-06 14:20:07

  1. ((AbstractTableModel)ContentTable.getModel()).fireTableDataChanged();被从模型定义中调用,它不应该是,必须是代码的一部分,覆盖AbstractTableModel及其方法的类空
  2. 撇开这个方法不说,这个方法为模型重新设置了所有自定义属性,以及JTable方法的重要部分(例如,重写XxxTableCellRenderer/Editor)
  3. 在fireTableXxxXxx的部分方法中读取API,所有JTable/AbstractTableModel的生命周期都有通知程序,确保每个操作/事件都使用了正确的通知器。
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28367522

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档