Ajouter un commentaire

Niroken

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

Filtered HTML

Plain text

CAPTCHA
Cette question permet de vérifier que vous n'êtes pas un robot spammeur :-)
 FFFF  V     V  M   M  Y   Y  W     W 
F V V MM MM Y Y W W
FFF V V M M M Y W W W
F V V M M Y W W W
F V M M Y W W