我正在Java Swing中創建一個虛擬鋼琴類型的程序。我現在的鋼琴鍵區域是一個帶有水平BoxLayout的JPanel,它包含白色JButtons作爲白色鍵。我想要添加黑鍵,並讓它們與白鍵重疊。使JButton重疊
我試過兩種不同的方法。一種是使用OverlayLayout。不幸的是,OverlayLayout管理器沒有太多的文檔在線,並且在NetBeans GUI構建器中不可用。我不知道如何使它工作。我試過的第二件事是使用JLayeredPanes。我似乎也無法弄清楚這一點,即使在Netbeans中搞亂了它。
所以我覺得我的問題很簡單。如果有的話,最好的方法是在其他JButton上添加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);
}
}
謝謝你們!現在我需要以某種方式將偵聽器和文本附加到這些按鈕。
組件z順序搞砸了! – dacwe 2010-11-25 19:58:46
你覺得呢?我認爲它看起來不錯... :) – aioobe 2010-11-25 19:59:15
Ehhh,編譯並運行並將鼠標移到它上面......當它們被重新渲染時,它會按錯誤順序渲染按鈕。 – dacwe 2010-11-25 20:01:48