Cách tốt nhất tôi có thể thấy là thêm Action
vào bản đồ hành động của ngăn gốc và liên kết hành động đó với phím thoát bằng cách sử dụng bản đồ đầu vào của ô gốc.
Đối với điều này, bạn cần một Action
. (. Tức là cancelButton.getAction() != null
) Nếu hành vi nút của bạn hủy được thực hiện như một hành động, thì điều này sẽ làm việc:
getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "CANCEL");
getRootPane().getActionMap().put("CANCEL", cancelButton.getAction());
Ngược lại, nếu logic nút hủy được thực hiện thông qua một ActionListener
, bạn có thể có phương pháp actionPerformed()
của ActionListener
gọi phương thức private void onCancel()
triển khai logic và đăng ký hành động "hủy" gọi cùng một phương thức.
getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "CANCEL");
getRootPane().getActionMap().put("CANCEL", new AbstractAction(){
@Override
public void actionPerformed(ActionEvent e)
{
onCancel();
}
});
Đoán bạn là phím thoát .. – NateS