小编典典

在不使用布局管理器的情况下将JScrollPane添加到JPanel

java

在开始之前,我知道不使用布局管理器是一个坏主意,通常我确实会使用一个布局管理器,但是,我还让所有组件根据窗口的大小自动调整大小并重新放置。另外,我正在使用的程序只能在整个生命周期中在一台计算机上运行。请不要仅仅因为缺少布局管理器而对我投反对票,我发现这正是我为此特定程序所需要的。

对于我的问题,我在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 heremypanel.add(label1);

在为标签设置了一些基本设置后,例如setForegroundsetBackground

不幸的是,在运行时,滚动条看起来好像不是必需的(参见图片)

http://i.imgur.com/zp0QKGG.png

图像中显示的表格文本由多个组成JLabels。如果不使用布局管理器无法解决问题,我将切换到BoxLayout,我只是希望有解决方案。


阅读 288

收藏
2020-11-26

共1个答案

小编典典

问题是JScrollPanel需要视图组件的首选大小来确定视图何时超出滚动窗格的可见区域。

组件的首选大小通常是通过布局管理器确定的。虽然您可以使用setPreferredSize,但通常不建议使用它,因为内容超出您决定设置的值时,您只会遇到相同的问题。

更好的解决方案是使用一个LayoutManager或复合布局(在多个容器上使用多个布局管理器)来获得所需的结果…或编写自己的…

2020-11-26