Как выровнять фоновое изображение по центру в JPanel - PullRequest
5 голосов
/ 26 декабря 2010

Я хотел добавить фоновое изображение к своему JFrame.
Фоновое изображение означает, что я могу позже добавить Компоненты на JFrame или JPanel
Хотя я не могу найти, как добавить фоновое изображение кJFrame,
Я узнал, как добавить фоновое изображение в JPanel отсюда:
Как установить фоновое изображение в Java?

Это решило моюпроблема, но теперь, так как мой JFrame изменяемого размера, я хочу держать изображение в центре.
Код, который я нашел, использует этот метод

public void paintComponent(Graphics g) { //Draw the previously loaded image to Component.  
    g.drawImage(img, 0, 0, null);   //Draw image
}  

Кто-нибудь может сказать, как выровнять изображение по центруJPanel.
Поскольку g.drawImage(img, 0, 0, null); обеспечивает x = 0 и y = 0
Также, если есть способ добавить фоновое изображение к JFrame, я хотел бы знать.
Спасибо.

1 Ответ

10 голосов
/ 26 декабря 2010

Предполагая подходящее значение image, вы можете отцентрировать его так:

@Override
public void paintComponent(Graphics g) {
    super.paintComponent(g);
    Graphics2D g2d = (Graphics2D) g;
    int x = (this.getWidth() - image.getWidth(null)) / 2;
    int y = (this.getHeight() - image.getHeight(null)) / 2;
    g2d.drawImage(image, x, y, null);
}

Если вы хотите, чтобы другие компоненты перемещались с фоном, вы можете изменить аффинное преобразование графического контекста, чтобы сохранить центрирование изображения, как показано в этом более полном примере , который включает вращение.

@Override
public void paintComponent(Graphics g) {
    super.paintComponent(g);
    Graphics2D g2d = (Graphics2D) g;
    g2d.translate(this.getWidth() / 2, this.getHeight() / 2);
    g2d.translate(-image.getWidth(null) / 2, -image.getHeight(null) / 2);
    g2d.drawImage(image, 0, 0, null);
}
...