我试图在运行时插入一个新的面板到另一个面板每次我按下一个按钮。我的问题是原来的面板没有空间了,我看不到我添加的新面板。
我已经试过了:
- 使用滚动面板进行垂直滚动,但没有成功。
- 使用flowlayout-没有运气。尝试禁用水平滚动-继续向右推新面板(无法到达它,因为没有滚动)。
- 尝试使用borderlayout-no luck.
testpanel t = new testpanel();
t.setVisible(true);
this.jPanel15.add(t);
this.jPanel15.validate();
this.jPanel15.repaint();
此代码假定将t
面板插入jpanel15
。与flowlayout它推动t
面板向下,就像我想要的,但没有垂直滚动。
PS:我正在使用netbeans来创建我的GUI。
我的问题是原来的面板耗尽了空间,我看不到我添加的新面板。尝试使用scrollpane进行垂直滚动,但没有成功。
一个FlowLayout水平添加组件,而不是垂直添加,所以你永远不会看到垂直滚动条。相反,你可以尝试换行布局。
创建滚动面板的基本代码是:JPanel main = new JPanel( new WrapLayout() );
JScrollPane scrollPane = new JScrollPane( main );
frame.add(scrollPane);
当你动态地向主面板添加组件时,你可以这样做:
main.add(...);
main.revalidate();
main.repaint(); // sometimes needed
- 使用
JScrollPane
代替(外部)JPanel
- 或者为
JPanel
设置BorderLayout
,在BorderLayout.CENTER
设置JScrollPane
作为唯一的控制。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( );