Boa tarde, estou com uma dúvida em relação ao JDesktopPane. Como faço pra colocar uma imagem de Background e ñ uma cor?
desde já agradeço;
Boa tarde, estou com uma dúvida em relação ao JDesktopPane. Como faço pra colocar uma imagem de Background e ñ uma cor?
desde já agradeço;
Bom eu já consegui fazer isso com panel, nesse caso você deveria extender uma classe de JDesktopPane e sobreescrever o método onPaint da classe extendida ai nesse caso você poderia criar um objeto Image e passar esse imagem no método que desenha. Assim o código eu não tenho aqui mas você pode procurar no fórum que com certeza vai encontrar rapidamente.
Espero ter ajudado
Uma vez achei um tópico falando com funcionava era mais ou menos assim:
desktop = new JDesktopPane() {
@Override
public void paintComponent (Graphics g){
ImageIcon img = new ImageIcon("img\\fundo.jpg");
Dimension d = Main.imageDesktop(img, desktop, 0, 0);
int width = (int) d.getWidth();
int height = (int) d.getHeight();
g.drawImage(img.getImage(),width,height,null);
super.paintComponent(g);
}};
desktop.setOpaque(false);
imagem centralizada no seu JDesktopPane:
class DecoratedDesktopPane extends JDesktopPane {
private Image img;
public DecoratedDesktopPane() {
try {
img = javax.imageio.ImageIO.read(new java.net.URL(getClass().getResource("/caminho/img.png"), "img.png"));
} catch (Exception ex) {
}
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
if (img != null) {
Dimension dimension = this.getSize();
int x = (int)(dimension.getWidth() - img.getWidth(this)) / 2;
int y = (int)(dimension.getHeight() - img.getHeight(this)) / 2;
g.drawImage(img, x, y, img.getWidth(this), img.getHeight(this), this);
} else {
g.drawString("Imagem nao encontrada", 50, 50);
}
}
}
Tipo agora fiquei curioso… Você gostaria de alterar a imagem de fundo por qual motivo? Tipo se fosse o caso de colocar um logo do sistema, não seria mais fácil colocar a imagem em um JLabel e centralizar na tela?
lauden: a classe JDesktopPane foi projetada para exibir JInternalFrame’s (que admitem justaposição), não componentes tais como JLabel. JInternalFrame’s podem ficar justapostos, mas um JLabel não admite outros componentes justapostos sobre ele. Assim, o caminho correto para exibir uma imagem em JDesktopPane é realmente via paintComponent() - se você tentar exibir um JInternalFrame numa área coberta por um JLabel, muito provavelmente o JInternalFrame não vai aparecer.
apenas para complementar, nao fiz o teste com JLabel, mas jah coloquei JButton no JDesktopPane e o que ocorre é que quando voce abre um JInternalFrame e passa com o mouse sobre ele, o button vem para frente, é algo como se aquela parte do JInternal fosse “apagada” e o button que está atras acaba aparecendo… colocando JPanels com buttons no JDesktop o comportamento é parecido, eles acabam aparecendo sempre sobre os JInternalFrame…
[/´s
Valeu pelas dicas, foram de muita ajuda! Consegui resolver o problema.
Valeu
Bom nesse caso acredito que com JLabel a coisa pode ser um pouco diferente, digo isso por que no meu trablho final de programação, para incrementar o aplicativo, eu coloquei uma imagem em um Jlabel e adicionei ao JDesktopPane sendo que o mesmo se comportou normalmente com os JInternalFrame’s abertos sobre ele, nesse caso acredito que talvez a regra apenas se aplica a componentes que podem receber foco sendo que o JButton é um desses componentes.