Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.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 未执行Refresh JTable firetableDataChanged_Java_Swing_Jtable_Abstracttablemodel - Fatal编程技术网

Java 未执行Refresh JTable firetableDataChanged

Java 未执行Refresh JTable firetableDataChanged,java,swing,jtable,abstracttablemodel,Java,Swing,Jtable,Abstracttablemodel,在将excel中的电子表格名称导入数据结构后,我尝试使用fireTableChanged()方法更新JTable,但该方法未执行。我通过测试确认数据正确导入,并且jtable应该具有必要的信息 我必须做什么才能正确更新JTable? 我找到了几个指向此主题的其他链接,但没有一个对我有用: 型号: public class Model extends Observable { String[][] data; List<Arbeitsmappe> AMList = new L

在将excel中的电子表格名称导入数据结构后,我尝试使用fireTableChanged()方法更新JTable,但该方法未执行。我通过测试确认数据正确导入,并且jtable应该具有必要的信息

我必须做什么才能正确更新JTable? 我找到了几个指向此主题的其他链接,但没有一个对我有用:

型号:

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);
 }
}
  • ((AbstractTableModel)ContentTable.getModel()).fireTableDataChanged()是从模型定义中调用的,它不应该是,必须是覆盖
    AbstractTableModel
    及其方法的代码、类void的一部分

  • 除此之外,此方法重置模型的所有自定义属性,以及
    JTable
    方法的重要部分(例如,覆盖
    XxxTableCellRenderer
    /
    编辑器

  • ,所有
    JTable
    /
    AbstractTableModel
    的生命周期都有通知程序,请确保每个操作/事件都使用了正确的通知程序

  • ((AbstractTableModel)ContentTable.getModel()).fireTableDataChanged()是从模型定义中调用的,它不应该是,必须是覆盖
    AbstractTableModel
    及其方法的代码、类void的一部分

  • 除此之外,此方法重置模型的所有自定义属性,以及
    JTable
    方法的重要部分(例如,覆盖
    XxxTableCellRenderer
    /
    编辑器

  • ,所有
    JTable
    /
    AbstractTableModel
    的生命周期都有通知程序,请确保每个操作/事件都使用了正确的通知程序


  • 如果你没有得到及时的帮助,考虑创建并发布一个你把代码浓缩到最小的位,它仍然编译和运行,没有外部依赖关系(比如需要链接到一个数据库或图像),没有额外的与你的问题不相关的代码。但仍然说明了您的问题。还要注意,您不应该在表模型上调用任何
    fireXxxx()
    方法。这些应该只在表模型本身内部调用。如果你没有得到帮助,你的设计会很快被打破,考虑创建和发布一个你把代码浓缩到最小的位,它仍然编译和运行,没有外部依赖关系(比如需要链接到一个数据库或图像),没有额外的与你的问题不相关的代码,但仍然说明了您的问题。还要注意,您不应该在表模型上调用任何
    fireXxxx()
    方法。这些应该只在表模型本身内部调用。这样做会破坏您的设计。
        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();
            }
        }