Создание перекрытия JButtons

Я создаю программу виртуального пианино на Java Swing. Моя область для клавиш пианино прямо сейчас - это панель JPanel с горизонтальным BoxLayout, содержащим белые кнопки JButton в качестве белых клавиш. Я хочу добавить черные клавиши так, чтобы они перекрывали белые клавиши.

Есть два разных подхода, которые я пробовал. Один из них использует OverlayLayout. К сожалению, в Интернете не так много документации по диспетчеру OverlayLayout, и она недоступна в построителе графического интерфейса NetBeans. Я не Я не знаю, как заставить его работать. Второе, что я пробовал, - это использовать JLayeredPanes. Я не могу понять и этого, даже после того, как возился с ним в Netbeans.

Так что я думаю, что мой вопрос довольно прост. Каков наилучший подход, если он есть, для добавления JButtons поверх других JButton? Или, может быть, есть альтернатива использованию JButtons для клавиш фортепиано?

EDIT

Я объединил код aioobe и dacwe, чтобы получить желаемый результат. Я в основном использовал z-упорядочение dacwe с основными размерами aioobe (немного увеличенными) и частью мода 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);
    }
}

Спасибо, ребята! Теперь мне нужно как-то прикрепить к этим кнопкам слушателя и текст.

5
задан aharlow 25 November 2010 в 21:18
поделиться