2017-01-30 57 views
-2

不幸的是,我多次看到这个问题,但不幸的是我不知道我做得足够好以便能够解释我必须在我的自己的代码。在运行时添加组件后如何使JScrollPane可滚动

我在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的顶部,我使用的是“重绘()”方法来获取面板上可见的组件。

到目前为止,在运行时添加组件已运行,所有组件都可见且可交互。

我是相当新的总体规划与仅仅几年的经验,任何文件可以帮助,辅导或其他任何东西是极大的赞赏。由于我仍然有很多东西需要学习,因此始终欢迎文档。

+0

我也很感激我如何能提高我的措辞我的问题的办法的意见,我知道它已经问过,但我不明白一些我在看的例子,因此,同样的原则不能适用于我的代码。此外,由于我对此相当新,我不知道我应该问什么问题,我应该问他们为了找到相对的结果。 –

+0

1)参加[游览]并浏览[帮助],然后阅读[问]以及如何发布有效的[mcve]或[简短,独立,正确示例](http://sscce.org)。请注意,这个问题是无关紧要的,因为它要求教程/文档,并且缺少能够证明您的问题的MCVE。 – Frakcool

+0

我只是想让滚动窗格使用户能够向下滚动整个程序。我没有完全理解JScrollPane是如何工作的,netbeans文档并没有真正帮助很多。我有一个JScrollPane和一个JPanel,在执行过程中,当按下按钮时,更多的组件被添加到面板中,但是当面板上生成了很多组件时,它们会继续从程序窗口底部继续,这就是为什么我想要一个滚动条,因为添加的组件数量将超过最大窗口高度。 –

回答

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

到目前为止,在运行时添加组件工作过,所有的组件是可见的,相互作用,能。

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

Swing旨在与布局管理器一起使用,并且在将布局与布局管理器配合使用时,滚动功能可以正常工作。

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

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

+0

好吧,我以为默认设置了一个,我刚刚尝试了一个几个不同的布局,但现在滚动条不再出现。他们之前,我尝试了这一点,我认为我设置面板的布局,而不是滚动窗格,我应该使用特定的布局? –

+0

@ D.mcadam,这听起来像你正在添加数据行。所以也许你应该使用垂直[Box Layout](http://docs.oracle.com/javase/tutorial/uiswing/layout/box.html)。或者,也许你应该使用[JTable](http://docs.oracle.com/javase/tutorial/uiswing/components/table.html)来显示你的数据行。我们没有足够的信息来提供具体的建议。 – camickr

+0

如果您需要更多帮助,请发布演示问题的[mcve]。所以'MCVE'很简单,就是一个带有一个空面板的框架和一个用于向面板添加组件的按钮。您可以使用大约20-30行代码中的'MCVE'来测试此过程。一旦你理解了将知识应用于实际应用的基本概念。 – camickr

相关问题