2011-11-23 10 views
6

Tôi có một ứng dụng có ngăn chứa thẻ và các thành phần khác nhau trong đó. Tôi đã đặt MenuItem làm Hành động với Trình tăng tốc:Có yếu tố Swing nào có F6 làm bộ tăng tốc mặc định không?

private final Action focusDefaultCommandsAction = new AbstractAction() 
{ 
    { 
     putValue(NAME, "Fokusiere Kommandoliste"); 
     putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_F6, 0)); 
    } 

    @Override 
    public void actionPerformed(final ActionEvent e) 
    { 
     invokeShowCommandsList(); 
    } 
}; 

Tôi biết có một tab mà Bộ gia tốc cho khóa F6 không hoạt động. phím F7 hoạt động.

Có thể một máy gia tốc mặc định trên một phần tử Swing có ưu tiên hơn máy gia tốc của tôi không?

Trả lời

9

Bạn có thể tra cứu trong BasicLookAndFeel.java (hoặc lớp tương tự tùy thuộc vào L & F bạn sử dụng), tìm kiếm trên F6.

Có vẻ như F6 được JSplitPane sử dụng để chuyển đổi tiêu điểm giữa nội dung và ngăn chia. Để loại bỏ nó, bạn có thể sử dụng một cái gì đó tương tự (không dự thi, tôi nghĩ rằng loại bỏ các hành động thực tế là khó khăn hơn bởi vì nó có thể là trong một bản đồ mẹ đầu vào):

splitPane.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT) 
    .put(KeyStroke.getKeyStroke(KeyEvent.VK_F6, 0), "none"); 
+1

Miracle: nó hoạt động :) cảm ơn bạn rất nhiều. – Neifen

+0

Có ai biết một nơi để tìm tất cả các máy gia tốc được sử dụng bởi các thành phần Swing hay không. Có thể hữu ích –

+0

Lưu ý rằng JSplitPane cũng sử dụng bộ tăng tốc F8. –