나는 자바 스윙 응용 프로그램을 개발 중입니다. 키보드 바로 가기를 추가하려고합니다. CTRL + H 클릭하면 jButton1과 동일한 작업이 수행됩니다.자바에서 사용자 정의 키보드 단축키
이 바로 가기는 jButton1에 포커스가 맞지 않아도 동일한 방식으로 동작해야합니다.
KeyEventDispatcher로 시도했지만 실제로 작동하지 않습니다. 다른 방법이 있습니까?
나는 자바 스윙 응용 프로그램을 개발 중입니다. 키보드 바로 가기를 추가하려고합니다. CTRL + H 클릭하면 jButton1과 동일한 작업이 수행됩니다.자바에서 사용자 정의 키보드 단축키
이 바로 가기는 jButton1에 포커스가 맞지 않아도 동일한 방식으로 동작해야합니다.
KeyEventDispatcher로 시도했지만 실제로 작동하지 않습니다. 다른 방법이 있습니까?
발견 될 수 있다고 생각합니다. 오라클의 TextComponentDemo
(약간 수정,하지만 여전히 예로서 DefaultEditorKit 사용)에서 :
// CTRL + H
KeyStroke key = KeyStroke.getKeyStroke(KeyEvent.VK_H, Event.CTRL_MASK);
// bind the keystroke to an object
inputMap.put(key, DefaultEditorKit.backwardAction);
당신이 이벤트가 구성 요소에 포커스가없는 경우에도 해고 할 때 Key Listeners 이상을 사용
Key listeners are also difficult if the key binding is to be active when the component doesn't have focus.을 대신 수정으로 키 명시 적으로 컨트롤을 사용
는 MASK
사용 더 나은 교차 플랫폼 사용자 환경을 위해 getMenuShortcutKeyMask()
에 의해 반환되었습니다. ImageApp
은 example입니다.
Ok - 먼저 Java Swing에서 응용 프로그램의 다양한 바로 가기를 설정할 방법이 없다고 생각합니다 (이 question 참조). 그러나 구성 요소의 경우 가능합니다.
KeyStroke
에 대해 Action
을 사용해야합니다. 하지만 Windows의 경우이 라이브러리는 매우 helpful입니다.
{
KeyStroke cancelKeyStroke = KeyStroke
.getKeyStroke((char) KeyEvent.VK_ESCAPE);
Keymap map = JTextComponent.getKeymap(JTextComponent.DEFAULT_KEYMAP);
map.addActionForKeyStroke(cancelKeyStroke, cancelKeyAction);
}
private static Action cancelKeyAction = new AbstractAction() {
public void actionPerformed(ActionEvent ae) {
Component comp = (Component) ae.getSource();
Window window = SwingUtilities.windowForComponent(comp);
if (window instanceof Dialog) {
window.dispose();
} else if (comp instanceof JTextComponent
&& !(comp instanceof JFormattedTextField)) {
JTextComponent tc = (JTextComponent) comp;
int end = tc.getSelectionEnd();
if (tc.getSelectionStart() != end) {
tc.setCaretPosition(end);
}
}
}
};
스윙 구성 요소를 동적으로 생성 하시겠습니까? 우리는 컴포넌트에 단축키를 추가 할 수는 있지만 애플리케이션 전반에는 단축키를 추가 할 수 없다 - 'component.getInputMap(). put (aKeyStroke, aCommand);' – Chan