2010-11-21 40 views
9

Trong SWT, bạn có thể đặt bất kỳ nút nào cho phím tắt bằng cách thêm & ở phía trước chữ cái trong nhãn nút. Ví dụ: nếu nhãn nút của tôi là &Play, tôi có thể kích hoạt nút bằng cách nhấn vào chữ cái p trên bàn phím.Phím tắt cho jButton mà không sử dụng phím alt

Trong xoay, bạn có thể thêm phím tắt bằng cách sử dụng thuộc tính mnemonic. Tuy nhiên, bạn cần phải nhấn alt+p để kích hoạt nút. Điều này thực sự thích hợp nhất cho các phím tắt menu. Tôi muốn kích hoạt nút bằng cách nhấn phím và không sửa đổi độ cao.

Tôi đã xem bài đăng này về cách thực hiện, nhưng có vẻ phức tạp vô lý. Có cách nào dễ hơn để thực hiện việc này không?

http://linuxjavaprogrammer.blogspot.com/2008/01/java-swing-jbutton-keyboard-shortcuts.html

Cập nhật: Sau gợi ý @camickr, tôi đã kết thúc sử dụng mã này. Tôi không thể tìm thấy bất kỳ ví dụ rõ ràng và đơn giản trực tuyến, vì vậy hy vọng điều này sẽ giúp mọi người ra ngoài.

// play is a jButton but can be any component in the window 
play.getInputMap(play.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_P, 0), "play"); 
play.getActionMap().put("play", new AbstractAction() { 
public void actionPerformed(ActionEvent e) { 
    playActionPerformed(e); // some function 
} 
}); 

Trả lời

5

Có, Swing được thiết kế để sử dụng Key Bindings. Vì vậy, thay vì thêm một ActionListener vào nút bạn thêm một hành động. Sau đó, hành động đó có thể được chia sẻ bằng nút hoặc một mục menu. Bạn cũng có thể gán bất kỳ số lượng KeyStrokes nào để gọi Hành động bằng cách sử dụng KeyBindings. Hướng dẫn này cũng có một phần về các hành động giải thích tại sao sử dụng một hành động có lợi.

JComponent có một phương thức registerKeyboardAction (...) về cơ bản thực hiện các ràng buộc InputMap/ActionMap cho bạn, nhưng nó cũng phải bọc ActionListener trong một hành động bao bọc để bạn có thể thích hợp hơn với bạn.

0

Tôi gặp sự cố tương tự với biểu mẫu được tạo động (dựa trên dữ liệu đầu vào) và chỉ kết thúc bằng cách đính kèm tác vụ keyListener vào các nút. Về xây dựng biểu mẫu, tôi phân tích cú pháp cây Thành phần cho các nút và đính kèm trình nghe. Người nghe cũng phân tích cú pháp cây và khớp với phím nhấn bằng nút thích hợp (thông qua văn bản trong nút), vì tôi không biết ai sẽ tập trung vào bất kỳ thời điểm nào và kích hoạt nút doClick ... Thật xấu xí, cảm thấy bị tấn công, và nó phải là một bộ xử lý bit chuyên sâu, nhưng nó cho phép sự linh hoạt tôi cần cho dạng động đặc biệt này ...

1

Tiếp theo câu trả lời của camickr, tôi hiện đang sử dụng một chức năng tiện ích nhỏ như sau:

public static void clickOnKey(
    final AbstractButton button, String actionName, int key) 
{ 
    button.getInputMap(JButton.WHEN_IN_FOCUSED_WINDOW) 
     .put(KeyStroke.getKeyStroke(key, 0), actionName); 

    button.getActionMap().put(actionName, new AbstractAction() 
    { 
     @Override 
     public void actionPerformed(ActionEvent e) 
     { 
      button.doClick(); 
     } 
    }); 
} 

Hiện hành để đặt phím tắt cho một nút tôi chỉ làm:

clickOnKey(playButton, "play", KeyEvent.VK_P); 
Các vấn đề liên quan