Olá!
Gostaria de saber como faço para que uma imagem pequena seja automaticamente redimensionada em um JPanel ocupando TODO o seu espaço? Igual quando se insere um objeto num BorderLayout.CENTER e o objeto é redimensionado ocupando toda a área! Se eu uso um JLabel com a imagem e adiciono no painel o JLabel é redimensionado mas a imagem fica pequena! Alguma dica?
Obrigado.
Olha esse codigo ai
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.net.URL;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
/**
* @author fabiofalci
*/
public class MyPanel extends JPanel {
private Image image;
public MyPanel() {
this.initialize();
}
protected void initialize() {
this.image = this.getImage("background.gif");
this.setLayout(new BorderLayout());
this.add(new JLabel("www.guj.com.br"), BorderLayout.NORTH);
this.add(new JLabel("www.portaljava.com.br"), BorderLayout.SOUTH);
}
public Image getImage(String path) {
URL imageURL = getClass().getResource(path);
if (imageURL == null)
return null;
return new ImageIcon(imageURL).getImage();
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Dimension dDesktop = this.getSize();
double width = dDesktop.getWidth();
double height = dDesktop.getHeight();
Image background = new ImageIcon(this.image.getScaledInstance(
(int) width, (int) height, 1)).getImage();
g.drawImage(background, 0, 0, this);
}
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(new MyPanel());
frame.setSize(400, 300);
frame.setVisible(true);
}
}
fabio eu sou iniciante em java e no forum, eu gostaria de saber se tem como eu fazer esse exemplo extendendo de um jframe,
te agradeço muito se puder me ajudar!
[code]import java.awt.BorderLayout;
import java.awt.Graphics2D;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class Main extends JFrame {
private BufferedImage bi;
private JLabel jLabel_Imagem;
public Main() {
JFileChooser jFileChooser = new JFileChooser();
jFileChooser.showOpenDialog(null);
File arquivo = jFileChooser.getSelectedFile();//arquivo
try {
bi = ImageIO.read(arquivo); //carrega a imagem real num buffer
} catch (IOException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
//cria um jlabel
jLabel_Imagem = new JLabel();
//adiciona a acao de resized
jLabel_Imagem.addComponentListener(new ComponentListener() {
public void componentResized(ComponentEvent e) {
atualizarJLabel();
}
public void componentMoved(ComponentEvent e) {
}
public void componentShown(ComponentEvent e) {
}
public void componentHidden(ComponentEvent e) {
}
});
getContentPane().setLayout(new BorderLayout());
getContentPane().add(BorderLayout.CENTER, jLabel_Imagem);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public void atualizarJLabel() {
if (jLabel_Imagem.getSize().width == 0 || jLabel_Imagem.getSize().height == 0) return;
BufferedImage aux = new BufferedImage(jLabel_Imagem.getSize().width, jLabel_Imagem.getSize().height, bi.getType());//cria um buffer auxiliar com o tamanho desejado
Graphics2D g = aux.createGraphics();//pega a classe graphics do aux para edicao
AffineTransform at = AffineTransform.getScaleInstance((double) jLabel_Imagem.getSize().width / bi.getWidth(), (double) jLabel_Imagem.getSize().height / bi.getHeight());//cria a transformacao
g.drawRenderedImage(bi, at);//pinta e transforma a imagem real no auxiliar
jLabel_Imagem.setIcon(new ImageIcon(aux));// seta no jlabel
}
public static void main(String[] args) {
//teste
new Main();
}
}[/code]