2012-11-05 3 views
-1

가능한 중복 :
How to make delete button to delete rows in JTable?의 JTable에서 삭제 행에 대한 바로 가기로 키보드에서 삭제 버튼을 사용하는 방법

가 정확한 내가 원하는 How to make delete button to delete rows in JTable?

에 중복 키보드의 Delete 버튼을 사용하여 JTable에서 행을 삭제합니다. 내 GUI에서 삭제 단추가 있고 바로 가기 만 필요합니다. 또한 나는 키 입력을 만들었지 만, 문제는 내가 테이블 삭제 단추에서 실제로 기본적으로 삭제할 행을 선택하면 현재 셀에 입력하는 데 사용된다는 것입니다. 이 바로 가기를 비활성화하고 삭제 버튼을 눌러 선택한 행을 삭제하고 싶습니다.

+0

무엇이 테이블에서 선택된 행을 삭제하지 못하도록합니까? –

+0

SO는 코드 생성기가 아니므로 더 나은 도움을 위해 [SSCCE] (http://example.com) 게시, 설명 된 문제 설명, 다른 사용자 질문과 중복 가능 – mKorbel

+0

일반적인 접근 방법이 여기에 나와 있습니다 (http : //stackoverflow.com/a/13240106/230513). – trashgod

답변

4

이것은 Swing에서 비교적 기본적인 개념입니다.

How to Use Key Bindings을 살펴볼 필요가 있습니다. 기본적으로

...

InputMap im = table.getInputMap(JTable.WHEN_FOCUSED); 
ActionMap am = table.getActionMap(); 
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0), "delete"); 
am.put("delete", new AbstractAction() { 
    public void actionPerformed(ActionListener listener) { 
     deleteButton.doClick(); 
    } 
}); 

UPDATE

당신이 그것을 사용하지 않도록 설정할 수 있도록 테이블 삭제에 대한 "기본"조치가 없습니다. 주요 문제는 표 모델 및 셀 편집기에서 isCellEditable에 있습니다. 나는 대개이 상황이 대부분의 상황에서 사실로 돌아 오도록 설정했습니다.

내 Mac에서 테스트하는 동안 VK_DELETE을 사용하지 않았지만 VK_BACKSPACE을 대신 사용했습니다. 나는 그것을 설정하면, 그것은 괜찮 았는데

... 맥 OS 1.7.5에

테스트, JDK 7, 윈도우 7 업데이트]

final MyTestTable table = new MyTestTable(new MyTableModel()); 
table.setShowGrid(true); 
table.setShowHorizontalLines(true); 
table.setShowVerticalLines(true); 
table.setGridColor(Color.GRAY); 

InputMap im = table.getInputMap(JTable.WHEN_FOCUSED); 
ActionMap am = table.getActionMap(); 

Action deleteAction = new AbstractAction() { 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     System.out.println("I've being delete..." + table.getSelectedRow()); 
    } 

}; 

im.put(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0), "Delete"); 
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_BACK_SPACE, 0), "Delete"); 
am.put("Delete", deleteAction); 

setLayout(new BorderLayout()); 
add(new JScrollPane(table)); 

, JDK 6 개 & 7 - 작품 괜찮음

+0

나는 그것을 만들었지 만 행을 삭제할 때 행을 삭제하고 누를 때 마지막으로 선택한 행에 삭제할 때 대신 행을 삭제합니다. 문제는 이미 바인드 된 버튼 삭제를 비활성화하는 방법입니다. – user1761818

+1

아니, 그게 문제가 아니었다;) – MadProgrammer

관련 문제