JTabbedPane не работает с JPanels

Для дополнительного кредита домашней работы Java GUI я пытаюсь добавить пару панелей в JTabbedPane. На самом деле это были JFrames, но я просто расширил JPanel вместо JFrame и удалил main(). Во всяком случае, когда я запускаю main(), JTabbedPane и обе панели отображаются, но отдельно. Что мне не хватает?

   import javax.swing.*;

public class TabbedPane extends JFrame
{

    JPanel DayGui = new JPanel();
    JPanel OfficeAreaCalculator = new JPanel();
    JLabel firstLabel = new JLabel("First tabbed pane");
    JLabel secondLabel = new JLabel("Second tabbed pane");
    JTabbedPane tabbedPane = new JTabbedPane();

    // constructor
    public TabbedPane()
    {
        DayGui.add(firstLabel);
        OfficeAreaCalculator.add(secondLabel);

        tabbedPane.add("First Panel", DayGui);
        tabbedPane.add("Second Panel", OfficeAreaCalculator);
        add(tabbedPane);

    }

    public static void main(String[] args)
    {
        TabbedPane tab = new TabbedPane();
        tab.pack();
        tab.setVisible(true);
        JTabbedPane DayGui = new JTabbedPane();
        JTabbedPane OfficeAreaCalculator = new JTabbedPane();
        DayGui dg = new DayGui();
        OfficeAreaCalculator oac = new OfficeAreaCalculator();
    }
}

person user2802785    schedule 29.09.2013    source источник


Ответы (1)


Вы создаете 2 пары переменных для ссылок на компоненты, добавляемые к JFrame, но добавляете те, которые указывают на пустое JPanels. Изучите этот код на основе официального руководства.

public class TabbedPaneApp {

    private static void createAndShowGUI() {

        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JTabbedPane firstPanel = new JTabbedPane();
        JTabbedPane secondPanel = new JTabbedPane();

        JLabel firstLabel = new JLabel("First tabbed pane");
        JLabel secondLabel = new JLabel("Second tabbed pane");

        JTabbedPane tabbedPane = new JTabbedPane() {
            public Dimension getPreferredSize() {
                return new Dimension(500, 400);
            };
        };

        firstPanel.add(firstLabel);
        secondPanel.add(secondLabel);

        tabbedPane.add("First Panel", firstPanel);
        tabbedPane.add("Second Panel", secondPanel);
        frame.add(tabbedPane);

        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }
}
person Reimeus    schedule 29.09.2013
comment
спасибо за ответ. Я думал, что понял то, что вы говорите, но это не так. Я изменил JPanels в классе TabbedPane на JPanel DayGui = new JPanel(); JPanel OfficeAreaCalculator = new JPanel(); Я также изменил ссылки в конструкторе TabbedPane() и установил записи основного метода: `JTabbedPane DayGui = new JTabbedPane();` JTabbedPane OfficeAreaCalculator = new JTabbedPane(); DayGui dg = new DayGui(); OfficeAreaCalculator oac = new OfficeAreaCalculator(); тот же результат, 3 окна: окно JTabbedPane с 2 вкладками и две панели - person user2802785; 30.09.2013
comment
В вашем коде много проблем. Изучите приведенный выше пример и следуйте соглашениям об именах Java :) - person Reimeus; 30.09.2013