2010-06-03 110 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(因爲它被添加到它)。