Duvia quanto a procedimento de REPAINT() neste programa de plano cartesiano

Boa tarde!

estou com uma duvida quanto ao programa que irei aprensentar abaixo, desenvolvi um sisitema para ligar pontos ao sistema cartesiano, entre 10 a -10 em x e Y gostaria de chamar um evento no jbutton para que quando o usuaario entrar com os dados e clicar no botao ele crie um evento para chamar a os pontos e ligar com o novo paramentro dado, alguem pode me ajudar

 package TrabPc;
 import java.awt.BasicStroke; 
 import java.awt.BorderLayout; 
 import java.awt.Color; 
 import java.awt.Graphics; 
 import java.awt.Graphics2D; 
 import java.awt.RenderingHints;   
 import javax.swing.JComponent; 
 import javax.swing.JFrame; 
 import javax.swing.JLabel;
 import javax.swing.JPanel;
 import java.text.ParseException;
 import javax.swing.JButton;
 import java.awt.event.ActionEvent; 
 import java.awt.event.ActionListener; 
 import java.awt.event.FocusEvent; 
 import java.awt.event.FocusListener;
 import javax.swing.JFormattedTextField;
 import javax.swing.text.MaskFormatter;

 
 


public class TrabPc extends JComponent implements ActionListener{
   
   int px = 0;
   int py = 0;

 private static final BasicStroke STROKE_FINO = new BasicStroke(0.1f); 
 
 JFormattedTextField edtx = new JFormattedTextField();
 JFormattedTextField edty = new JFormattedTextField();
 private JPanel p = new JPanel();
 private JPanel quadro = new JPanel();
 public JFrame f = new JFrame("Plano Cartesiano");
 private JLabel lbl = new JLabel("Valor Eixo X: ");
 private JLabel lbl2 = new JLabel("Valor eixo Y: ");
 private JButton btn = new JButton("Mostrar pontos");
 public  int eixoX[] = new int[20];
 public  int eixoY[] = new int[20];
 
 

 
 
  public void paintComponent(Graphics g) {
        
         //opcoes do traço 
         //g.setStroke(STROKE_FINO); 
         g.setColor(Color.BLACK); 
       //  g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 
  
         //XOR só pra aparecer melhor 
         g.setXORMode(Color.white);
         //Eixo X
         g.drawLine(20, 287, 565, 287); 
         //Eixo Y
         g.drawLine(293,80, 293, 540); 
        
         g.setPaintMode(); 
        
         //Definindo pontos para o plano cartesiano
         int ptsX = 560;
         int ptsY = 540;
         for (int xcont=0 ; xcont<20 ; xcont++){
             eixoX[xcont] = ptsX;
             eixoY[xcont] = ptsY;
             ptsX -=28;
             ptsY -=24;
             g.drawLine(eixoX[xcont], 285, eixoX[xcont], 290);
             g.drawLine(292, eixoY[xcont], 297, eixoY[xcont]);
             
          //Ligando ao ponto Y
         g.drawLine(eixoX[px],287,eixoX[px], eixoY[py]);
         //Ligando ao ponto X
         g.drawLine(eixoX[px], eixoY[py], 293,eixoY[py]);
         //desenhndo Elipse de encontro dos pontos
         g.fillOval(eixoX[px]-2, eixoY[py]-2, 5, 5);
         } 
  }         

 
 
             
 


 
 private void MontaForm()throws ParseException{
  
   
   TrabPc form = new TrabPc();
 
   quadro.add(form) ;
   quadro.repaint();
   btn.addActionListener(this);     
   edtx.setColumns(3);
   edty.setColumns(3);
   p.setSize(600, 50);
   p.setBackground(Color.WHITE);
   p.add(lbl);
   p.add(edtx);
   p.add(lbl2);
   p.add(edty);
   p.add(btn);
   f.getContentPane().setLayout(new BorderLayout());
   f.getContentPane().add(p);
   f.getContentPane().add(form, BorderLayout.CENTER);
   f.pack();
   f.setDefaultCloseOperation(f.EXIT_ON_CLOSE);
   f.setVisible(true);
   f.setSize(600, 600);
  
 }

 
   
 public void actionPerformed(ActionEvent e) {          
       px = Integer.parseInt(edtx.getText()) ;  
       py = Integer.parseInt(edty.getText()) ;  
       repaint(); 
      }  
    


 public static void main(String[]args)throws ParseException{
    new TrabPc().MontaForm();
 }
 

 
 }

o mais dificil ja foi feito q é o desenvolvimento do algoritimo como nao sou mto bom em java gostaria de saber como chamar os eventos e o uso destes metodos como o repaint() etc.

Qual é a sua dúvida, exatamente? Você já está usando o actionListener, já chama repaint e já sobrescreve paintComponent.
Dá uma olhada nesse tutorial:
http://java.sun.com/products/jfc/tsc/articles/painting/index.html#swing

E nesse aqui também:
http://java.sun.com/j2se/1.5.0/docs/guide/2d/spec/j2d-bookTOC.html

Outra coisa, você não pode alterar as cores e o estado do objeto graphics recebido no parâmetro. Faça uma cópia dele usando o método create:

[code]@Override
public void paintComponent(Graphics graphics) {
//Faz a cópia
Graphics2D g = (Graphics2D) graphics.create();

//O resto do seu método vai aqui

//Libera a cópia
g.dispose();
}[/code]

eu quero que, quando o usuario digita dois pontos entre dez negativo e dez positivo ele gere os pontos no plano cartesiano quando clicar no Jbutton deu pra pegar a ideia?

cheguei a ler o que voce me passou sobre a diferença de repaint entre o swing e AWT. mas sou leigo em java, gostaria que pudessem me excalresser esta duvida.

[quote=erickb]eu quero que, quando o usuario digita dois pontos entre dez negativo e dez positivo ele gere os pontos no plano cartesiano quando clicar no Jbutton deu pra pegar a ideia? e o problema é que mesmo quando eu clicco no botao ele nao usa o repaint com os parametros que serao atualizados. se voce cehgar a compilar o programa ira entender melhor o procedimento.

cheguei a ler o que voce me passou sobre a diferença de repaint entre o swing e AWT. mas sou leigo em java, gostaria que pudessem me excalresser esta duvida.[/quote]

alguem pode me dar uma luz por favor! desculpe o flood

Eu dei uma mechida no código, tá desenhando uma linha na tela, mas não nos pontos corretos, cabe a ti agora a pensar como arrumar isso:
Boa sorte!

import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;

import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import java.text.ParseException;
import javax.swing.JButton;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFormattedTextField;

public class Teste extends JComponent implements ActionListener {

	int px = 0;
	int py = 0;

	private static final BasicStroke STROKE_FINO = new BasicStroke(0.1f);

	JFormattedTextField edtx = new JFormattedTextField();
	JFormattedTextField edty = new JFormattedTextField();
	private Teste form;
	private JPanel p = new JPanel();
	private JPanel quadro = new JPanel();
	public JFrame f = new JFrame("Plano Cartesiano");
	private JLabel lbl = new JLabel("Valor Eixo X: ");
	private JLabel lbl2 = new JLabel("Valor eixo Y: ");
	private JButton btn = new JButton("Mostrar pontos");
	public int eixoX[] = new int[20];
	public int eixoY[] = new int[20];

	public void paintComponent(Graphics graphics) {
		Graphics2D g = (Graphics2D) graphics.create();  
		
		// opcoes do traço
		// g.setStroke(STROKE_FINO);
		g.setColor(Color.BLACK);
		// g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
		// RenderingHints.VALUE_ANTIALIAS_ON);

		// XOR só pra aparecer melhor
		g.setXORMode(Color.white);
		// Eixo X
		g.drawLine(20, 287, 565, 287);
		// Eixo Y
		g.drawLine(293, 80, 293, 540);

		g.setPaintMode();

		// Definindo pontos para o plano cartesiano
		int ptsX = 560;
		int ptsY = 540;
		for (int xcont = 0; xcont < 20; xcont++) {
			eixoX[xcont] = ptsX;
			eixoY[xcont] = ptsY;
			ptsX -= 28;
			ptsY -= 24;
			g.drawLine(eixoX[xcont], 285, eixoX[xcont], 290);
			g.drawLine(292, eixoY[xcont], 297, eixoY[xcont]);

			// Ligando ao ponto Y
			g.drawLine(eixoX[px], 287, eixoX[px], eixoY[py]);
			// Ligando ao ponto X
			g.drawLine(eixoX[px], eixoY[py], 293, eixoY[py]);
			// desenhndo Elipse de encontro dos pontos
			g.fillOval(eixoX[px] - 2, eixoY[py] - 2, 5, 5);
		}
		
		g.dispose();
	}

	private void MontaForm() throws ParseException {
		form = new Teste();
		
		quadro.add(form);
		btn.addActionListener(this);
		edtx.setColumns(3);
		edty.setColumns(3);
		p.setSize(600, 50);
		p.setBackground(Color.WHITE);
		p.add(lbl);
		p.add(edtx);
		p.add(lbl2);
		p.add(edty);
		p.add(btn);
		f.getContentPane().setLayout(new BorderLayout());
		f.getContentPane().add(p);
		f.getContentPane().add(form, BorderLayout.CENTER);
		f.setDefaultCloseOperation(f.EXIT_ON_CLOSE);
		f.setVisible(true);
		f.setSize(600, 600);
		f.repaint();
		f.validate();
		f.setLocationRelativeTo(null);
	}

	public void actionPerformed(ActionEvent e) {
		px = Integer.parseInt(edtx.getText());
		py = Integer.parseInt(edty.getText());
		
		Graphics2D g = (Graphics2D) form.getGraphics();
		g.drawLine(px, py, 270, 250);
		g.dispose();
	}

	public static void main(String[] args) throws ParseException {
		new Teste().MontaForm();
	}

}

kra acho q nao deu mto certo nao to vendo a classe awt para os componentes dexo o programa meio estranho.

Como? Esse programa que eu te mandei compila e executa, o único problema é que as linhas não estão sendo colocadas no lugar correto do plano cartesiano, vc vai ter que achar o número ideal para somar ao número que o usuário colocar nos fields.

Se o seu programa não está compilando talvez seja porcausa do nome da classe que eu mudei de TrabPc para Teste. Volte o nome para TrabPc ou renomeie o arquivo para Teste.java


package TrabPc;
import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;

import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import java.text.ParseException;
import javax.swing.JButton;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFormattedTextField;

public class TrabPc extends JComponent implements ActionListener {

	int px = 0;
	int py = 0;

	private static final BasicStroke STROKE_FINO = new BasicStroke(0.1f);

	JFormattedTextField edtx = new JFormattedTextField();
	JFormattedTextField edty = new JFormattedTextField();
	private TrabPc form;
	private JPanel p = new JPanel();
	private JPanel quadro = new JPanel();
	public JFrame f = new JFrame("Plano Cartesiano");
	private JLabel lbl = new JLabel("Valor Eixo X: ");
	private JLabel lbl2 = new JLabel("Valor eixo Y: ");
	private JButton btn = new JButton("Mostrar pontos");
	final  public int eixoX[] = new int[20];
	final public int eixoY[] = new int[20];

	public void paintComponent(Graphics graphics) {
		Graphics2D g = (Graphics2D) graphics.create();  
		
		// opcoes do traço
		// g.setStroke(STROKE_FINO);
		g.setColor(Color.BLACK);
		// g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
		// RenderingHints.VALUE_ANTIALIAS_ON);

		// XOR só pra aparecer melhor
		g.setXORMode(Color.white);
		// Eixo X
		g.drawLine(20, 287, 565, 287);
		// Eixo Y
		g.drawLine(293, 80, 293, 540);

		g.setPaintMode();

		// Definindo pontos para o plano cartesiano
		int ptsX = 560;
		int ptsY = 540;
		for (int xcont = 0; xcont < 20; xcont++) {
			eixoX[xcont] = ptsX;
			eixoY[xcont] = ptsY;
			ptsX -= 28;
			ptsY -= 24;
			g.drawLine(eixoX[xcont], 285, eixoX[xcont], 290);
			g.drawLine(292, eixoY[xcont], 297, eixoY[xcont]);


		}
		
		g.dispose();
	}

	private void MontaForm() throws ParseException {
		form = new TrabPc();
		
		quadro.add(form);
		btn.addActionListener(this);
		edtx.setColumns(3);
		edty.setColumns(3);
		p.setSize(600, 50);
		p.setBackground(Color.WHITE);
		p.add(lbl);
		p.add(edtx);
		p.add(lbl2);
		p.add(edty);
		p.add(btn);
		f.getContentPane().setLayout(new BorderLayout());
		f.getContentPane().add(p);
		f.getContentPane().add(form, BorderLayout.CENTER);
		f.setDefaultCloseOperation(f.EXIT_ON_CLOSE);
		f.setVisible(true);
		f.setSize(600, 600);
		//f.repaint();
		f.validate();
		f.setLocationRelativeTo(null);
	}

	public void actionPerformed(ActionEvent e) {
		px = Integer.parseInt(edtx.getText());
		py = Integer.parseInt(edty.getText());
		//repaint();
		Graphics2D g = (Graphics2D) form.getGraphics();
		// Ligando ao ponto Y
		g.drawLine(eixoX[px], 287, eixoX[px], eixoY[py]);
	        // Ligando ao ponto X
		g.drawLine(eixoX[px], eixoY[py], 293, eixoY[py]);
		// desenhndo Elipse de encontro dos pontos
		g.fillOval(eixoX[px] - 2, eixoY[py] - 2, 5, 5);
		g.dispose();
	}

	public static void main(String[] args) throws ParseException {
		new TrabPc().MontaForm();
	}

}

ehhe realmente e uma idiotice minha ahah rodou legal tenta interpretar o que eu fiz, no metodo que esta no action listener misteriosamente os arrays q sao constantes recebem o valor zero! nao sei como sendo que elas sao atribuidas antes! da uma olhada ae e obrigadaooo!! pela ideia!