Как добавить JPanel в другую JPanel с вертикальной полосой прокрутки во время выполнения?

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

Что я пробовал до сих пор:

  • Использование полосы прокрутки для вертикальной прокрутки безуспешно.
  • Используя flowlayout- не повезло. Пробовал отключить горизонтальную прокрутку - продолжайте толкать новую панель вправо (не могу добраться до нее, потому что прокрутки нет).
  • Пробовал с помощью borderlayout- не повезло.

testpanel t = new testpanel();
t.setVisible(true);
this.jPanel15.add(t);   
this.jPanel15.validate();
this.jPanel15.repaint();

Этот код предполагается для вставки t панель в jpanel15, С помощью flowlayout он выталкивает t панель вниз, как я хочу, но без вертикальной прокрутки.

PS: я использую NetBeans для создания своего GUI.

2 ответа

Решение
  1. использование JScrollPane вместо (внешнего) JPanel
  2. Или есть BorderLayout для JPanelположить в JScrollPane в BorderLayout.CENTER как единственный контроль. JScrollPane регулярно JPanel как вид.

В любом случае вы добавите элемент управления к JScrollPane, Предположим, ваш JScrollPane переменная spn, ваш элемент управления - ctrl:

// Creation of the JScrollPane: Make the view a panel, having a BoxLayout manager for the Y-axis
JPanel view = new JPanel( );
view.setLayout( new BoxLayout( view, BoxLayout.Y_AXIS ) );
JScrollPane spn = new JScrollPane( view );

// The component you wish to add to the JScrollPane
Component ctrl = ...;

// Set the alignment (there's also RIGHT_ALIGNMENT and CENTER_ALIGNMENT)
ctrl.setAlignmentX( Component.LEFT_ALIGNMENT );

// Adding the component to the JScrollPane
JPanel pnl = (JPanel) spn.getViewport( ).getView( );
pnl.add( ctrl );
pnl.revalidate( );
pnl.repaint( );
spn.revalidate( );

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

FlowLayout добавляет компоненты по горизонтали, а не по вертикали, поэтому вы никогда не увидите вертикальные полосы прокрутки. Вместо этого вы можете попробовать Wrap Layout.

Основной код для создания полосы прокрутки:

JPanel main = new JPanel( new WrapLayout() );
JScrollPane scrollPane = new JScrollPane( main );
frame.add(scrollPane);

Затем, когда вы динамически добавляете компоненты на главную панель, вы должны сделать:

main.add(...);
main.revalidate();
main.repaint(); // sometimes needed
Другие вопросы по тегам