我在java中添加了一些键盘快捷键,大部分时间它们都按预期工作。 仅在焦点位于comboBox内部且组合框包含以快捷方式开头的值时,然后按键更改组合框值,而不是运行操作。
在下面的示例中,我希望按1/2会始终调用button1 / button2,而是更改组合中的值。
有没有简单的方法可以改变这种行为?
+请注意,我尝试在函数registerKeyboardAction中设置3参数 相反:
JComponent.WHEN_IN_FOCUSED_WINDOW
到:
JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT
那没有帮助。
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.KeyStroke;
public class TestCombo {
public static void main(String[] args) {
JFrame frame = new JFrame("TEST");
JPanel panel = new JPanel();
JComboBox<String> comboBox = new JComboBox<String>(new String[]{"1", "2", "3", "4", "5"});
panel.add(comboBox);
JButton button1 = new JButton(new TextAction("Text1"));
JButton button2 = new JButton(new TextAction("Text2"));
panel.add(button1);
panel.add(button2);
panel.registerKeyboardAction(button1.getAction(), KeyStroke.getKeyStroke(KeyEvent.VK_1, 0, false), JComponent.WHEN_IN_FOCUSED_WINDOW);
panel.registerKeyboardAction(button2.getAction(), KeyStroke.getKeyStroke(KeyEvent.VK_2, 0, false), JComponent.WHEN_IN_FOCUSED_WINDOW);
frame.add(panel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setPreferredSize(new Dimension(400, 200));
frame.pack();
frame.setVisible(true);
}
private static class TextAction extends AbstractAction{
private String text;
public TextAction(String vText){
text = vText;
putValue(Action.NAME, text);
}
@Override
public void actionPerformed(ActionEvent arg0) {
JOptionPane.showMessageDialog(null, text);
}
}
}
答案 0 :(得分:0)
我搜索了其他帖子,目前没有找到最佳解决方案,但作为解决方法,我找到了在组合框值中添加一些前缀的选项(例如每个值之前的空格)。这样捷径就行了起来。当然问题是您将无法使用键来搜索组合框值。但就我而言,这就是我想要的。
JComboBox<String> comboBox = new JComboBox<String>(new String[]{" 1", " 2", " 3", " 4", " 5"});