Вероятно, проще всего загрузить 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 );
}