2012-03-28 3 views
0

에서 사용자 정의 DeleteCellEditor가있는 셀을 클릭하여 JTable 행 제거 HistoryPanel 클래스에서 tableModel이라는 정적 DefaultTableModel을 사용하는 resultsTable이라는 정적 JTable이 있습니다.같은 JTable

resultsTable.getColumn("Delete").setCellEditor(new DeleteButtonEditor(new JCheckBox())); 

내부, 당연히, 나는 다음과 같은 두 가지 메소드를 오버라이드 (override) : 테이블은 사용자 정의 셀 편집기를 가지고

public Object getCellEditorValue() 
{ 
    if (isPushed) 
    { 
     HistoryPanel.tableModel.removeRow(HistoryPanel.resultsTable.getSelectedRow()); 
    } 
} 

protected void fireEditingStopped() 
{ 
    super.fireEditingStopped(); 
} 

난의 마지막 행을 제거하려고 할 때 예외 만 발생되고있다 resultsTable. 마지막 행이 아닌 행을 제거하면 완벽하게 작동합니다.

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 1 >= 1 

그리고 예외가 발생합니다 코드 줄은 다음과 같습니다 : 예외입니다

super.fireEditingStopped(); 

은 누구도 날 도와 드릴까요? 이 예외를 어떻게 피할 수 있습니까?

답변

1

현재 편집 작업 중에 편집중인 행을 제거합니다. SSCCE을 게시하여 제안 된 솔루션을 테스트 할 수 있다면 훨씬 쉬워 질 것입니다.하지만 지금은 그 문제를 해결할 것입니다.

나는 당신의

if (isPushed) 
{ 
    HistoryPanel.tableModel.removeRow(HistoryPanel.resultsTable.getSelectedRow()); 
} 

내부 EventQueue.invokeLater 전화를 포장하면 문제가 해결 될 수 있다고 가정합니다. 이렇게하면 행을 제거 할 때 편집이 완료됩니다.

+0

감사합니다! 매력처럼 작동합니다! –

+0

@HristoValchevHristov는 [답변 수락] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)을 고려하여 다른 사람들이이 질문을 해결할 수 있도록합니다. – Robin

1

정말 왜 직접 Boolean 값을 사용하는 이유가 Editor for JCheckBox, 당신은 튜토리얼을 확인해야 how the JTable works

편집

당신이

int row = table.convertRowIndexToModel(table.getEditingRow()); 
fireEditingStopped(); 

전화를해야하고 thenafter 당신이 할 수있는 실제 TableCellEditor에 대한

삭제 요청