如何在运行时添加组件后使JScrollPane可滚动

时间:2017-01-30 12:44:31

标签: java swing netbeans

不幸的是,我已多次看到这个问题,但不幸的是,我不知道我做得多好,能够解释我必须在我自己的代码中实现的内容。

我在netbeans中使用了GUI编辑器来创建一个JScrollPane和一个JPanel。我知道我可以在运行时创建这些组件以及其他所有组件,但事实证明这是有问题的,只需在编辑器中添加滚动窗格和面板,并在运行期间向它们添加组件到目前为止对我有效。

到目前为止,创建组件并将其添加到面板是没有问题的。我面临的问题是滚动窗格不会更新自身以使用户能够进一步向下滚动以查看底部创建的组件。我每次按下按钮时都会生成'条目',当前创建一个JTextField并将此组件添加到面板中,稍后会添加更多组件,但现在这只是实验。

一旦'条目'的'列表'超出了窗口的限制,窗口必须调整大小以便查看底部的组件但是在一定数量的条目(大约25-30之后)之后组件不是由于滚动条不向下滚动,因此可以查看更长的时间。

这就是我在运行时添加组件的方式......

JTextField txtName1 = new JTextField();

txtName1.setLocation(10, 90);
txtName1.setSize(135, 25);

pnlContainer.add(txtName1);

'pnlContainer'附加在'jspContainer'的顶部,这是我的JScrollPane,我使用'repaint()'方法让组件在面板上可见。

到目前为止,在运行时添加组件已经奏效,所有组件都是可见的并且可以互动。

我对编程很新,只有几年的经验,任何可能有用的文档,教程或其他任何内容都非常感谢。文档总是受欢迎的,因为我还有很多需要学习的东西。

1 个答案:

答案 0 :(得分:2)

JTextField txtName1 = new JTextField();
txtName1.setLocation(10, 90);
txtName1.setSize(135, 25);
pnlContainer.add(txtName1);
  

到目前为止,在运行时添加组件已经奏效,所有组件都是可见的并且可以互动。

在上面的代码示例中,您要设置每个组件的大小/位置,这意味着您使用的是null布局。不要使用空布局!!!

Swing旨在与布局管理器一起使用,当您使用布局管理器的面板时,滚动将正常工作。

布局管理器负责确定面板的“首选大小”。当面板的首选尺寸大于滚动面板的尺寸时,面板将自动显示滚动条。

当您使用空布局时,面板的首选大小为0,因此滚动条将永远不会出现。