我在java中使用java.awt.graphics庫中的矩形編碼鋼琴。當鼠標單擊JFrame上的某個區域時,我使用mouselistener播放每個單獨的鍵的聲音。如何在Java中的JFrame中按下鼠標時更改組件的顏色?
當用戶釋放鼠標時,如何在面板上單擊,重繪,然後重新將鍵盤重新繪製回頂部時向面板添加形狀?
我在java中使用java.awt.graphics庫中的矩形編碼鋼琴。當鼠標單擊JFrame上的某個區域時,我使用mouselistener播放每個單獨的鍵的聲音。如何在Java中的JFrame中按下鼠標時更改組件的顏色?
當用戶釋放鼠標時,如何在面板上單擊,重繪,然後重新將鍵盤重新繪製回頂部時向面板添加形狀?
考慮的解決方案:source
它可能不是正是你以後,但它可能給你如何處理你的問題的想法。我花了很長時間才弄清楚如何使用JLayeredPane
而沒有設置空佈局,但最終這是我能想到的最好的。另外,假設您的聲音文件有一些命名約定。 :p
這個問題是我通過使用代碼來使用來自paintComponent的Graphics g創建了形狀:'g.fillRect()'有沒有辦法引用特定的形狀? – Greg 2012-02-08 01:31:25
我明白了。告訴你什麼,粘貼一些代碼,我會看看。 http://pastie.org :) – rtheunissen 2012-02-08 01:33:12
http://pastie.org/3338408 我拿出黑鍵,使它更容易閱讀。原諒缺乏優雅,我正在嘗試一些完全脫離我的聯盟! – Greg 2012-02-08 01:37:17
考慮將JLabel添加到使用GridLayout的JPanel。爲每個JLabel分配一個MouseListener,並在mousePress/mouseRelease上交換ImageIcons,或者按下並釋放更改JLabel的背景。如果您使用後一種路線,則需要確保將JLabels不透明屬性設置爲true,以便顯示背景顏色。
然後,對於黑鍵,您可以將上面的JPanel添加到JLayeredPane中,並在此之上添加另一個包含以相同方式運行的黑鍵的JPanel。
此外,您還需要注意在後臺線程中「播放」任何便箋,例如可以使用SwingWorker獲取,以免綁定Swing事件線程並完全凍結程序。
我其實是想說JFrame。我道歉。 – Greg 2012-02-08 01:28:09
粘貼我們一些代碼,如果你想要的話:http://pastie.org – rtheunissen 2012-02-08 01:32:03
@HovercraftFullOfEels無論是AWT還是Swing在這個問題上都沒什麼意義。 – rtheunissen 2012-02-08 01:36:04