JPanel с фоновым изображением - PullRequest
7 голосов
/ 29 октября 2010

Как поместить фоновое изображение на JPANEL?

JPanel pDraw = new JPanel(new GridLayout(ROWS,COLS,2,2)); 
pDraw.setPreferredSize(new Dimension(600,600)); //size of the JPanel
pDraw.setBackground(Color.RED); //How can I change the background from red color to image?

Ответы [ 2 ]

4 голосов
/ 29 октября 2010

Вероятно, проще всего загрузить Image в ImageIcon и отобразить его в JLabel, однако:
Чтобы напрямую «нарисовать» изображение в JPanel, переопределите метод paintComponent(Graphics) JPanelчто-то вроде следующего:

public void paintComponent(Graphics page)
{
    super.paintComponent(page);
    page.drawImage(img, 0, 0, null);
}

, где img - это Image (возможно, загруженный через вызов ImageIO.read()).

Graphics#drawImage - это сильно перегруженная команда, которая позволит вам быть очень точным в том, как, сколько и где вы рисуете изображение для компонента.

Вы также можете получить «фантазию» и масштабировать изображение по своему усмотрению, используя метод Image#getScaledInstance.Для параметра width или height потребуется -1, чтобы сохранить соотношение сторон изображения.

Если выразить это более причудливо:

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

    int h = img.getHeight(null);
    int w = img.getWidth(null);

    // Scale Horizontally:
    if ( w > this.getWidth() )
    {
        img = img.getScaledInstance( getWidth(), -1, Image.SCALE_DEFAULT );
        h = img.getHeight(null);
    }

    // Scale Vertically:
    if ( h > this.getHeight() )
    {
        img = img.getScaledInstance( -1, getHeight(), Image.SCALE_DEFAULT );
    }

    // Center Images
    int x = (getWidth() - img.getWidth(null)) / 2;
    int y = (getHeight() - img.getHeight(null)) / 2;

    // Draw it
    page.drawImage( img, x, y, null );
}
2 голосов
/ 29 октября 2010

Вот объяснение.

...