• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

mfalcao

Java 2D

5 mensagens neste tópico

Olá!

Preciso de ajuda para o seguinte:

Preciso fazer uma aplicação onde a ideia é ter uma imagem de fundo com outros elementos por cima, que podem ser outras imagens, botões, caixas de texto, etc.

Estou a tentar descobrir a melhor forma de fazer isso (não tenho muita experiência em Java, principalmente na parte gráfica) e tenho lido umas coisas sobre Java 2D. Gostava de saber se este é o caminho a seguir e se alguém tem exemplos da utilização desta API, livros, tutoriais, etc. Caso contrário, gostava de ter outras sugestões!

Obrigada!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Depende do tipo de aplicação. Se vais trabalhar tudo em Java 2D então terás de aprender como funciona a API. Se por outro lado estás apenas a fazer uma aplicação desktop em que irás usar Swing, não posso falar sobre SWT porque nunca fiz isso em SWT, podes redefinir apenas o método que desenha o painel onde vais colocar os componentes de forma a que, em vez de desenhar um fundo opaco de uma cor, desenhe uma imagem dada por ti. Ou então usar um componente que consiga mostrar imagens e "colá-lo" no fundo, usando ou um gestor de layouts ou, novamente, redefinindo o método de desenho.

Assim, podes redefinir o método paint, do painel que estás a usar como fundo e mandar desenhar uma imagem, ou colocar uma JLabel no fundo e dar-lhe uma imagem através do método setIcon. Neste último caso tens de definir um valor para a ordem em Z para que a JLabel fique no fundo.

Não tenho agora exemplos para te mostrar mas vou tentar encontrar qualquer coisa útil.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Uma forma simples de fazer o que queres, estendendo a classe JPanel

Classe que contém a imagem e que pode ser colocada no fundo de uma JFrame

public class ImagePanel extends javax.swing.JPanel {

    private Image img;
    
    /** Creates new form ImagePanel */
    public ImagePanel() {
        //Endereco para a imagem a usar
        img = new ImageIcon("C:\\System\\Downloaded\\lfg0152.gif").getImage();
        //Fundamental que a propriedade seja coloca a false ou a imagem nao vai aparecer
        setOpaque(false);
    }
    
    @Override
    public void paintComponent( Graphics g ) {
        //a imagem vai ser desenhada em x=0, y=0 e usando o tamanho real da imagem
       //e' fundamental que seja chamado o método drawImage antes de se chamar o método paintComponent da superclasse
        g.drawImage(img, 0, 0, this);
        super.paintComponent(g);
    }
}

JFrame que contém o painel anterior como painel base

public class PanelTest extends javax.swing.JFrame {

    /** Creates new form PanelTest */
    public PanelTest() {
        this.getContentPane().add(new ImagePanel(), BorderLayout.CENTER);
    }

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new PanelTest().setVisible(true);
            }
        });
    }
}

Podes assim colocar que componentes quiseres dentro do painel com a imagem que os mesmos vão ficar por cima da imagem.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Era mesmo disto que eu estava à procura, resolveu perfeitamente o meu problema.

Obrigada Knitter!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Repara que essa é uma forma muito simples e muito pouco optimizado ou que tem muito pouco em conta. Embora não deva ser preciso mais que isso e nem te devas preocupar com muito da API 2D, pode ser útil conheceres melhor a forma como ela funciona e o que pode ser melhorado no código que te dei.

Mas ainda bem que serviu :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora