无法设置鼠标光标JLayeredPane

时间:2010-06-03 21:10:28

标签: java swing jlayeredpane

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

我有一个JLayeredPane,当它只有一个子Panel时,我能够使用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 个答案:

答案 0 :(得分:3)

如果您查看javax.swing.JLayeredPane源代码,您会看到其构造函数定义如下:

public JLayeredPane() {
    setLayout(null);
}

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

答案 1 :(得分:1)

虽然主题已经陈旧,但没有一个答案令人满意。我解决了以这种方式调用JLayeredPane的setCursor方法的问题:

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

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

答案 2 :(得分:0)

How to Use Layered Panes教程中使用演示代码时,我可以正常工作。

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

将您的代码与教程进行比较,以找出其他差异。

答案 3 :(得分:0)

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