有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    I printed out this.getWidth() and this.getHeight() and this gives me the dimensions of the image itself, rather than the JPanel.

    不,这些方法给出的是面板的宽度/高度,而不是图像(除非您有这样做的自定义代码)

    例如,您可以使用Background Panel将图像居中(除其他外)

    注:使图像居中的一种简单方法是使用GridBagLayout创建一个面板。然后创建一个带有ImageIcon的JLabel,并将标签添加到面板中。默认情况下,零部件将居中

    调用绘画方法时,可能未加载图像

    g2.drawImage(pic, x, y, null);
    

    以上内容应为:

    g2.drawImage(pic, x, y, this);
    

    “this”将确保在加载图像时重新绘制组件

    如果您需要有关自定义绘制代码的更多帮助,请发布适当的SSCCE来演示问题

    I also set a preferred size and minimum size on the jpanel if that affects anything..

    不应设置首选尺寸。布局管理器的工作是确定首选尺寸

    在进行自定义绘制时,应该覆盖面板的getPreferredSize()方法以返回图像的大小。但是绘制代码仍然需要计算图像位置,以处理面板大小不同于首选大小的情况