Java';s setPreferredSize赢得';t调整JPanel的大小
我正在努力(!)开发JavaGUI。所有这些显而易见的小事都是行不通的。我将解释我正在尝试做什么以及我失败的地方(这非常令人沮丧): 我有一个graphics2d对象,它位于一个面板中。现在这个图形绘制了一个图像,它可以继续并永远绘制下去。这幅画展开得很可怕,因为我不知道预期的大小,所以我把它放在一个滚动窗格中。现在我想在每次迭代中调整JPanel的大小,并将setPreferredSize设置为更大的值,从而扩展滚动窗格的旋钮 问题是: 出于某种原因,当我从paint调用setPreferredSize时,它没有任何作用。我称之为小组讨论。当我尝试从调用paint的函数调用setPreferredSize时,它只执行一次大小调整操作 原因可能是什么 除此之外,我还有一个小问题,我想解决: 由于图形绘制一直在进行,并且随着时间的推移尺寸不断增大,我如何提高滚动窗格的位置?逐渐增加吗Java';s setPreferredSize赢得';t调整JPanel的大小,java,user-interface,scroll,jpanel,Java,User Interface,Scroll,Jpanel,我正在努力(!)开发JavaGUI。所有这些显而易见的小事都是行不通的。我将解释我正在尝试做什么以及我失败的地方(这非常令人沮丧): 我有一个graphics2d对象,它位于一个面板中。现在这个图形绘制了一个图像,它可以继续并永远绘制下去。这幅画展开得很可怕,因为我不知道预期的大小,所以我把它放在一个滚动窗格中。现在我想在每次迭代中调整JPanel的大小,并将setPreferredSize设置为更大的值,从而扩展滚动窗格的旋钮 问题是: 出于某种原因,当我从paint调用setPreferre
各位,非常感谢。我这里确实需要帮助听起来你好像有两件事做错了
- 在paint方法中设置任何大小属性(实际上是组件的任何属性)都可能会导致奇怪的行为,因为您不知道调用paint的时间和频率
- 你通常不称自己为绘画。一旦组件变得可见,它将被Swing本身调用
- 如果我没弄错的话,你想要一个组件,它会随着时间而增长。正确的方法是创建一个计时器。使用计时器根据需要更改大小。在绘制方法中,只需阅读此信息并使用它来决定要绘制的内容
- 在paint方法中设置任何大小属性(实际上是组件的任何属性)都可能会导致奇怪的行为,因为您不知道调用paint的时间和频率
- 你通常不称自己为绘画。一旦组件变得可见,它将被Swing本身调用
- 如果我没弄错的话,你想要一个组件,它会随着时间而增长。正确的方法是创建一个计时器。使用计时器根据需要更改大小。在绘制方法中,只需阅读此信息并使用它来决定要绘制的内容
我建议您阅读这本书,以深入了解Swing组件渲染的工作原理。如果确实设置了LayoutManager,则可以向正在管理组件容器布局的LayoutManager提供许多提示。如何处理这些提示取决于给定的LayoutManager 我建议您阅读这本书,深入了解Swing组件渲染的工作原理。您应该注意,set(Preferred/Minimal/Maximum)Size()只不过是提示父组件及其layoutmanager组件应该获得多少空间。 进一步注意,这些大小仅在组件布局时解释(第一次渲染时,无效()等等)。您应该注意设置(首选/最小/最大)大小()只不过是提示父组件及其布局管理器组件应获得多少空间。
进一步注意,这些大小仅在组件布局时解释(第一次渲染时,invalidate()等等)。我已经有了一个计时器,每隔一段时间调用repaint方法一次。我试着自己设置组件的大小,我注意到了一件奇怪的事情:当滚动条移动到远端(好像我要向前滚动)时,JPanel会突然调整大小。你知道为什么吗?我怎样才能让滚动窗格自己前进呢?听起来您需要通知上游组件(JScrollpane)有关更改的信息。如果我做对了,invalidate()是正确的做法,但我不能完全确定。好吧,我已经有了一个计时器,每隔一段时间调用一次repaint方法。我试着自己设置组件的大小,我注意到了一件奇怪的事情:当滚动条移动到远端(好像我要向前滚动)时,JPanel会突然调整大小。你知道为什么吗?我怎样才能让滚动窗格自己前进呢?听起来您需要通知上游组件(JScrollpane)有关更改的信息。如果我做对了,invalidate()是正确的做法,但我不能完全确定哇,revalidate真的做到了:O谢谢你的“as”。这就像大海捞针。你知道如何推进滚动条吗?为什么你在这个话题上问了很多问题。在你的其他帖子中,你会得到答案,但你从来不会费心把问题标记为已被接受。当然,永远不要从paintComponent()方法调用setPreferredSize。您也不应该从该方法调用revalidate。如果你把所有的问题都放在一起,那么每个人都会知道建议了什么,我们就不会浪费时间提出同样的建议了。在以后的文章中,请在SSCCE上提出您的问题。如果您不知道SSCCE是什么,请搜索web。@未知:尝试在单独的线程中滚动元素,可能您有这样一种情况,即在验证过程尚未完成时将其设置在某个位置,而