我需要设置JPanel的首选大小,以便JFrame组件的pack()方法可以正常工作。如何自动设置此尺寸?我有一个GridLayout 3x3的JPanel,其中填充了9个ImagePanel:

public class ImagePanel extends JPanel {
    private Image image;

    public ImagePanel(Image image) {
        this.image = image;
        setSize(image.getWidth(null), image.getHeight(null));
    }

    public void paintComponent(Graphics g) {
        super.paintComponent(g);

        g.drawImage(image, 0, 0, null);
    }
}


现在,我要做的就是获取此JPanel图片的大小。

image.getWidth() * 3
image.getHeight() * 3


不是我想要的。我想知道与pack()类似的东西。

最佳答案

最简单的方法是让图像确定组件的首选大小,如下所示:

public class ImagePanel extends JPanel {
    private Image image;

    public ImagePanel(Image image) {
        this.image = image;
        // setSize(image.getWidth(null), image.getHeight(null));
    }

    @Override
    public Dimension getPreferredSize() {
        if (image != null) {
            int w = image.getWidth();
            int h = image.getHeight();
            return new Dimension(w, h);
        } else {
            return super.getPreferredSize();
        }
    }

    @Override   // this should be protected, not public
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        if (image != null) {
            g.drawImage(image, 0, 0, null);
        }
    }
}

09-10 09:36
查看更多