java在swing中,是否可以在paintComponent()中找到JPanel的宽度和高度属性?
我正在尝试将我放置在JPanel中的图像居中。在我的paintComponent()中,我有以下几行:
int x = (this.getWidth() - pic.getWidth(null)) / 2;
int y = (this.getHeight() - pic.getHeight(null)) / 2;
g2.drawImage(pic, x, y, null);
但是,图像仍然没有居中对齐。我把这个打印出来了。getWidth()和这个。getHeight()这给了我图像本身的尺寸,而不是JPanel
理想的解决方案是:
int x = (JPANEL.GETWIDTH() - pic.getWidth(null)) / 2;
int y = (JPANEL.GETHEIGHT() - pic.getHeight(null)) / 2;
g2.drawImage(pic, x, y, null);
但我的问题是,我无法访问JPanel的宽度和高度,因为这些属性位于另一个类中
我试着制作实例变量来保存和设置JPanel的宽度和高度,这是有效的。但是,当我调整窗口大小时,它使用JPanel的原始宽度和高度。我不知道在调整窗口大小时如何更新代码以适应新JPanel的大小。有什么想法吗
# 1 楼答案
不,这些方法给出的是面板的宽度/高度,而不是图像(除非您有这样做的自定义代码)
例如,您可以使用Background Panel将图像居中(除其他外)
注:使图像居中的一种简单方法是使用
GridBagLayout
创建一个面板。然后创建一个带有ImageIcon的JLabel,并将标签添加到面板中。默认情况下,零部件将居中调用绘画方法时,可能未加载图像
以上内容应为:
“this”将确保在加载图像时重新绘制组件
如果您需要有关自定义绘制代码的更多帮助,请发布适当的SSCCE来演示问题
不应设置首选尺寸。布局管理器的工作是确定首选尺寸
在进行自定义绘制时,应该覆盖面板的
getPreferredSize()
方法以返回图像的大小。但是绘制代码仍然需要计算图像位置,以处理面板大小不同于首选大小的情况