当我向上和向下滚动时,为什么Java scrollPane会删除我的面板内容?

时间:2017-04-07 14:59:09

标签: java swing user-interface scrollbar scrollpane

我在Java中遇到了 scrollPane 的问题。

我正在使用 Java 编程GUI,我已经使用带滚动条的JPanel实现了一个Panel。

为了简化我的想法以便更好地理解,Panel根据用户输入的数字显示了许多Jlabels。

因此,每次用户输入不同的值时,面板的宽度和高度都会动态更改。

JPanel inP=new JPanel(); 
inP.setLayout(null);
inP.setPreferredSize(new Dimension(1000, 1000));

scroll=new JScrollPane(inP,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
scroll.setBounds(10, 20, 830, 440);
lowP.add(scroll); 

正如您所看到的,我创建了Jpanel,其首选大小为常量(为简单起见,尽管它是动态的)。

然而,问题在于,当我运行代码时,会出现垂直滚动条,但是当我向下滚动时,Jlabel的其余部分不会出现(它就像图中的切割一样)。

奇怪的是,当我向上滚动时,图表会返回其初始状态并忽略我刚应用的更新。

同样奇怪的是,水平滚动条工作正常,并从右侧显示图表的左侧。

以下是一些显示我问题的照片:

以下是我向下滚动时的外观图像:

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

1 个答案:

答案 0 :(得分:2)

  

但是当我向下滚动时,Jlabel的其余部分不会出现(它就像图中的一个切口)。

布局管理器的工作是确定添加到面板的组件的首选大小。滚动仅在正确计算此值时有效。不要使用null布局。让布局管理器完成它的工作。

  

因此,每次用户输入不同的值时,面板的宽度和高度都会动态更改。

请勿使用setPreferredSize(...) !!!

在添加组件时,布局管理器将动态确定首选大小。您的基本代码应该是:

panel.add(...);
panel.revalidate();
panel.repaint();