滚动条在JPanel中不可见

时间:2013-05-24 14:47:51

标签: java swing jpanel jscrollpane preferredsize

我用Java创建了一个GUI,如下图所示 -

'panel_mid'是中间的白色面板。我已将其添加到名为“panel_mid_scrollpane”的滚动窗格中。

除'panel_mid'外还有更多面板 -

  • panel_left(包含“后退”按钮)
  • panel_right(右侧可见)

enter image description here

这个gui的重复代码是 -

    panel_mid.setBorder(grayborder);
    panel_mid.setBounds(0, 0, 1100, 1060);
    panel_mid.setBackground(Color.white);
    panel_mid.add(obj.create_test_add_section);

    panel_mid_scrollpane = new JScrollPane(panel_mid);
    panel_mid_scrollpane.setLocation(150, 20);
    panel_mid_scrollpane.setSize(1000, 660);
    panel_mid_scrollpane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

panel_mid中显示的添加部分按钮,每次单击时都会在中间面板中添加一个部分。当多次单击此按钮时,gui看起来像 -

enter image description here

正如您所看到的,滚动条在添加面板时不会自动出现,因此最后一个面板只有一半可见。可能导致这个问题的原因是什么?

谢谢!

2 个答案:

答案 0 :(得分:3)

当添加到滚动窗格的组件的首选大小大于滚动窗格的大小时,会自动显示滚动条。

您似乎使用了空布局。

//panel_mid.setBounds(0, 0, 1100, 1060);
panel_mid.setBackground(Color.white);
panel_mid.add(obj.create_test_add_section);

panel_mid_scrollpane = new JScrollPane(panel_mid);
//panel_mid_scrollpane.setLocation(150, 20);
//panel_mid_scrollpane.setSize(1000, 660);

不要对setSize()和setLocation使用null布局。 Swing旨在与布局管理器一起使用。如果您使用布局管理器,则滚动条将自动运行,并且将自动为您计算大小和位置。

阅读Layout Mangers上的Swing教程。

答案 1 :(得分:1)

您必须告诉GUI刷新,以便再次布置容器。这将显示容器,它还必须显示滚动条。

因此,在ActionListener或用于添加节的任何内容中,添加如下代码:

     container_with_sections.validate();
     container_with_sections.repaint();

其中container_with_sections是包含JScrollPane的容器(JContainer),或者是包含包含JScrollPane的容器的容器,依此类推。