我用Java创建了一个GUI,如下图所示 -
'panel_mid'是中间的白色面板。我已将其添加到名为“panel_mid_scrollpane”的滚动窗格中。
除'panel_mid'外还有更多面板 -
这个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看起来像 -
正如您所看到的,滚动条在添加面板时不会自动出现,因此最后一个面板只有一半可见。可能导致这个问题的原因是什么?
谢谢!
答案 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的容器的容器,依此类推。