我正在 Java Swing 中创建一个虚拟钢琴类型程序。我现在的钢琴键区域是一个带有水平 BoxLayout 的 JPanel,其中包含白色 JButton 作为白键。我也想添加黑键,并让它们与白键重叠。
我尝试过两种不同的方法。一种是使用 OverlayLayout。不幸的是,没有太多关于 OverlayLayout 管理器的在线文档,而且它在 NetBeans GUI 构建器中不可用。我不知道如何使它工作。我尝试的第二件事是使用 JLayeredPanes。即使在 Netbeans 中弄乱了它,我似乎也无法弄清楚这一点。
所以我认为我的问题很简单。如果有的话,将 JButtons 添加到其他 JButtons 之上的最佳方法是什么?或者也许有替代使用 JButtons 的钢琴键?
编辑
我结合了 aioobe 和 dacwe 的代码来获得我想要的结果。我基本上使用了 dacwe 的 z-ordering 和 aioobe 的基本尺寸(放大了一点)和 mod 7 部分。我还添加了一些变量以使事情更清楚。这就是我现在所拥有的。
import javax.swing.*;
import java.awt.Color;
public class Test2 {
public static void main(String[] args) {
JFrame frame = new JFrame("Test");
JLayeredPane panel = new JLayeredPane();
frame.add(panel);
int maxKeys = 8;
int width = 60;
int height = 240;
for (int i = 0; i < maxKeys; i++) {
JButton b = new JButton();
b.setBackground(Color.WHITE);
b.setLocation(i * width, 0);
b.setSize(width, height);
panel.add(b, 0, -1);
}
int width2 = 48;
int height2 = 140;
for (int i = 0; i < maxKeys; i++) {
int j = i % 7;
if (j == 2 || j == 6)
continue;
JButton b = new JButton();
b.setBackground(Color.BLACK);
b.setLocation(i*(width) + (width2*3/4), 0);
b.setSize(width2, height2);
panel.add(b, 1, -1);
}
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(500,280);
frame.setVisible(true);
}
}
多谢你们!现在我需要以某种方式将侦听器和文本附加到这些按钮上。