문제
jtable에서 행을 선택하면 더 이상 jtable이 업데이트되지 않습니다. 행을 선택하지 않으면 아래의 코드는 예상대로 작동합니다. 행이 jtable에 추가됩니다.
@Override
public void update (Observable arg0, Object arg1)
{
if (arg0 instanceof Logger)
{
LogItem last = systemController.logController.getLog().getLastLogItem();
this.history.add(last);
this.logTableModel.addItem(last);
this.logTable.tableChanged(new TableModelEvent(this.logTableModel));
((DefaultTableModel)this.logTable.getModel()).fireTableStructureChanged();
this.logTable.repaint();
this.logTable.doLayout();
}
}
창을 닫고 다시 열면 새 행을 볼 수 있습니다.
누군가가 왜 행을 선택한 후에 더 이상 JTable에 어떤 업데이트가 보이지 않습니까?
해결책
스윙 이벤트 스레드에서 업데이트 () 호출이 발생합니까? 그렇지 않은 경우 코드는 다음과 같은 것과 같은 것으로 포장해야합니다.
SwingUtilities.invokeLater(new Runnable() { public void run() {
logTableModel.addItem(last);
}});
다른 팁
코드에는 여러 가지 문제가 있습니다. 테이블 구조 (열이 없음)와 관련이 있기 때문에 FireTableStructureChanged를 호출해서는 안됩니다. 테이블 데이터 자체가 아닌 (행 추가, 행 추가, 셀 값 변경 등). 또한 모델 변경에 의해 트리거되어야하므로 테이블 자체에서 Repaint 및 Dolayout을 호출 할 필요가 없습니다.
나는 당신이보아야한다고 생각합니다 테이블 사용 방법 Java 튜토리얼에서 특히 테이블 모델 사용, 데이터 변경 듣기 및 데이터 변경 이벤트 발사를 살펴 봅니다.
제휴하지 않습니다 StackOverflow