JTabbedPane работает неправильно

    public void tabbedPane(){
        JPanel tab1 = new JPanel();
            JButton btn = new JButton("Buton - 1");
            btn.setPreferredSize(new Dimension(50, 20));
            btn.setLocation(0, 10);
        tab1.add(btn);
        JTabbedPane tabPanel = new JTabbedPane();
        tabPanel.addTab("tab1", null, tab1);
        tabPanel.addTab("tab2", tab1);
        tabPanel.addTab("tab3", btn);
        tabPanel.setPreferredSize(new Dimension(450, 150));
        tabPanel.setLocation(50, 0);
        mainPanel.add(tabPanel);//Main panel on frame
    }

Когда я запускаю свое приложение, я вижу только панели tab2 и tab3, и у меня много проблем:

  • tabPanel.setLocation не работает
  • tabPanel.addTab("tab1" ...) не работает
  • btn.setPreferredSize (новое измерение (50, 20)); когда я нажимаю «tab2», он работает правильно, однако, когда я нажимаю «tab3», он не меняет размер кнопки. Почему?

и я использую нулевой макет


person kibar    schedule 06.04.2013    source источник


Ответы (2)


Какова ваша цель с этим?

JTabbedPane используется для организации представлений, я вижу, вы пытаетесь добавить JPanel в качестве первой вкладки, это «основная цель» JTabbedPanes.

tabPanel.addTab("Tab 1", tab1);

Попробуйте добавить вкладку таким образом, вы передаете «нулевое» значение в качестве значка, который вообще не должен влиять, но если вы не используете значок, просто добавьте панель как вкладку с предполагаемым именем. .

При втором добавлении вы снова добавляете тот же компонент (вкладка 1).

При третьем добавлении вы пытаетесь добавить компонент уже в контейнер (вкладка 1). Это заставит этот компонент появиться только в последнем контейнере, в который вы его добавите. Кроме того, компонент представляет собой JButton. Я не вижу цели JButton в виде вкладки.

Для проблемы setLocation(x, y) проверьте макет, который вы используете в контейнере.

Опять же, я думаю, что основная проблема здесь в том, что вы неправильно подходите к своей проблеме или не используете необходимые инструменты.

person Noe    schedule 06.04.2013

tabPanel.setLocation не работает

Не используйте setLocation(...), а вместо этого используйте вложенные компоненты и менеджеры макетов, чтобы добиться приятного и простого в обслуживании макета графического интерфейса.

tabPanel.addTab("tab1" ...) не работает

С Swing вы можете добавить компонент только в один контейнер, вот и все. Компонент будет отображаться только в последнем контейнере, в который он был добавлен.

btn.setPreferredSize(new Dimension(50, 20)); когда я нажимаю "tab2", он работает правильно, однако, когда я нажимаю "tab3", размер кнопки не меняется... почему?

Опять же, вы захотите изучить менеджеры компоновки

и я использую нулевой макет

Вы почти никогда не захотите этого делать, так как это приведет к тому, что ваше приложение будет выглядеть некорректно ни на одной платформе, кроме вашей собственной, и будет очень и очень сложно поддерживать и обновлять его. Гораздо лучше использовать менеджеров компоновки и позволить им сделать за вас тяжелую работу по компоновке и изменению размеров компонентов.

person Hovercraft Full Of Eels    schedule 06.04.2013