Background no JDesktopPane

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 :slight_smile:

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.