Estoy creando un programa de tipo de piano virtual en Java Swing. Mi área para las teclas del piano en este momento es un JPanel con un BoxLayout horizontal que contiene botones J blancos como teclas blancas. También quiero agregar teclas negras y hacer que se superpongan con las teclas blancas.Haciendo superposición de JButtons
Existen dos enfoques diferentes que he probado. Uno está usando OverlayLayout. Lamentablemente, no hay mucha documentación en línea para el administrador de OverlayLayout, y no está disponible en el generador de la interfaz gráfica de usuario de NetBeans. No tengo ni idea de cómo hacerlo funcionar. Lo segundo que he intentado es usar JLayeredPanes. Parece que tampoco puedo descifrarlo, incluso después de jugar con Netbeans.
Así que creo que mi pregunta es bastante simple. ¿Cuál es el mejor enfoque, si hay uno, para agregar JButtons encima de otros JButtons? ¿O tal vez hay una alternativa al uso de JButtons para teclas de piano?
EDITAR
He combinado de código de dacwe para obtener el resultado que quería y aioobe. Básicamente utilicé el orden z de dacwe con las dimensiones básicas de aioobe (escalado un poco) y la parte del mod 7 también. También agregué algunas variables para aclarar las cosas. Esto es lo que tengo ahora.
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);
}
}
Gracias chicos! Ahora tengo que adjuntar el oyente y el texto a estos botones de alguna manera.
Componentes z orden están en mal estado !! – dacwe
¿usted piensa? Creo que se ve bien ... :) – aioobe
Ehhh, compilado, ejecutado y movido el mouse sobre él ... hará que los botones estén en el orden incorrecto cuando se vuelvan a renderizar. – dacwe