每次按下按钮,我都会尝试在运行时将新面板插入另一个面板。我的问题是原始面板空间不足,我看不到我正在添加的新面板。
到目前为止我尝试过:
testpanel t = new testpanel();
t.setVisible(true);
this.jPanel15.add(t);
this.jPanel15.validate();
this.jPanel15.repaint();
此代码假设将t
面板插入jpanel15
。
使用flowlayout,它会向我推送t
面板,就像我想要的那样但没有垂直滚动。
PS:我正在使用netbeans来创建我的GUI。
答案 0 :(得分:1)
我的问题是原始面板空间不足,我无法看到我正在添加的新面板。尝试使用scrollpane进行垂直滚动但没有成功。
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
答案 1 :(得分:0)
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( );