그래서 Java 클래스를위한 Swing에서 간단한 GUI를 만들어야 만합니다. 그리고이 작은 외관상의 문제를 발견했습니다.JMenuItem - 액셀러레이터에서 동작이 호출되었는지 확인하는 방법?
나는 다음과 같은 코드를 가지고 : 나는 스윙 다르게이를보고 보인다 전송으로 버튼을 1보다 다른 마우스 버튼을 사용하는 경우 마우스 오른쪽 버튼으로 클릭하거나 호출 된 메뉴 항목을 본 적이
JMenuItem mntmQuit = new JMenuItem("Quit");
mntmQuit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (e.getModifiers() == MouseEvent.BUTTON1_MASK) {
System.out.println("You should fire.");
} else if (e.getModifiers() == MouseEvent.BUTTON2_MASK || e.getModifiers() == MouseEvent.BUTTON3_MASK) {
System.out.println("Why do you fire this event?");
} else {
System.out.println("And how can I catch when the accelerator was used?");
}
}
});
mntmQuit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q, 0));
을 어떤 마우스 버튼이 눌러 졌는지 상관없이 액션 이벤트 - JButton
과 반대로 마우스 버튼 1을 클릭하지 않는 한 아무 것도 실행하지 않습니다.
이제는 마우스 버튼 1을 쉽게 잡아서 내 작업을 수행 할 수있게되었습니다. , 그러나 가속기의 사용법을 잡는 것은 어떨까요? 그것은 액션 이벤트를 발생시킬 것이지만, 나는 '0'을 수정 자로 반환하므로 (1, 2, 3을 제외한 다른 마우스 버튼과 동일) 잡을 수있는 가능성은 없습니다.
JMenuItem
에는 마우스 버튼 1에만 반응해야한다고 말하는 방법이 있습니까? 가속기입니까? JButton
과 비슷한 방식으로 작동합니까?
답변을 주셔서 감사합니다. 그러나 올바르게 이해할 수 있을지 확실하지 않습니다. 'e.getModifiers() == KeyEvent.VK_Q'를 확인하면 작동하지 않습니다. 'e.getModifiers()가 액셀러레이터에 의해 실행되면'0 '을 반환하고 이것이 실행 된 이벤트와 구별 할 수 없기 때문이라고 생각합니다 마우스 버튼 4를 예로 들어 보겠습니다. 편집 : 죄송합니다. 첫 번째 코드 줄을 놓치 셨습니다. 그것도 생각할 만하다. 그러나 문제는 수정 자 (Modifier)가 액셀러레이터뿐만 아니라 1, 2 또는 3보다 다른 모든 마우스 버튼과 일치한다는 것이다. – user1728176
@ user1728176 내 편집을 참조하십시오. – Aboutblank