Как создать JScrollPane внутри JTabbedPane?

Я пытаюсь создать JScrollPane на одной из вкладок моего JTabbedPane. Я попробовал то, что, как я думал, сработает, а именно:

    pane.add("Main", mainGame);// These are my other tabs
    pane.add("Upgrades", upgradeScreen); //the JTabbedPane
    pane.add("Credits", creditsTab);
    upgradeScreen.setLayout(null); //The null layout
    lblMoney2.setBounds(10, 11, 277, 22);
    upgradeScreen.add(lblMoney2); // A simple JLabel
    scrollPane.add(upgradeScreen); //my JScrollPane

Где панель — это мой JTabbedPane, а scrollPane — мой JScrollPane. Это просто избавило меня от вкладки экрана обновлений. Я как бы ожидал этого, но я не знал, что еще делать. Если вам нужно больше кода, чтобы понять это, скажите мне, и я вставлю его, в противном случае спасибо за помощь!


person Tdude179    schedule 08.12.2013    source источник


Ответы (2)


Не используйте JScrollPane#add, вместо этого вы хотите использовать JScrollPane#setViewportView

Дополнительные сведения см. в разделе Как использовать ScrollPane.

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

person MadProgrammer    schedule 08.12.2013
comment
@sage Да, но сначала у тебя возникла проблема с двойным родителем, так что +1 тебе;) - person MadProgrammer; 08.12.2013
comment
На днях JTextArea из одного из ваших ответов я выкопал его источник и обнаружил, что представление текстовой области никогда не использует \r\n для новой строки, так что на самом деле ваш опыт был правильным :). на самом деле, я думаю, что мне не хватает опыта. вот почему иногда мой ответ становится совершенно неправильным. вчера, отвечая на вопрос, попробуйте-наконец-то вернуть заказ, я знал правильный порядок возврата, но все же я сделал его совершенно неправильным, написав обратный порядок. :( - person Sage; 08.12.2013

Это просто избавило меня от моей вкладки «Экран обновлений».

да, потому что ни у одного компонента не может быть сразу двух родителей. Сначала вы добавили upgradeScreen к JTabbedPane, а затем снова добавили к JScrollPane. Функция add(component) компонента в конечном итоге вызовет функцию addImpl(component): которая удалит компонент из его старого родителя и добавит его к новому родителю.

Однако:

  1. Вам нужно добавить JScrollPane к экземпляру JTabbedPane.
  2. Компонент, который вы хотите прокрутить, установите его как представление JScrollPane с помощью функции setViewportView(component). для вашего контекста это upgradeScreen
person Sage    schedule 08.12.2013