[英]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.