Método repaint()

2 respostas
SadNess

galera
to com um problema aqui
tenho que fazer desenhos em um painel. O usuario passa as coordenadas e eu desenho com drawLine a partir das coordenadas passadas

aí quando eu clico no botao "Desenhar", eu chamo o método repaint() pra esse meu painel
só que ele apaga o desenho antigo
como fazer pra manter tudo o que ja foi desenhado?

aí vão as classes pra qquer dúvida

import java.awt.Graphics;
import java.awt.Color;

import javax.swing.JPanel;

public class PainelDesenho extends JPanel {
   private int x1;
   private int y1;
   private int x2;
   private int y2;
   
   public PainelDesenho()   {
      setBackground(Color.BLACK);
   }
   
   public void paintComponent(Graphics g)   {
      super.paintComponent(g);
      
      g.setColor(Color.RED);
      g.drawLine(x1,y1,x2,y2);
   }

   public int getX1() {
      return x1;
   }

   public void setX1(int x1) {
      this.x1 = x1;
   }

   public int getX2() {
      return x2;
   }

   public void setX2(int x2) {
      this.x2 = x2;
   }

   public int getY1() {
      return y1;
   }

   public void setY1(int y1) {
      this.y1 = y1;
   }

   public int getY2() {
      return y2;
   }

   public void setY2(int y2) {
      this.y2 = y2;
   }
}
import java.awt.FlowLayout;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.JLabel;

public class PainelBotoes extends JPanel {
   private JButton botaoCirculo;
   private JTextField fieldX1;
   private JTextField fieldY1;
   private JTextField fieldX2;
   private JTextField fieldY2;
   private JLabel labelX1;
   private JLabel labelY1;
   private JLabel labelX2;
   private JLabel labelY2;
   
   private PainelDesenho painelDesenho;
   
   public PainelBotoes(PainelDesenho painelDesenho)   {
      this.painelDesenho = painelDesenho;
      
      setLayout(new FlowLayout());
      //setLayout(new BorderLayout(5,5));
      setBackground(Color.WHITE);
      
      botaoCirculo = new JButton("Desenhar Círculo");
      botaoCirculo.addActionListener(
         new ActionListener()   {
            public void actionPerformed(ActionEvent e)   {
               PainelBotoes.this.painelDesenho.setX1(Integer.parseInt(fieldX1.getText()));
               PainelBotoes.this.painelDesenho.setY1(Integer.parseInt(fieldY1.getText()));
               PainelBotoes.this.painelDesenho.setX2(Integer.parseInt(fieldX2.getText()));
               PainelBotoes.this.painelDesenho.setY2(Integer.parseInt(fieldY2.getText()));
               PainelBotoes.this.painelDesenho.repaint();
            }
         }
      );
      
      labelX1 = new JLabel("x1:");
      labelY1 = new JLabel("y1:");
      labelX2 = new JLabel("x2:");
      labelY2 = new JLabel("y2:");
      fieldX1 = new JTextField(5);
      fieldY1 = new JTextField(5);
      fieldX2 = new JTextField(5);
      fieldY2 = new JTextField(5);
      
      add(labelX1);
      add(fieldX1);
      add(labelY1);
      add(fieldY1);
      add(labelX2);
      add(fieldX2);
      add(labelY2);
      add(fieldY2);
      add(botaoCirculo);
   }
   
}

2 Respostas

brunogamacatao

Você vai ter que criar uma estrutura de dados para armazenar os pontos do seu desenho. Daí no seu método paint, você irá percorrer essa estrutura de dados desenhando os pontos dela.

SadNess

vix
que merda
achei que existia outra maneira

mas vou fazer isso mesmo então
vlw

Criado 20 de junho de 2006
Ultima resposta 20 de jun. de 2006
Respostas 2
Participantes 2