Zoon redimensionando JPanel

2 respostas
N

Bom pessoal, agora estou na fase de implementar o zoom no meu programa. Basicamente eu faço uso do Graphics2D.scale(zoom,zoom). Ele faz o zoom bonito, o único problema é que ele ta redimensionado o tamanho do meu panel. Até faz sentido, porque scale é pra redimensionar mesmo, mas eu não acho outra forma de implementar o zoom sem alterar o tamanho do panel.
paintComponent:

@Override
    protected void paintComponent(Graphics g) {
        Graphics2D g2d = (Graphics2D) g.create();
        g2d.scale(zoom,zoom);
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                        RenderingHints.VALUE_ANTIALIAS_ON);
        g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
                        RenderingHints.VALUE_TEXT_ANTIALIAS_ON);        
       
        fundo.desenharFundo(g2d,this);
     
        if(comando != null)
        {
            System.out.println("Desenhando ferramenta");
            comando.desenhar(g);
        }  
        desenharFormas(g2d);
        
        g2d.dispose();
    }

Deixei uma ss do problema pra vocês entenderem melhor. Como vocês podem ver, meu panel está dentro do JInternalFrame, e a ss foi tirada após aplicar o zoom in uma vez, o fundo branco é o tamanho do panel depois do zoom, a borda cinza é o quanto diminuiu. Obrigado.


2 Respostas

E

aplique o scale após desenhar o fundo., porque dai o fundo é desenhado normalmente e daí só os seus desenhos são redimensionados

N

elissonandrade, talvez você possa me ajudar em uma coisa. Eu já vi e revi o código do UniversoPessoal que está na sua assinatura, mas até agora não entendi como é feito o zoom, eu consegui corrigir o defeito da tarja cinza com a sua dica, o problema é quando eu vou pintar na tela, por exemplo, eu pego um ponto através do MouseListenner e mando desenhar naquele ponto, o problema é que quando eu clico para desenhar depois de aplicar zoom o desenho não corresponde com da região onde eu cliquei. Sem aplicar o zoom o desenho sai certo.
Código do MouseListenner:

@Override
    public void mouseDragged(MouseEvent e)
    {
        if(botaoEsquerdo)
        {
            this.x1 = (int) ((e.getPoint().getX() - this.areaDesenho.getFundo().getAffineTransform().getTranslateX())*this.areaDesenho.getFundo().getAffineTransform().getScaleX());
            this.y1 = (int) ((e.getPoint().getY() - this.areaDesenho.getFundo().getAffineTransform().getTranslateY())*this.areaDesenho.getFundo().getAffineTransform().getScaleY());
            forma.addPonto(new Point(x1,y1));
            this.areaDesenho.repaint();
        }        
    }

Como eu desenho a forma:

@Override
    public void desenhar(Graphics2D g)
    {
        Graphics2D g2d = (Graphics2D) g.create();       
        if(pontos.size()>0)
        {
            GeneralPath gp = new GeneralPath();           
            gp.moveTo(pontos.get(0).getX(), pontos.get(0).getY());
            gp.lineTo(pontos.get(0).getX(), pontos.get(0).getY());
            for(int i = 1; i < pontos.size(); i++)
                   gp.lineTo(pontos.get(i).getX(), pontos.get(i).getY());            
            g2d.setColor(cor);        
            g2d.draw(gp);
        }              
        g2d.dispose();
    }

Código do zoom:

@Override
public void update(ZoonArgs arg) {
        zoom = arg.getScale();      
        tx = new AffineTransform();        
        tx.scale(arg.getScale(), arg.getScale());
}

Código onde do paintComponent:

@Override
    protected void paintComponent(Graphics g) {
        Graphics2D g2d = (Graphics2D) g.create();        
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                        RenderingHints.VALUE_ANTIALIAS_ON);
        g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
                        RenderingHints.VALUE_TEXT_ANTIALIAS_ON);               
        fundo.desenharFundo(g2d);
        g2d.setTransform(fundo.getAffineTransform());
        if(tx!=null)
            g2d.transform(tx);  
        if(comando != null)
            comando.desenhar(g2d); 
        desenharFormas(g2d);        
        g2d.dispose();
    }
Criado 8 de setembro de 2012
Ultima resposta 10 de set. de 2012
Respostas 2
Participantes 2