내 데이터 구조에서 Excel 스프레드 시트의 이름을 가져온 후 fireTableChanged() 메소드로 JTable을 업데이트하려고하지만 메소드가 실행되지 않습니다. 나는 데이터가 올바르게 임포트되었고 jtable에 필요한 정보가 있어야한다는 것을 확인했다.새로 고침 JTable firetableDataChanged가 실행되지 않았습니다.
JTable이 올바르게 업데이트되었는지 어떻게해야합니까? 나는이 주제에 대한 몇 가지 다른 링크를 발견하지만, 그들 중 누구도 나를 위해 일한 :
How to make JTable show refreshed data after updating database?
JTable How to refresh table model after insert delete or update the data.
AbstractDataTable fireTableDataChanged() does not refresh jtable
Can't refresh my JTable with new data
모델 :
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);
}
}
보기 :
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();
}
}
에 대한 올바른 알리미를 사용하는지 확인, 오버라이드 (override) 도움이 될 것입니다. [최소, 완전하고 검증 가능한 예제 프로그램 작성 및 게시] (http://stackoverflow.com/help/mcve) 코드를 압축하여 실행되는 가장 작은 비트로 압축하고 외부 종속성이없는 코드를 작성하십시오 (예 : 데이터베이스 또는 이미지에 연결해야 함), 문제와 관련이없는 추가 코드가 없지만 여전히 probl을 보여줍니다 여자 이름. –
테이블 모델에서'fireXxxx()'메소드를 호출하면 안된다. 이들은 테이블 모델 자체 내에서만 내부적으로 호출되어야합니다. 이렇게하면 디자인이 깨져 보입니다. –