【发布时间】:2020-01-02 18:27:08
【问题描述】:
我使用带有 swing 库的 Java 代码为按钮分配了键盘快捷键。如果我在输入之前单击文本字段,它会写入 2 次。我想写一次。
Java 代码:
button1 = new JButton("1");
button1.addActionListener(this);
button1.setBackground(Color.lightGray);
//button1 normal number button
button1.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_1, 0), "button1");
button1.getActionMap().put("button1", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
textField.setText(textField.getText() + "1");
}
});
//button1 numpad number button
button1.getInputMap(button1.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_NUMPAD1, 0), "button1");
button1.getActionMap().put("button1", new AbstractAction() {
public void actionPerformed(ActionEvent e) {
textField.setText(textField.getText() + "1");
}
});
public void actionPerformed(ActionEvent actionEvent) {
if (actionEvent.getActionCommand().equals("1")){
textField.setText(textField.getText() + "1");
}
}
你可以在截图中看到,我在选择文本字段时按了一次按钮 1,但它写了 2 次。
【问题讨论】:
-
你可以参考这个链接。 stackoverflow.com/questions/30925438/…
-
请参阅 Calculator Panel 以获取满足您需求的工作示例。将来发布适当的minimal reproducible example 来演示问题。我们无法判断是您发布的代码还是“您未发布的代码”导致了问题。一个合适的 MRE 应该是一个带有 JTextField 和一个 JButton 以及一个键绑定的 JFrame。一旦你得到第一个绑定工作,你添加第二个绑定。
-
它对我不起作用。我认为我的 gui 与这个不同。
标签: java swing key-bindings