2012-02-08 41 views
1

我在java中使用java.awt.graphics庫中的矩形編碼鋼琴。當鼠標單擊JFrame上的某個區域時,我使用mouselistener播放每個單獨的鍵的聲音。如何在Java中的JFrame中按下鼠標時更改組件的顏色?

當用戶釋放鼠標時,如何在面板上單擊,重繪,然後重新將鍵盤重新繪製回頂部時向面板添加形狀?

+0

我其實是想說JFrame。我道歉。 – Greg 2012-02-08 01:28:09

+0

粘貼我們一些代碼,如果你想要的話:http://pastie.org – rtheunissen 2012-02-08 01:32:03

+0

@HovercraftFullOfEels無論是AWT還是Swing在這個問題上都沒什麼意義。 – rtheunissen 2012-02-08 01:36:04

回答

2

考慮的解決方案:source

它可能不是正是你以後,但它可能給你如何處理你的問題的想法。我花了很長時間才弄清楚如何使用JLayeredPane而沒有設置空佈局,但最終這是我能想到的最好的。另外,假設您的聲音文件有一些命名約定。 :p

+0

這個問題是我通過使用代碼來使用來自paintComponent的Graphics g創建了形狀:'g.fillRect()'有沒有辦法引用特定的形狀? – Greg 2012-02-08 01:31:25

+0

我明白了。告訴你什麼,粘貼一些代碼,我會看看。 http://pastie.org :) – rtheunissen 2012-02-08 01:33:12

+0

http://pastie.org/3338408 我拿出黑鍵,使它更容易閱讀。原諒缺乏優雅,我正在嘗試一些完全脫離我的聯盟! – Greg 2012-02-08 01:37:17

3

考慮將JLabel添加到使用GridLayout的JPanel。爲每個JLabel分配一個MouseListener,並在mousePress/mouseRelease上交換ImageIcons,或者按下並釋放更改JLabel的背景。如果您使用後一種路線,則需要確保將JLabels不透明屬性設置爲true,以便顯示背景顏色。

然後,對於黑鍵,您可以將上面的JPanel添加到JLayeredPane中,並在此之上添加另一個包含以相同方式運行的黑鍵的JPanel。

此外,您還需要注意在後臺線程中「播放」任何便箋,例如可以使用SwingWorker獲取,以免綁定Swing事件線程並完全凍結程序。

相關問題