1

我正在使用 java.awt.graphics 库中的矩形在 java 中编码钢琴。当鼠标单击 JFrame 上的某个区域时,我正在使用 mouselistener 来播放每个键的声音。

当用户释放鼠标时,如何在单击、重新绘制、然后将键盘重新绘制到顶部时向面板添加形状?

4

2 回答 2

3

考虑将 JLabels 添加到使用 GridLayout 的 JPanel。给每个 JLabel 一个 MouseListener 并在 mousePress/mouseRelease 上交换 ImageIcons 或通过按下和释放来更改 JLabel 的背景。如果您采用后者,您需要确保将 JLabels opaque 属性设置为 true,以便显示背景颜色。

然后对于黑键,您可以将上述 JPanel 添加到 JLayeredPane 中,并在此之上添加另一个 JPanel,该 JPanel 以相同的方式保存黑键。

此外,您需要注意在后台线程中“播放”任何音符,例如可以通过 SwingWorker 获得的音符,以免占用 Swing 事件线程并完全冻结您的程序。

于 2012-02-08T01:52:53.237 回答
2

考虑解决方案:来源

它可能不完全是您所追求的,但它可能会让您了解如何解决您的问题。我花了很长时间才弄清楚如何在JLayeredPane 设置空布局的情况下使用,但最终这是我能想到的最好的。此外,假设您的声音文件有一些命名约定。:p

于 2012-02-08T01:28:40.190 回答