Es probablemente más fácil de cargar el Image
en un ImageIcon
y mostrarlo en una JLabel
, sin embargo:
Para directamente 'draw' la imagen al JPanel, reemplazar el método del JPanel paintComponent(Graphics)
a algo como lo siguiente:
public void paintComponent(Graphics page)
{
super.paintComponent(page);
page.drawImage(img, 0, 0, null);
}
donde img
es (posiblemente cargado a través de la llamada ImageIO.read()
).
Graphics#drawImage
es un comando muy sobrecargado que le permitirá ser muy específico sobre cómo, cuánto y dónde pintará la imagen para el componente.
También puede obtener 'fantasía' y escalar la imagen a su gusto con el método Image#getScaledInstance
. Esto tomará un -1
para los parámetros width
o height
para mantener la relación de aspecto de la imagen igual.
Ponerlo en una forma más elegante:
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);
}
me gustaría utilizar un [JImagePanel] (https://github.com/dberm22/DBoard/blob/master/src/com/dberm22/utils/ JImagePanel.java). Debe hacer todo lo que necesite, – dberm22