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.
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]
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!