2010-06-03 97 views
3

我遇到了一个问题,我似乎无法弄清楚,也无法在网上找到答案。无法设置鼠标光标JLayeredPane

我有一个JLayeredPane,当它只有一个孩子面板我能够使用setCursor()正确设置游标。光标显示出来,一切都很好。但是,当我增加一个额外的JPanel进入JLayeredPane的光标不再显示出来

比如这个作品:

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

使用演示代码How to Use Layered Panes教程时适用于我。

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

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

0

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

3

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

public JLayeredPane() { 
    setLayout(null); 
} 

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

+0

+1指出问题。 – 2013-11-13 17:19:43

1

虽然话题老旧,但没有一个答案令人满意。我解决了问题打电话到的JLayeredPane的方法的setCursor这样:

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

在哪里“这”我想改变光标的组件。它的父母是JLayeredPane(因为它被添加到它)。