2014-11-25 71 views
0

我得到了一个JPanel类,其方法paintComponent()被覆盖绘制一个自定义图表。Swing:在JPanel中绘制图形会改变它的尺寸吗?

如果我画出比面板大的图形,面板的尺寸会拉长吗?

如果答案是否定的,我怎么能这样做?

+0

你是怎么做的?你想要在paintComponent()中绘制自定义图表的源代码? – BzH 2014-11-25 05:39:52

回答

2

如果我画比面板的图形更大请问面板的尺寸被拉长?

不,它不会伸展。

..我怎么能这么做?

最简单的方法:最好不要将图形绘制到涂料方法的逻辑的,把那个逻辑到画图正确大小的图像,然后显示在JLabel图像。

+0

我觉得它不会在我的解决方案中工作,因为在我的情况下需要交互式图形/ – user1038662 2014-11-25 05:43:17

+0

*“我认为它不会在我的解决方案中工作,因为需要交互式图形”*您认为是错误的。显示在标签上的图像可以与面板上绘制的图形“交互”。 – 2014-11-25 05:46:02

+1

我没有意识到这一点。我检查了我的代码,似乎可行。我会尝试这种方式。谢谢 – user1038662 2014-11-25 05:49:27

0

直接绘制不会影响组件的大小,您可以非常容易地绘制组件的可见边界之外。

通常,组件的大小由getPreferredSize,getMinimumSizegetMaximumSize的组合确定,并且布局管理器已用于管理组件所在的容器。

如果您想影响面板的大小,您应该更改容器层次结构(大多数情况下)getPreferredSizeinvalidate的返回结果。

您希望直接通过覆盖getPreferredSize方法而不是依靠setPreferredSize来做到这一点,因为这可以防止其他人改变它。

Should I avoid the use of set(Preferred|Maximum|Minimum)Size methods in Java Swing?更多细节

+0

感谢您的评论,我看到重写getPreferredSize()是扩大面板的一种方法,但真的不知道如何。我如何获得将要绘制的Graphics对象的维度? – user1038662 2014-11-25 05:42:45

+0

不,'Graphics'通常没有与它关联的大小组件。您可以使用组件的getWidth和getHeight方法检查组件的当前大小 – MadProgrammer 2014-11-25 05:43:58

+0

*“如何获取将要绘制的Graphics对象的维度?”* Graphics对象具有没有维度。你正在绘制'Shape'的实例吗? – 2014-11-25 05:44:06