在没有布局经理的情况下,将JSCrollpane添加到JPANEL



在开始之前,我知道不使用布局管理器是一个坏主意,通常我确实使用一个,但是,我也有所有组件会自动重新尺寸,并且根据窗口的大小重新安置。此外,我正在处理的程序仅旨在在整个一生中运行1台机器。请不要仅仅因为缺乏布局经理而对我进行投票,我发现这是我对此特定程序的需求。

在我的问题上,我在Stackoverflow上找到了类似的帖子,但从未实现过解决方案。我正在为JPanel添加动态数量的JLabels,我注意到当不使用布局管理器时,滚动器不起作用。

这是我的初始化代码的简化版本。

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);

setForegroundsetBackground等标签设置了一些基本设置。

不幸的是,当运行时,滚动栏似乎不需要它(请参阅图像)

https://i.stack.imgur.com/oel5o.png

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

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

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

一个更好的解决方案是使用LayoutManager或复合布局(在多个容器上使用多个布局管理器)来实现您想要的结果...或编写自己的...

相关内容

  • 没有找到相关文章

最新更新