3

我遇到了一个问题,我似乎无法弄清楚,也无法在网络上的任何地方找到答案。

我有一个 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 中工作

4

4 回答 4

3

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

public JLayeredPane() {
    setLayout(null);
}

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

于 2010-06-04T05:49:42.007 回答
1

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

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

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

于 2013-11-13T17:18:55.923 回答
0

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

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

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

于 2010-06-03T21:16:36.407 回答
0

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

于 2010-06-03T21:27:04.573 回答