Java 未执行Refresh JTable firetableDataChanged
在将excel中的电子表格名称导入数据结构后,我尝试使用fireTableChanged()方法更新JTable,但该方法未执行。我通过测试确认数据正确导入,并且jtable应该具有必要的信息 我必须做什么才能正确更新JTable? 我找到了几个指向此主题的其他链接,但没有一个对我有用: 型号: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
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();
}
}