스윙 다른 키 스트로크 (keystroke)에 대한 작업을 호출하는 키 바인딩을 사용합니다. JComboBox에는 ENTER 키에 대한 액션이 있습니다. 모든 바인딩 목록을 Key Bindings에서 확인하십시오.
그래서 나는 다른 키 스트로크에 Enter 액션을 바인딩하는 간단한 케이스라고 생각했다.
물론 Enter 키 동작을 RIGHT
화살표 키에 바인딩 할 때 기능이 예상대로 작동했습니다.
그러나 입력 동작을 TAB
키에 바인딩하면 작동하지 않습니다. 그러나 팝업 메뉴는 여전히 닫혀 있습니다. 그래서 지금 Tab 키가 새로운 TAB 키 바인딩이 작동하지 못하게하는 메뉴를 닫기 위해 다른 구성 요소에 의해 처리되는지 궁금합니다. 어쩌면 다른 사람이 이것에 대해 통찰력을 가지고 있을까요?
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.plaf.basic.*;
public class ComboBoxTest2 extends JFrame
{
JComboBox comboBox;
JTextField textField;
String[] tabs;
public ComboBoxTest2()
{
String[] tabs = { "a", "b", "c", "d", "e", "f", "g" };
DefaultComboBoxModel model = new DefaultComboBoxModel(tabs);
comboBox = new JComboBox(model);
add(comboBox, BorderLayout.NORTH);
add(new JButton("A Component To Tab To"), BorderLayout.SOUTH);
// This works
InputMap im = comboBox.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
KeyStroke existingKeyStroke = KeyStroke.getKeyStroke("ENTER");
KeyStroke rightKS = KeyStroke.getKeyStroke("RIGHT");
im.put(rightKS, im.get(existingKeyStroke));
// This doesn't work
comboBox.setFocusTraversalKeysEnabled(false);
KeyStroke tabKS = KeyStroke.getKeyStroke("TAB");
im.put(tabKS, im.get(existingKeyStroke));
}
public static void main(String[] args)
{
JFrame frame = new ComboBoxTest2();
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
안녕하십니까. 후속 조치에 감사드립니다. 내가 언급하지 않은 한 가지 : 나는 당신의 솔루션을 시도했을 때 실제로 im.get (ENTER)에 대해 null을 얻었습니다. WHEN_FOCUSED를 사용하여 WHEN_ANCESTOR_OF가 아닌 입력 된 맵을 얻습니다. WHEN_ANCESTOR 지금 시도하고 null이 아닌 바인딩을 볼 않았다. 여기서보고 한 것처럼 TAB에 대해 동일한 바인딩을 설정해도 작동하지 않습니다. (한 가지 더 메모 : 팝업이 표시되지 않는 경우 Tab과 Enter는 다르게 동작해야한다고 생각합니다.이 경우 탭만이 다음 구성 요소로 포커스를 이동해야합니다.) –