搖擺使用按鍵綁定來調用不同的KeyStroke都行動。 JComboBox對ENTER鍵有一個操作。請參閱Key Bindings上所有綁定的列表。
所以我認爲這將是一個簡單的情況下將輸入操作綁定到另一個KeyStroke。
果然,當我將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);
}
}
嗨,感謝您的跟進!有一件事我沒有提到:當我嘗試你的soln時,我實際上在im.get(ENTER)時得到了空值。不過,我看到了不同之處:我使用WHEN_FOCUSED來獲取輸入映射,而不是WHEN_ANCESTOR_OF。我現在嘗試了WHEN_ANCESTOR並確實看到了非空綁定。就像你在這裏報道的那樣,雖然爲TAB設置相同的綁定不起作用。 (還有一點需要注意:我認爲在彈出窗口不顯示的情況下,Tab和Enter應該有不同的表現,我認爲只有選項卡應該將重點放在下一個組件上。) –