Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java';s setPreferredSize赢得';t调整JPanel的大小_Java_User Interface_Scroll_Jpanel - Fatal编程技术网

Java';s setPreferredSize赢得';t调整JPanel的大小

Java';s setPreferredSize赢得';t调整JPanel的大小,java,user-interface,scroll,jpanel,Java,User Interface,Scroll,Jpanel,我正在努力(!)开发JavaGUI。所有这些显而易见的小事都是行不通的。我将解释我正在尝试做什么以及我失败的地方(这非常令人沮丧): 我有一个graphics2d对象,它位于一个面板中。现在这个图形绘制了一个图像,它可以继续并永远绘制下去。这幅画展开得很可怕,因为我不知道预期的大小,所以我把它放在一个滚动窗格中。现在我想在每次迭代中调整JPanel的大小,并将setPreferredSize设置为更大的值,从而扩展滚动窗格的旋钮 问题是: 出于某种原因,当我从paint调用setPreferre

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

我有一个graphics2d对象,它位于一个面板中。现在这个图形绘制了一个图像,它可以继续并永远绘制下去。这幅画展开得很可怕,因为我不知道预期的大小,所以我把它放在一个滚动窗格中。现在我想在每次迭代中调整JPanel的大小,并将setPreferredSize设置为更大的值,从而扩展滚动窗格的旋钮

问题是: 出于某种原因,当我从paint调用setPreferredSize时,它没有任何作用。我称之为小组讨论。当我尝试从调用paint的函数调用setPreferredSize时,它只执行一次大小调整操作

原因可能是什么

除此之外,我还有一个小问题,我想解决: 由于图形绘制一直在进行,并且随着时间的推移尺寸不断增大,我如何提高滚动窗格的位置?逐渐增加吗


各位,非常感谢。我这里确实需要帮助

听起来你好像有两件事做错了

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

  • 你通常不称自己为绘画。一旦组件变得可见,它将被Swing本身调用

  • 如果我没弄错的话,你想要一个组件,它会随着时间而增长。正确的方法是创建一个计时器。使用计时器根据需要更改大小。在绘制方法中,只需阅读此信息并使用它来决定要绘制的内容


听起来你好像有两件事做错了

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

  • 你通常不称自己为绘画。一旦组件变得可见,它将被Swing本身调用

  • 如果我没弄错的话,你想要一个组件,它会随着时间而增长。正确的方法是创建一个计时器。使用计时器根据需要更改大小。在绘制方法中,只需阅读此信息并使用它来决定要绘制的内容


根据其名称,首选大小不是强制性的。。。也许pack()或revalidate()会有所帮助…

根据名称,首选大小不是必需的。。。也许pack()或revalidate()会有所帮助……

如果确实设置了LayoutManager,则可以向正在管理组件容器布局的LayoutManager提供许多提示。如何处理这些提示取决于给定的LayoutManager


我建议您阅读这本书,以深入了解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。@未知:尝试在单独的线程中滚动元素,可能您有这样一种情况,即在验证过程尚未完成时将其设置在某个位置,而