2012-02-20 95 views
2

我正在用Java編寫遊戲,這是我試圖讓「漂亮」的第一個遊戲。這款遊戲被稱爲Bantumi--這是一款棋盤遊戲,現在我正在編制動作動畫。問題在於,當運動動畫運行時,棋盤仍然會獲得鼠標事件,如果用戶選擇了新動作,運行動畫將被丟棄。如何在窗口上暫時阻止鼠標偵聽器?

對於主板,我使用了擴展JLayeredPane的類。這我如何有我的圖層:

第0層:與種子的孔,所以用戶選擇一個爲運動,每個孔是與MouseListener的JPanel。

1層:這標誌着當前選定的孔

層2中的突出顯示:運動的動畫。

層10:自定義通知系統類,我寫的,它說的東西,如「現在輪到你了」,「重複轉向」,「你贏了」,等等。

我想,以防止一切可能的鼠標事件動畫運行時的任何這些圖層,我該怎麼做?我認爲在頂級選手中添加一個覆蓋整個區域的面板已經足夠,但它不起作用。任何解決方法?

回答

4

我認爲在頂級玩家中添加一個覆蓋整個區域的面板已經足夠,但它不起作用。

如果這是一個Swing GUI,你已經有了一個JPanel覆蓋頂層窗口,的glassPane,而是使這項工作的唯一辦法就是你必須添加的MouseListener(或兩者的MouseListener和MouseMotionListener),並且必須使其可見。

您可以通過在頂級窗口或其根窗格上調用getGlassPane(),向其中添加MouseListener和MouseMotionListener,然後每當您想使GUI對鼠標事件無響應時,將玻璃設置到頂窗的玻璃窗格通過調用setVisble(true)就可以看到它。您可以通過調用setVisble(false)進行相反的操作來關閉此效果。

+0

這正是我需要的。我嘗試了類似的東西,唯一的區別是我沒有將鼠標監聽器添加到頂部窗格,我認爲這是必要的。謝謝。 – 2012-02-20 22:55:10

+0

@DanielRivas:是的,這是必要的,因爲組件必須是可見的,並且必須捕獲鼠標事件才能工作。否則,鼠標事件將滑過。 – 2012-02-20 23:07:30

+1

因爲GlassPane可以阻止來自MouseXxx的事件,所以KeyListener可以工作並繼續監聽鍵盤事件,因爲[Disabled Glass Pane](http://tips4java.wordpress.com/2008/11/07/disabled-glass-pane/ )@camickr – mKorbel 2012-02-20 23:25:53

5

對於(臨時)從MouseListener的(KeyListener的....)致殘事件,你可以使用

public void consume() 
Consumes this event so that it will not be processed in the 
default manner by the source which originated it. 

例如

whatever.addMouseListener(new MouseListener() { 

    public void mouseClicked(MouseEvent e) { 
     if (somethingIsTrue) { 
      //do some stuff from mouse listener   
     } else { 
      e.consume(); 
     } 
    } 
    . 
    . 
    . 
} 
+1

當您需要禁用某個組件上的準時事件時,這非常有用,這次我試圖禁用所有可見組件,所以這裏的玻璃窗格方法很有用。無論如何,我不知道這個方法(消費()),所以我學到了一些新東西。謝謝! – 2012-02-20 22:58:52

+0

是的,mKorbel是Swing知識的一種字體。我也從中學到了。 1+ – 2012-02-20 23:08:10

+0

@Hovercraft全部鰻魚感謝所有人,但不是真的+1 – mKorbel 2012-02-20 23:27:56

相關問題