在开始之前,我知道不使用布局管理器是个坏主意,通常我会使用布局管理器,但是,我也会根据窗口的大小自动调整所有组件的大小和重新定位。此外,我正在处理的程序仅用于在整个生命周期内在一台机器上运行。请不要仅仅因为缺少布局管理器而向我投票,我发现它是我需要的特定程序。
就我的问题而言,我在stackoverflow上发现了类似的帖子,但从未实现过解决方案。
我正在向我的JLabels
添加动态数量的JPanel
,我注意到在不使用布局管理器时,滚动条不起作用。
这是我的初始化代码的简化版本。
JPanel mypanel = new JPanel();
mypanel.setLayout(null);
mypanel.setSize(800,450);
mypanel.setForeground(Color.WHITE);
mypanel.setBackground(Color.BLACK);
scrollablePanel = new JScrollPane(mypanel);
scrollablePanel.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
scrollablePanel.setPreferredSize(new Dimension(800,300));
scrollablePanel.setSize(800,300);
scrollablePanel.setLocation(250,156);
myContainer.add(scrollablePanel);
其中myContainer
将是容器(也没有布局管理器)。 JLabels
稍后会添加到JPanel
,其中包含:
enter code here
mypanel.add(label1的);
为setForeground
和setBackground
等标签设置了一些基本设置。
不幸的是,在运行时,滚动条显示为不需要(参见图像)
http://i.imgur.com/zp0QKGG.png
图片中显示的表格文字由多个JLabels
组成。
如果不使用布局管理器就无法解决问题,我将切换到BoxLayout,我只是希望有一个解决方案。
答案 0 :(得分:4)
问题是JScrollPanel
需要视图组件的首选大小来确定视图何时超出滚动窗格的可视区域。
组件的首选大小通常通过布局管理器确定。虽然您可以使用setPreferredSize
,但通常不鼓励这样做,您只会遇到同样的问题,因为内容超出您决定设置的值。
更好的解决方案是使用LayoutManager
或复合布局(在多个容器上使用多个布局管理器)来实现您想要的结果......或者编写自己的...