【发布时间】:2015-09-04 11:39:39
【问题描述】:
您好,我正在用 Java 开发一个应用程序(在 mac 中)。当用户按下箭头时,我希望它做一些事情。
我的代码如下:
public class Main {
static JScrollPane scrollPane;
public static void main(String[] args) {
JFrame f = new JFrame();
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
f.setBounds(0, 0, dim.width, dim.height);
StandartPanel p = new StandartPanel();
f.add(p);
JToolBar tb = new JToolBar();
tb.add(new JButton("button"));
f.add(tb);
f.setVisible(true);
}
}
它只是一个创建 JFrame 并将 StandartPanel 和带有按钮的 JToolBar 放入其中的程序。
StandartPanel的代码如下:
public class StandartPanel extends JPanel {
public StandartPanel () {
for( int i = 0; i < 10; i++)
this.add(new JLabel("Jlabel number: " + i));
this.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0), "forward");
this.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_D, 0), "forward");
this.getActionMap().put("forward", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("pressed");
}
});
}
}
for 循环并不重要,重要的是当按下 D 或 Down 时它会打印“pressed”。
当我实际按下 D 时,它会打印“按下”,但当我单击时它什么也不做。
在尝试了一些事情之后,我发现如果不是向 JToolBar 添加一个 JButton,而是添加一个 JLabel,它就可以工作(如果我不添加任何东西,它也可以工作)。
因此,将 JButton 添加到 JToolBar 会以某种方式阻止键绑定与向下按钮一起使用。
关于它为什么会发生以及如何解决它的任何想法?
谢谢!
【问题讨论】:
-
看看this
-
@GeorgiPenev 它也对我不起作用(Windows)。而且他已经使用了 KeyBindings,而不是 KeyListener。
-
请不要重复发布相同的问题。
标签: java swing key-bindings