当前位置: 首页 > 知识库问答 >
问题:

按下shift键时更改鼠标光标

王高超
2023-03-14

我有一个子类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));
        }
    }
});

这种方法不起作用。

包含此面板的窗口应该具有焦点,因为它是应用程序的唯一可见窗口。

我错过了什么?

共有1个答案

段干弘扬
2023-03-14

我发现在创建击键时很困惑。

对于压力,我必须使用:

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);
 类似资料:
  • 问题内容: 我正在用Java开发游戏,面临以下挑战。 我有2个,需要在视觉上将形状从一个拖动到另一个。我有使用这个工作从。当我按下鼠标拖动形状时,激活该形状并将其转移到glassPane。因此,您需要将状态从转移到。我通过使用Robot类解决了这个问题,该类模拟了glassPane被激活后的另一个事件。 现在出现了问题,此解决方法仅在Windows上有效,而不适用于mac osx,在osx上,只要

  • 问题内容: 我在JList中有一个单词列表。每次将鼠标光标指向一个单词时,我都希望光标变为手形光标。现在我的问题是该怎么做? 有人可以帮我解决这个问题吗? 问题答案: 在JList上使用MouseMotionListener来检测鼠标何时输入,然后调用将其转换为。 样例代码:

  • 我有一个简单的Java Swing程序定义如下: 这个程序由一个简单的JScrollPane组成,里面有多个按钮。仅启用垂直滚动。工作很好。但问题是,当我按住'shift'键时,当我使用鼠标滚轮滚动时,垂直滚动不起作用。垂直滚动只有在我拖动滚动条或放开“Shift”键时才起作用。通常,在JScrollPane中,当按住“Shift”键,使用鼠标滚轮时,它会水平滚动而不是垂直滚动。但是,我已经禁用了

  • 可以在没有预定义的光标样式的情况下获得当前的光标类型,就像鼠标通过文本、链接… 大概是这样的: 我想在控制台中记录光标的状态,如:指针、文本、移动、等待... 我在jQuery中找到了某种解决方案,但我想在纯香草JS中找到一个 谢谢你的回答

  • 问题内容: 我正在尝试构建一个程序,该程序检测鼠标光标下的颜色,然后在屏幕上的窗口中显示颜色和RGB值。我对Java非常陌生,所以什么都不知道。在朋友的帮助下,我已经编写了两个代码,第一个代码获取缓冲图像的特定坐标的RGB值,另一个代码获取用户定义的RGB值并显示其中带有颜色的窗格。我的问题是“无论滚动到什么位置,如何获取程序来检测鼠标光标下的颜色? 问题答案: 正如@Hovercraft指出的那

  • 问题内容: 在我的游戏中,我希望能够使用向右和向左Shift键来实现不同的功能。在Java(或另一种语言)中,是否有任何方法可以区分这两者? KeyEvent类只有VK_SHIFT,它既对应于左移键,也对应于右移键。同样的,,,,等。 我主要关心的是某人可能能够使用两个手指同时快速按下两个键,从而获得不公平的优势。我应该担心这个吗? 问题答案: 我找到了一个Java教程,其中包括Java WebS