GridLayout中的中心单元格内容

时间:2010-07-16 19:25:23

标签: java swing

我有一个GridLayout(1,3)的面板,但我希望在此布局中集中单元格的内容(不添加面板):

public MainMenu() {
        setLayout(new GridLayout(1, 3));

        setBorder(BorderFactory.createLineBorder(Color.BLUE));
        setOpaque(false);


        ImageComponent img = new ImageComponent("resources/music.png", true, this);
        add(img);
        ImageComponent img1 = new ImageComponent("resources/video.png", true, this);
        add(img1);
        ImageComponent img2 = new ImageComponent("resources/audio", true, this);
        add(img2);


    }

因为如果我只是将这3个ImageComponents添加到MainMenu,它们会向上显示。

2 个答案:

答案 0 :(得分:2)

GridLayout将调整所有组件的大小以填充可用空间。因此,如果3个ImageComponents的尺寸为50x50,50x50和75x75,则它们的尺寸均为75x75。从那里可以看出ImageComponent如何自我绘制。

最有可能ImageComponent实现paintComponent,如下所示:

protected void paintComponent(Graphics g) {
    g.drawImage(image, 0, 0, this);
}

这将在左上角绘制图像,而不是居中。

这将绘制一个居中的图像:

protected void paintComponent(Graphics g)
{
    super.paintComponent(g);
    int iw = image.getWidth(this);
    int ih = image.getHeight(this);

    if (iw != -1 && ih != -1)
    {
        int w = getWidth();
        int h = getHeight();
        g.drawImage(image, (w -iw)/2, (h-ih)/2, this);
    }
}

答案 1 :(得分:0)

我相信你想要的东西要求你在图像组件上调用setLayoutData - 查看示例here