【问题标题】:Unable to set mouse cursor JLayeredPane无法设置鼠标光标 JLayeredPane
【发布时间】:2011-02-27 12:40:54
【问题描述】:

我遇到了一个我似乎无法在网上找到答案的问题。

我有一个 JLayeredPane,当它只有一个子面板时,我可以使用 setCursor() 正确设置光标。光标出现,一切都很好。但是当我在 JLayeredPane 中添加一个额外的 JPanel 时,光标不再出现

例如这有效:

m_layeredPane = new JLayeredPane();
m_layeredPane.setLayout(new WBLayoutManager());
m_layeredPane.add(m_mediaPanel, new Integer(0));
// m_layeredPane.add(m_whiteboardPanel, new Integer(1));

m_layeredPane.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); // WORKS

但这不是:

m_layeredPane = new JLayeredPane();
m_layeredPane.setLayout(new WBLayoutManager());
m_layeredPane.add(m_mediaPanel, new Integer(0));
m_layeredPane.add(m_whiteboardPanel, new Integer(1));

m_layeredPane.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); // FAILS

任何人都知道如何让自定义光标在 JLayeredPane 中工作

【问题讨论】:

    标签: java swing jlayeredpane


    【解决方案1】:

    虽然这个话题很老,但没有一个答案令人满意。我通过这种方式解决了调用 JLayeredPane 的 setCursor 方法的问题:

    this.getParent().setCursor( Cursor.getDefaultCursor() );
    

    其中“this”是我要将光标更改为的组件。它的父级是 JLayeredPane(因为它已添加到其中)。

    【讨论】:

      【解决方案2】:

      如果你看一下javax.swing.JLayeredPane 源代码,你会看到它的构造函数是这样定义的:

      public JLayeredPane() {
          setLayout(null);
      }
      

      这清楚地表明它需要自己处理组件布局。 因此,您可以猜测(虽然没有记录,但我认为这是一个文档错误)您不应该更改 JLayeredPane 的布局。

      【讨论】:

        【解决方案3】:

        您是否尝试过获取第一个工作代码,但将 m_mediaPanel 置于级别 1?这可能也行不通。我认为这是因为顶部的面板决定了光标。在 0 级,分层窗格本身可以确定这一点。

        【讨论】:

          【解决方案4】:

          使用How to Use Layered Panes 教程中的演示代码对我来说效果很好。

          基于 3 行代码,我可以从教程中看到的唯一区别是您使用的是布局管理器。

          将您的代码与教程进行比较以发现其他差异。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-01-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多