Dica como fazer o zoom in zoom out

[i]Bom dia caros,

 Antes de tudo, quero relatar que pesquisei no fórum, google, documentação, no entanto não consegui fazer, por isso estou colocando aqui este meu tópico. Quero fazer um método que dê um zoom na imagem. Mas não posso usar a API graphics 2d, apenas a graphics. Para dar um zoom ou eu consegui colocando um acumulador e o mesmo somando nas coordenadas da imagem (como exemplo que usei RETA), no entanto, para fazer o zoom in não deu certo. 

Veja o código do botão ZOOM:

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed
        scala = jcEscala.get(jComboBox2.getSelectedIndex());
        cont = cont +30;
        if (desenho.equals("Linha")){
              if (scala.equals("Mais zoom")){
			            
                	((Desenha)this.jPanel2).desenhaLinha(400-cont,190-cont, 500+cont, 290+cont);
			}
			 if (scala.equals("Menos zoom")){
			            ((Desenha)this.jPanel2).apaga(0,0);
            			((Desenha)this.jPanel2).desenhaLinha(400+cont,190+cont, 500-cont, 290-cont);
			}
	 }

E os métodos que chamo:

 public void desenhaLinha(int xLinha, int yLinha) {

        Graphics g = (Graphics) this.getGraphics();
        g.setColor(Color.black);
        g.drawLine(xLinha, yLinha, xLinha+100, yLinha+100);
        g.setColor(Color.black);
        

    }
	
	public void escalaLinha(int xLinha, int yLinha, int x2Linha, int y2Linha) {

        Graphics g = (Graphics) this.getGraphics();
        g.setColor(Color.black);
        g.drawLine(xLinha, yLinha, x2Linha, y2Linha);
        g.setColor(Color.black);
        

    }
	
	public void apaga(int xi, int yi) {
        tam_x = 900, tam_y = 480;
       
        Graphics g = (Graphics) this.getGraphics();
        g.setColor(Color.white);
        g.fillRect(xi, yi, tam_x, tam_y);// (inicio_x, inici_y, tam_x, tam_y)
        
    }

Alguém?

Ao inves de somar ou subtrair não seria mais interessante se vc multiplicasse o tamanho atual da sua linha por um fator?

Basta multiplicar todas as coordenadas pelo fator de zoom desejado.

Outra coisa. Do jeito que vc fez, a imagem será apagada caso você redimensione a tela, ou caso você mova e retire uma tela na frente da sua. O correto mesmo é sobrescrever o método paintComponent de um JPanel, e fazer seu desenho ali.

[quote=ViniGodoy]Basta multiplicar todas as coordenadas pelo fator de zoom desejado.

Outra coisa. Do jeito que vc fez, a imagem será apagada caso você redimensione a tela, ou caso você mova e retire uma tela na frente da sua. O correto mesmo é sobrescrever o método paintComponent de um JPanel, e fazer seu desenho ali.[/quote]
É deste jeito?


objeto.setSize((cordenadaX*variavel),(cordenadaX*variavel));

No caso do drawLine:

[quote=DarthVictor][quote=ViniGodoy]Basta multiplicar todas as coordenadas pelo fator de zoom desejado.

Outra coisa. Do jeito que vc fez, a imagem será apagada caso você redimensione a tela, ou caso você mova e retire uma tela na frente da sua. O correto mesmo é sobrescrever o método paintComponent de um JPanel, e fazer seu desenho ali.[/quote]
É deste jeito?

[code]

objeto.setSize((cordenadaXvariavel),(cordenadaXvariavel));

[/code][/quote]

Certo, mas se eu tenho opção de desenhar um retângulo e um polígono? Como vou chamar eles independentemente? Quando clico na reta, que dê um zoom na reta, quando clico no retângulo, dê um zoom no retângulo…me entendeu ViniGodoy?

É melhor então criar uma classe para cada um desses objetos. E colocar lá um atributo “escala”.

Para fazer o desenho, você deve percorrer um array de objetos, e ir chamando o método desenhar de cada um deles.
Só com esse array você poderá testar se o clique do mouse atingiu um dos objetos desenhados na tela.