문제

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 튜토리얼에서 특히 테이블 모델 사용, 데이터 변경 듣기 및 데이터 변경 이벤트 발사를 살펴 봅니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top