【问题标题】:PaintComponent with a Layout Manager带有布局管理器的 PaintComponent
【发布时间】:2013-02-09 11:45:50
【问题描述】:
是否可以定位由 PaintComponent 方法绘制的 BufferedImage?例如,如果它是在重写的 PaintComponent 方法中绘制的图像,是否可以为此使用布局管理器(即 BoxLayout、BorderLayout、FlowLayout、GridBagConstrains、GridBagLayout)?还是必须将图像转换为 JComponent(即 JLabel)?
【问题讨论】:
标签:
java
image
swing
layout
paintcomponent
【解决方案1】:
是否可以定位由 PaintComponent 方法绘制的 BufferedImage?
是的,这是可能的。您可以通过getWidth() 和getHeight() 在其paintComponent(...) 方法中获取绘图组件的尺寸,然后使用这些尺寸来定位事物。此外,Graphics#drawImage(...) 方法的重载可以为您简化此操作。
例如,如果它是在重写的 PaintComponent 方法中绘制的图像,是否可以为此使用布局管理器(即 BoxLayout、BorderLayout、FlowLayout、GridBagConstrains、GridBagLayout)?
不,不是直接的,因为布局管理器仅用于布置子组件。
或者您是否必须将图像转换为 JComponent(即 JLabel)?
您可以轻松做到这一点 - 将您的 Image 放入 ImageIcon 和 JLabel 中,然后使用任何嵌套组件及其最有效的布局管理器将其放置在容器中。
编辑 1
您在评论中提问:
我如何获得尺寸?
同样,在 paintComponent(...) 方法内部,只需调用 getSize() 或 getHeight() 和 getWidth() 即可获得您的尺寸。真的没有什么比这更容易了。
您能否提供您的第一个实例paintComponent(...) 的sn-p 代码?
我建议你先去。向我们展示您的一些可编译和运行的代码,并尝试演示您的问题,然后让我们着手处理。