Графический интерфейс многоуровневой панели

Я пытаюсь сделать клавиатуру для другого производителя инструментов. Я настраиваю пианино с помощью многослойной панели. Проблема, с которой я сталкиваюсь, заключается в том, что всякий раз, когда я пытаюсь добавить что-либо еще, отличное от самого пианино, оно не отображается, или пианино не отображается, а появится? Итак, я спрашиваю, как мне добавить изображение в правую часть экрана, сохранив при этом все остальное? Спасибо. P.s. Я знаю, что черные кнопки грязные, пожалуйста, не обращайте на это внимания.

введите здесь описание изображения

class Piano extends JPanel
{

    public static void main(String[] args)
    {

        JFrame frame = new JFrame("Test");
        JLayeredPane panel = new JLayeredPane();
        frame.add(panel);

        for (int i = 0; i < 13; i++)
        {
            JButton b = new JButton();
            b.setBackground(Color.WHITE);
            b.setLocation(i * 20, 0);
            b.setSize(20, 100);
            panel.add(b, 0, -1);
        }
        JButton b = new JButton();
        b.setBackground(Color.BLACK);
        b.setLocation(16, 0);
        b.setSize(12, 80);
        panel.add(b, 1, -1);
        //
        JButton b1 = new JButton();
        b1.setBackground(Color.BLACK);
        b1.setLocation(52, 0);
        b1.setSize(12, 80);
        panel.add(b1, 1, -1);
        JButton b2 = new JButton();
        b2.setBackground(Color.BLACK);
        b2.setLocation(76, 0);
        b2.setSize(12, 80);
        panel.add(b2, 1, -1);
        //
        JButton b3 = new JButton();
        b3.setBackground(Color.BLACK);
        b3.setLocation(112, 0);
        b3.setSize(12, 80);
        panel.add(b3, 1, -1);
        JButton b4 = new JButton();
        b4.setBackground(Color.BLACK);
        b4.setLocation(134, 0);
        b4.setSize(12, 80);
        panel.add(b4, 1, -1);
        JButton b5 = new JButton();
        b5.setBackground(Color.BLACK);
        b5.setLocation(157, 0);
        b5.setSize(12, 80);
        panel.add(b5, 1, -1);
        //
        JButton b6 = new JButton();
        b6.setBackground(Color.BLACK);
        b6.setLocation(192, 0);
        b6.setSize(12, 80);
        panel.add(b6, 1, -1);
        JButton b7 = new JButton();
        b7.setBackground(Color.BLACK);
        b7.setLocation(216, 0);
        b7.setSize(12, 80);
        panel.add(b7, 1, -1);
        //
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(600, 400);
        frame.setVisible(true);
    }
}

person Pearce Byrne Colgan    schedule 31.03.2015    source источник
comment
Почему бы вам не поместить JPanel с BorderLayout в JFrame. Затем добавьте свою LayeredPane в центр и еще одну Jpanel с изображением справа.   -  person keuleJ    schedule 31.03.2015


Ответы (2)


По сути, вы хотите использовать Layout для своего JPanel, например. GridLayout.

например что-л. как это

JPanel mainPanel = new JPanel();
mainPanel.setLayout(new GridLayout(0,2));

Вот пример в документе oracle

person Murat Karagöz    schedule 31.03.2015

По умолчанию JFrame использует BorderLayout.

frame.add(panel);

Когда вы не указываете ограничение, используется «ЦЕНТР», поэтому вы добавляете многоуровневую панель в ЦЕНТР фрейма.

Если вы хотите добавить еще одну панель справа от фрейма, сделайте что-то вроде:

JPanel right = new JPanel();
right.add(...);
frame.add(right, BorderLayout.EAST);

Прочтите раздел руководства по Swing, посвященный менеджерам компоновки. Информация.

Вы также можете проверить Midi Piano, чтобы полностью реализовать фортепианную клавиатуру со звуком, просто для удовольствия.

person camickr    schedule 31.03.2015