1

我在 Java GUI 开发中苦苦挣扎(!)。所有这些明显有意义的小事情都行不通。我将解释我正在尝试做什么以及我失败的地方(这非常令人沮丧):

我有这个位于面板内的 graphics2d 对象。现在这个图形绘制了一个图像,它可以一直画下去。这张图扩展得非常可怕,因为我不知道预期的尺寸是多少,所以我把它放在了一个滚动窗格中。现在我想在每次疼痛迭代中调整 JPanel 的大小并将 setPreferredSize 设置为更大的值,从而扩展滚动窗格的旋钮。

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

这可能是什么原因?

除此之外,我还有另一个小问题,我很想解决:由于图形绘制继续并随着时间的推移而增加,我怎样才能提高滚动窗格的位置?逐渐增加吗?

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

4

4 回答 4

6

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

于 2009-09-06T20:11:05.017 回答
2

在我看来,你有几件事错了。

  • 在paint方法中设置任何大小属性(实际上是组件的任何属性)都可能导致奇怪的行为,因为您并不真正知道何时以及多久调用一次paint

  • 你通常不调用你自己的油漆。一旦组件变得可见,它将由 Swing 本身调用

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

于 2009-09-06T19:59:37.613 回答
1

如果确实设置了 LayoutManager,setPreferredSize 是您可以向 LayoutManager 提供的许多提示之一,该 LayoutManager 正在管理组件容器的布局。这取决于给定的 LayoutManager 对这些提示的作用。

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

于 2009-09-06T20:24:13.743 回答
1

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

于 2009-09-06T20:26:27.707 回答