[英]Change the mouse cursor when shift key is pressed
我有一个JPanel
的子类PointPanel
,我想在其中实现以下行为:如果鼠标悬停在实例上并按下 shift 键,则鼠标光标变为手形光标; 如果释放 shift 键,鼠标光标会变回默认光标。
为了实现这一点,我尝试在构造函数中添加一个KeyListener
:
this.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_SHIFT) {
System.out.println("Shift pressed");
PointPanel.this.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
}
}
@Override
public void keyReleased(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_SHIFT) {
System.out.println("Shift released");
PointPanel.this.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
}
}
});
这种方法行不通。
包含此面板的窗口应该具有焦点,因为它是应用程序的唯一可见窗口。
我想念什么?
创建 KeyStroke 时我发现它很混乱。
对于按下我必须使用:
KeyStroke pressed = KeyStroke.getKeyStroke("shift pressed SHIFT");
但对于发布的我可以使用:
KeyStroke released = KeyStroke.getKeyStroke("released SHIFT");
KeyStroke released = KeyStroke.getKeyStroke(KeyEvent.VK_SHIFT, 0, true);
我用过:
InputMap im = getInputMap(JPanel.WHEN_IN_FOCUSED_WINDOW);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.