Центр содержимого ячеек в GridLayout - PullRequest
0 голосов
/ 16 июля 2010

У меня есть панель с 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 компонента изображения в MainMenu, они появятся вверх.

Ответы [ 2 ]

2 голосов
/ 16 июля 2010

GridLayout будет изменять размер всех компонентов, чтобы заполнить доступное пространство.Таким образом, если размеры ваших 3 компонентов изображения составляют 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);
    }
}
0 голосов
/ 16 июля 2010

Я полагаю, что то, что вы хотите, требует от вас вызова setLayoutData для ваших компонентов изображения - посмотрите примеры здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...