Bonjour Perluce
J'ai regardé ton code de façcon assez brève, je l'avoue
et je ne peux faire qu'une supposiiton sur ce qui ne va pas
à savoir le "Graphics g = getGraphics()" sur lequel tu bases
ton paint après.
Bon ceci j'ai repris une des petites applis que j'avais codé et
j'espère que tu y trouveras ce que tu veux...
Quand le curseur se met a bouger tt seul tu cliques et des points
apparaissent...
Cette appli est proche de celle dont tu as fait voir le code donc
ca devrait être ressemblant :
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
public class FenetreMath extends JFrame implements ActionListener
{
PanelMath panelMath = new PanelMath();
JButton jButton1 = new JButton();
JButton jButton2 = new JButton();
JLabel jLabel1 = new JLabel("Echelle : 1 unité <-> 20 px");
public static void main (String[] args)
{
FenetreMath fenetreMath = new FenetreMath();
}
public FenetreMath()
{
Dimension taille_ecran = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
int hauteur_ecran = (int)taille_ecran.getHeight();
int largeur_ecran = (int)taille_ecran.getWidth();
setTitle("Un peu de math ...");
setLocation((largeur_ecran / 2) - (175), (hauteur_ecran / 2) - (200));
setSize(350, 400);
setLayout(null);
panelMath.setBounds(20, 20, 300, 300);
jLabel1.setBounds(20, 330, 200, 20);
add(panelMath);
add(jLabel1);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
//JOptionPane.showMessageDialog(null, "Cliquez pour placer le premier point");
}
public void actionPerformed(ActionEvent e)
{
}
}
class PanelMath extends JPanel implements MouseListener
{
int coordXPoint1 = 0;
int coordYPoint1 = 0;
int coordXPoint2 = 0;
int coordYPoint2 = 0;
int coordXPoint3 = 0;
int coordYPoint3 = 0;
float coefDir1 = 0f;
float absOr1 = 0f;
float coefDir2 = 0f;
float absOr2 = 0f;
String eqDroite1 = "";
String eqDroite2 = "";
int pointToDrawX = 0;
int pointToDrawY = 0;
int etape = 0;
public PanelMath()
{
addMouseListener(this);
}
public void paint(Graphics g)
{
if (etape == 0)
{
g.setColor(new Color(255, 255, 255));
g.fillRect(0, 0, 300, 300);
g.setColor(new Color(0, 0, 0));
g.drawRect(0, 0, 299, 299);
g.drawLine(20, 150, 280, 150);
g.drawLine(150, 20, 150, 280);
g.drawLine(275, 145, 280, 150);
g.drawLine(275, 155, 280, 150);
g.drawLine(145, 25, 150, 20);
g.drawLine(155, 25, 150, 20);
g.drawString("O", 140, 162);
g.drawLine(165, 145, 170, 150);
g.drawLine(165, 155, 170, 150);
g.drawLine(145, 135, 150, 130);
g.drawLine(155, 135, 150, 130);
}
if (etape == 1)
{
g.setColor(new Color(0, 0, 0));
g.drawRect(coordXPoint1 + 150, (coordYPoint1 - 150) * -1, 1, 1);
}
if (etape == 2)
{
g.setColor(new Color(0, 0, 0));
g.drawRect(coordXPoint2 + 150, (coordYPoint2 - 150) * -1, 1, 1);
}
if (etape == 3)
{
g.setColor(new Color(0, 0, 0));
for (int i = 0; i < 300; i++)
{
for (int j = 0; j < 300; j++)
{
int newJ = (j - 150) * -1;
int newI = (i - 150);
if ((newJ - (coefDir1 * newI) - (absOr1 * 20)) < 0.5f && (newJ - (coefDir1 * newI) - (absOr1 * 20)) > -0.5f)
g.drawRect(i, j, 1, 1);
}
}
}
if (etape == 4)
{
g.setColor(new Color(0, 0, 0));
g.drawRect(coordXPoint3 + 150, (coordYPoint3 - 150) * -1, 1, 1);
}
if (etape == 5)
{
g.setColor(new Color(0, 0, 0));
for (int i = 0; i < 300; i++)
{
for (int j = 0; j < 300; j++)
{
int newJ = (j - 150) * -1;
int newI = (i - 150);
if ((newJ - (coefDir2 * newI) - (absOr2 * 20)) < 0.5f && (newJ - (coefDir2 * newI) - (absOr2 * 20)) > -0.5f)
g.drawRect(i, j, 1, 1);
}
}
}
if (etape > 6)
{
g.setColor(Color.red);
g.drawRect(pointToDrawX, pointToDrawY, 1, 1);
}
}
public String CalculEqDroite1()
{
coefDir1 = (float) ((float) (coordYPoint2 - coordYPoint1)) / ((float) (coordXPoint2 - coordXPoint1));
absOr1 = (float) ((coordYPoint1 - (coordXPoint1 * coefDir1)) / 20f);
return ("y = " + coefDir1 + "x + " + absOr1);
}
public String CalculEqDroite2()
{
coefDir2 = (float) (-1 / coefDir1);
absOr2 = (float) ((coordYPoint3 - (coordXPoint3 * coefDir2)) / 20f);
return ("y = " + coefDir2 + "x + " + absOr2);
}
public void mouseClicked(MouseEvent e)
{
String message = "";
if (etape == 0)
{
coordXPoint1 = e.getX() - 150;
coordYPoint1 = (e.getY() - 150) * -1;
message = "Cliquez pour placer le second point";
}
if (etape == 1)
{
coordXPoint2 = e.getX() - 150;
coordYPoint2 = (e.getY() - 150) * -1;
message = "Cliquez pour tracer la droite";
}
if (etape == 2)
{
eqDroite1 = CalculEqDroite1();
message = "L'équation de la première droite est " + eqDroite1 + "\nCliquez pour placer le point par lequel doit passer la perpendiculaire";
}
if (etape == 3)
{
coordXPoint3 = e.getX() - 150;
coordYPoint3 = (e.getY() - 150) * -1;
message = "Cliquez pour tracer la droite perpendiculaire";
}
if (etape == 4)
{
eqDroite2 = CalculEqDroite2();
RobotThread robotThread = new RobotThread(this);
message = "L'équation de sa perpendiculaire droite est " + eqDroite2;
}
if (etape >= 5)
{
pointToDrawX = (int) e.getX();
pointToDrawY = (int) e.getY();
}
etape++;
this.repaint();
//JOptionPane.showMessageDialog(null, message);
}
public void mousePressed(MouseEvent e)
{
}
public void mouseReleased(MouseEvent e)
{
}
public void mouseExited(MouseEvent e)
{
}
public void mouseEntered(MouseEvent e)
{
}
}
class RobotThread extends Thread
{
JPanel jPanel1;
public RobotThread(JPanel jPanel_arg)
{
jPanel1 = jPanel_arg;
this.start();
}
public void run()
{
try
{
Robot robot = new Robot();
for (int i = 0; i < 30; i++)
{
robot.mouseMove((int)jPanel1.getLocationOnScreen().getX() + (i * 10), (int)jPanel1.getLocationOnScreen().getY() + 120);
this.sleep(1000);
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
Bonne chance
Bonjour Perluce
J'ai regardé ton code de façcon assez brève, je l'avoue
et je ne peux faire qu'une supposiiton sur ce qui ne va pas
à savoir le "Graphics g = getGraphics()" sur lequel tu bases
ton paint après.
Bon ceci j'ai repris une des petites applis que j'avais codé et
j'espère que tu y trouveras ce que tu veux...
Quand le curseur se met a bouger tt seul tu cliques et des points
apparaissent...
Cette appli est proche de celle dont tu as fait voir le code donc
ca devrait être ressemblant :
Bonne chance