2012-02-08 17 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事件线程并完全冻结程序。

相关问题