如何在运行时将JPanel添加到另一个具有垂直滚动面板的JPanel中



我试图在运行时插入一个新的面板到另一个面板每次我按下一个按钮。我的问题是原来的面板没有空间了,我看不到我添加的新面板。

我已经试过了:

  • 使用滚动面板进行垂直滚动,但没有成功。
  • 使用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
  1. 使用JScrollPane代替(外部)JPanel
  2. 或者为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( );

相关内容

  • 没有找到相关文章

最新更新