我有一個客戶端 - 服務器應用程序,我在客戶端使用swing。我的swing客戶端有一個主窗口(jframe)和很多面板,工具欄和菜單欄。 當客戶端通過glasssPane等待來自服務器的響應時,我想要刪除所有客戶端動作/鼠標事件(或者簡單地抓取並不執行任何操作)。 這裏是我寫的代碼:使用glasspane從擺動組件中刪除鼠標事件/控件
private final static MouseAdapter mouseAdapter = new MouseAdapter()
{
public void mouseClicked(MouseEvent e)
{
System.out.println("MouseClicked..!");
}
};
private static Cursor WAIT_CURSOR = Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR);
private static Cursor DEFAULT_CURSOR = Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR);
和
public static void startWaitCursor(JComponent comp)
{
MainWindow root = ((MainWindow) comp.getTopLevelAncestor());
root.getGlassPane().setCursor(WAIT_CURSOR);
root.getGlassPane().addMouseListener(mouseAdapter);
root.getGlassPane().setVisible(true);
}
public static void stopWaitCursor(JComponent comp)
{
MainWindow root = ((MainWindow) comp.getTopLevelAncestor());
root.getGlassPane().setCursor(DEFAULT_CURSOR);
root.getGlassPane().setVisible(false);
}
但我不能夠管理抓取鼠標事件。在glassPane中更改遊標工作正常,但無論是我無法添加mouseAdapter還是無法使glasssPane成爲頂級組件。
有什麼想法?
謝謝。
對不起,我的代碼博客時髦的外觀。 我意識到我無法將glassPane設置爲最上面的組件。 我設置了背景顏色的玻璃板爲粉紅色和不透明爲真,但我沒有看到背景顏色。比如果glassPane不是光標變化的最頂層元素。 – Deger 2010-02-17 14:48:28
我意識到畝代碼正在工作,但我的問題是線程相關。我的代碼是這樣的: startWaitCursor(); work(); //需要花費時間的服務器請求 stopWaitCursor(); 並將其更改爲: startWaitCursor(); SwingUtilities.invokeLater(Runnable的新(){ poblic無效的run(){ 嘗試 { 工作(); //服務器的請求 } 終於 { stopWaitCursor();} 做此修改我在客戶端正在等待來自服務器的響應時,可以看到我在startWaitCursor()方法中所做的設置。 乾杯... – Deger 2010-02-18 09:59:47