Java的setPreferredSize不会调整JPanel的大小

时间:2009-09-06 19:41:46

标签: java user-interface scroll jpanel

我正在努力(!)使用java GUI开发。所有这些显而易见的小事都是行不通的。我将解释我想要做什么以及我失败的地方(这非常令人沮丧):

我有一个驻留在面板内的graphics2d对象。现在这个图形绘制图像,它可以继续绘制并永久绘制。这幅画扩大了恐怖,因为我不知道它的大小,我把它放在一个滚动窗格内。现在我想在每次痛苦迭代中调整JPanel的大小,并将setPreferredSize设置为更大的值,从而扩展scrollpane的旋钮。

问题: 从某种原因,当我从paint调用setPreferredSize时,它什么也没做。我在面板上叫它。当我尝试从调用paint的函数调用setPreferredSize时,它只执行一次调整大小操作!

可能是什么原因?

除此之外我还有另外一个小问题,我很乐意解决: 由于图形绘制会随着时间的推移而增加,因此如何提升滚动窗格的位置?逐渐增加它?

人们,非常感谢你。我确定需要帮助

4 个答案:

答案 0 :(得分:6)

优先大小,按名称,不是强制性的......也许pack()或revalidate()会有所帮助......

答案 1 :(得分:2)

对我来说听起来有点不对劲。

  • 在paint方法中设置任何大小属性(实际上是组件的任何属性)都会导致可能出现奇怪的行为,因为你并不知道paint被调用的时间和频率

    < / LI>
  • 你通常不打电话给自己画画。一旦组件变得可见,它将被Swing本身调用

  • 如果我做得对,你想拥有一个随时间增长的组件。恕我直言,正确的方法是创建一个Timer。使用Timer可根据需要更改大小。在paint方法中,只需阅读此信息并使用它来决定要绘制的内容。

答案 2 :(得分:1)

setPreferredSize是您可以为LayoutManager提供的许多提示之一,如果确实已经设置了LayoutManager,则会管理组件容器的布局。由给定的LayoutManager决定它对这些提示的作用。

我建议你查看书籍Filthy Rich Clients,深入了解Swing组件渲染的工作原理。

答案 3 :(得分:1)

您应该注意,set(Preferred / Minimal / Maximum)Size()只不过是父组件及其layoutmanager提示组件应该获得多少空间的提示。 进一步注意,这些尺寸仅在组件布局时解释(首次渲染时,无效()等等。