【问题标题】:How to make a JScrollPane scrollable after a component has been added at runtime如何在运行时添加组件后使 JScrollPane 可滚动
【发布时间】:2017-01-30 12:44:30
【问题描述】:

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

我在 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()”方法让组件在面板上可见。

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

我对一般编程相当陌生,只有几年的经验,非常感谢任何可能有帮助的文档、教程或其他任何东西。文档总是受欢迎的,因为我还有很多东西要学。

【问题讨论】:

  • 我也很感谢 cmets 关于如何改进我提出问题的方式,我知道以前有人问过,但我不明白我正在查看的一些示例,因此不能应用相同的示例我的代码的原则。此外,由于我对此很陌生,我不知道我应该问什么问题以及我应该如何问他们才能找到相关结果。
  • 1) 获取tour 并浏览help center,然后阅读How to Ask 以及如何发布有效的minimal reproducible exampleShort, Self Contained, Correct Example。请注意,此问题是题外话,因为它要求提供教程/文档,并且缺少演示您的问题的 MCVE。
  • 我只是想让滚动窗格使用户能够向下滚动整个程序。我不完全理解 JScrollPane 是如何工作的,netbeans 文档并没有真正帮助太多。我有一个 JScrollPane 和一个 JPanel ,在执行期间,当按下按钮时,会向面板中添加更多组件,但是当面板上生成了这么多组件时,它们会继续离开程序窗口的底部,这这就是为什么我想要一个滚动条,因为添加的组件数量将超过最大窗口高度。
  • 滚动窗格根本不起作用,我不完全确定原因。该组件在那里并且在运行时可见,但是随着组件的生成,滚动条没有更新以表示用户可以进一步向下滚动,您也不能

标签: java swing netbeans


【解决方案1】:
JTextField txtName1 = new JTextField();
txtName1.setLocation(10, 90);
txtName1.setSize(135, 25);
pnlContainer.add(txtName1);

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

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

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

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

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

【讨论】:

  • 好的,我以为是默认设置的,我刚刚尝试了几种不同的布局,但现在滚动条不再出现。他们是在我尝试这个之前,我想我设置了面板的布局而不是滚动窗格,我应该使用特定的布局吗?
  • @D.mcadam,听起来您正在添加数据行。所以也许你应该使用垂直的Box Layout。或者也许您应该使用JTable 来显示您的数据行。对于具体建议,我们没有足够的信息。
  • 如果您需要更多帮助,请发布minimal reproducible example 来说明问题。因此MCVE 将简单地成为一个带有空面板的框架和一个用于将组件添加到面板的按钮。您可以使用MCVE 在大约 20-30 行代码中测试此过程。一旦你理解了基本概念,你就可以将知识应用到你的实际应用中。
  • 好的,我想我今晚要休息一下,但它似乎执行不正确,非常感谢您的帮助
  • 使用表格效果更好,我允许用户通过其他方式编辑数据。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-10
  • 1970-01-01
  • 2014-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多