Функция JPanel

1

Я работаю с Swing, пытаясь научиться его использовать. Я делаю упражнение в своей книге, где я должен делать кнопки (JButtons), подобные тем, которые есть у dvd-плеера. На данный момент я не добавляю функциональность к кнопкам. Программа работала отлично, когда я ее запускал. Затем я подумал, что я буду расширять его, сделав вторую панель (JPanel) с теми же кнопками. Однако, когда я запускаю свой код, я просто получаю один набор кнопок (не две области с двумя наборами кнопок). Я неправильно понял концепцию панелей? Я понял, что панель является областью (контейнером) в моем кадре, где я могу отображать разные выходные данные, и что я могу иметь несколько панелей я в одном кадре.

Вот мой код:

import javax.swing.*;

public class Oppgave91 extends JFrame
{

    public Oppgave91()
    {
        super ("We make buttons");
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        JButton play = new JButton("Play");
        JButton stopeject = new JButton("Stop/Eject");
        JButton rewind = new JButton("Rewind");
        JButton fastforward = new JButton("FastForward");
        JButton pause = new JButton("Pause");

        JPanel panel = new JPanel();
        panel.add(play);
        panel.add(stopeject);
        panel.add(rewind);
        panel.add(fastforward);
        panel.add(pause);

        JPanel panel2 = new JPanel();
        panel2.add(play);
        panel2.add(stopeject);
        panel2.add(rewind);
        panel2.add(fastforward);
        panel2.add(pause);

        add(panel);
        add(panel2);
        setVisible(true);

    }


    public static void main(String[] args) 
    {
        Oppgave91 showbuttons = new Oppgave91();
        showbuttons.pack();

    }

}
Теги:
swing
jpanel

1 ответ

3
Лучший ответ

Компонент может иметь только 1 родитель. См. Последнюю строку моего фрагмента кода о том, как это сделать

JPanel panel = new JPanel();
panel.add(play);
panel.add(stopeject);
panel.add(rewind);
panel.add(fastforward);
panel.add(pause);

//right now panel is the parent component of play, stop, eject

JPanel panel2 = new JPanel();
panel2.add(play); //play is now owned by panel2, not panel
panel2.add(stopeject); //stopeject is now owned by panel2, not panel
panel2.add(new JButton("Rewind")); // this is how you should do this
  • 0
    Спасибо! Это привело меня в правильном направлении. Я также узнал, что мне нужно добавить панель 2 на панель. Без этого панель не будет отображаться. Это всегда так при использовании нескольких JPanels? Нужно ли использовать один JPanel в качестве контейнера для остальных?
  • 0
    У тебя есть основная идея. Вы знаете, как добавить JPanel в ContentPane, верно? Вы можете добавить оба в ContentPane, просто обязательно установите макет.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню