我遇到了一个我似乎无法弄清楚的问题,也没有在网络上的任何地方找到答案。
我有一个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中使用自定义游标
答案 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上,分层窗格本身可以确定这一点。