Как добавить 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 ответа
- использование
JScrollPane
вместо (внешнего)JPanel
- Или есть
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