getX() und getY()

Status
Nicht offen für weitere Antworten.
G

Gast

Gast
Mein Quelltext:

public void mouseClicked(MouseEvent e)
{
int x=e.getX();
int y=e.getY();
}


wenn ich auf einen gezeichneten Kreis klicke, soll ein größerer Kreis drum gezeichnet werden.

Aber wenn ich das Programm starte brauche ich gar nicht mit der Maus klicken die Mausposition ist von vorner rein 0,0.

Und deswegen wird der größere Kreis immer an der Position 0,0 gezeichnet.

Würde mich auf Antworten freuen.
Code:
 
B

Beni

Gast
Sorry, aber könntest Du vielleicht etwas mehr Quellcode posten?

Man findet durch betrachten des Nummernschildes ja auch nicht heraus, dass das Velo einen Reifen ohne Luft hat...
 
G

Gast

Gast
Code:
So das ist die If - Abfrage wenn ich auf den kleinen Kreis klicke soll ein Größerer Kreis drum herum gezeichnet werden,


Variablen:

ix = Mausposition X
iy = Mausposition Y


public void paint(Graphics g)
{
	g.setColor(cFarbe);			
	g.fillOval(X+100,Y+100,14,14);	// der Kreis auf dem man klicken soll

	if(ix<X+14 && ix>(X-14) && iy>Y-14 && iy<(14))
		{
			g.setColor(Color.red);
			g.drawOval(ix+100,ix+100,14,14);// das ist noch mal ein kleinerer ist nicht von bedeutung

			g.setColor(Color.black);
			g.drawOval(ix+100,iy+100,196,196);// das ist der größerer Kreis
		}
}

Ich hiffe der Quellcode reicht
[/code]
 
B

Beni

Gast
Mir jedenfalls nicht :D :lol:

Poste doch einfach genug, damit man es kopieren, kompilieren und ausprobieren kann (oder bist du gerade an einem Top-Secret-Project?). Dann kann man auch am besten den Bug finden.

Mit anderen Worten: der Sattel ist recht interessant, aber der Mechaniker will das ganze Fahrrad sehen :wink:

P.S. ix und x sind aber nicht dieselben Variablen ???:L
 

pogo

Bekanntes Mitglied
dein problem ist glaube ich auch das paint schon bei der initialisierung aufgrufen wird.
vielleicht funktioniert es ja, wenn du erst später einen kreis einfügst und dann per repaint
 
G

Gast

Gast
Code:
// erste Klasse


import java.awt.*;
import java.awt.event.*;
import java.applet.*;// Import befehle
import java.net.*;
import java.awt.Graphics;

public class start extends Frame implements MouseListener, ActionListener
{
	Image img;
	private Image dbImage;
	private Graphics dbGraphics;

	int fensterX=1025;
        int fensterY=730;
	kreis k1 = new kreis(250, 100, Color.blue, "B");

	public start (String title)
	{
		super ();
		addWindowListener(new WindowAdapter()
		{
			public void windowClosing (WindowEvent evt) {System.exit(0);}});
		setSize(fensterX,fensterY);
		setBackground(Color.white);
		setTitle("dhdr");
		setLayout(new BorderLayout());
		addMouseListener(this);
		setVisible(true);
	}
	public static void main (String[] args)
	{
		new kreis("start");
	}
	public void actionPerformed(ActionEvent e)
	{

	}
	public void mouseReleased(MouseEvent e)
	{

	}
	public void mouseClicked(MouseEvent e)				
	{
		int x=e.getX();									
		int y=e.getY();									
		k1.bewegungsPhase(x,y);
	}
	public void mouseEntered(MouseEvent e)
	{

	}
	public void mouseExited(MouseEvent e)
	{

	}
	public void mousePressed(MouseEvent e)
	{

	}
	public void paint(Graphics g)
	{
		k1.paint(g);
	}
}





// Zweite Klasse


import java.applet.*;// Import befehle
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.awt.Graphics;

public class Kreis2
{
	Color cFarbe;
	String s;
	int X=200;
	int Y=200;
	int ix;
	int iy;

	public Kreis2(int Xi,int Yi, Color C, String S)
	{
		s=S;
		cFarbe=C;
		X=Xi;
		Y=Yi;
	}
	public void kreis(int x, int y)
	{
		ix=x;
		iy=y;
	}
	public void paint(Graphics g)
	{
		g.setColor(cFarbe);
		g.fillOval(X+100,Y+100,14,14);

		if(ix<X+14 && ix>(X-14) && iy>Y-14 && iy<(14))
		{
			g.setColor(Color.red);
			g.drawOval(X+100,Y+100,14,14);

			g.setColor(Color.black);
			g.drawOval(ix+100,iy+100,196,196);
		}
	}
}
[/code]
 
B

Beni

Gast
Hab ein paar sachen umbenannt, ums bei mir einfacher zum laufen zu bringen :D , hoffe das verwirrt dich nicht (aber ich muss eine Datei weniger machen... )

Das Problem ist wohl die if-Abfrage, bei der ein Y verlorenging:
if(ix<X+14 && ix>(X-14) && iy>Y-14 && iy<(14))


Dann hab ich noch ein repaint reingeflickt (in die mouseClicked-Methode), und die Werte kurz abgeändert (kannst du schnell rückgängig machen). Jetzt kann man einfach auf den blauen Punkt klicken und...

Code:
public class Main extends Frame implements MouseListener, ActionListener
{
   /*Image img;
   private Image dbImage;
   private Graphics dbGraphics;*/

   int fensterX=1025;
        int fensterY=730;
   Kreis k1 = new Kreis(250, 100, Color.blue, "B");

   public Main (String title)
   {
      super ();
      addWindowListener(new WindowAdapter()
      {
         public void windowClosing (WindowEvent evt) {System.exit(0);}});
      setSize(fensterX,fensterY);
      setBackground(Color.white);
      setTitle("dhdr");
      setLayout(new BorderLayout());
      addMouseListener(this);
      setVisible(true);
   }
   public static void main (String[] args)
   {
      new Main("start");
   }
   public void actionPerformed(ActionEvent e)
   {

   }
   public void mouseReleased(MouseEvent e)
   {

   }
   public void mouseClicked(MouseEvent e)            
   {
      int x=e.getX();                           
      int y=e.getY();                           
      k1.kreis( x, y );
      
      repaint();
   }
   public void mouseEntered(MouseEvent e)
   {

   }
   public void mouseExited(MouseEvent e)
   {

   }
   public void mousePressed(MouseEvent e)
   {

   }
   public void paint(Graphics g)
   {
      k1.paint(g);
   }
}





// Zweite Klasse



class Kreis
{
   Color cFarbe;
   String s;
   int X=200;
   int Y=200;
   int ix;
   int iy;

   public Kreis(int Xi,int Yi, Color C, String S)
   {
      s=S;
      cFarbe=C;
      X=Xi;
      Y=Yi;
   }
   public void kreis(int x, int y)
   {
      ix=x;
      iy=y;
   }
   public void paint(Graphics g)
   {
      g.setColor(cFarbe);
      g.fillOval(X-7,Y-7,14,14);  // ############# -7 / -7 damit X;Y in der Mitte ist

      
      if(ix<X+14 && ix>(X-14) && iy>Y-14 && iy<Y+14 )  // ######## ebenfalls Werte klein wenig verändert
      {
         g.setColor(Color.red);
         g.drawOval(X-7,Y-7,14,14); // ######## ebenfalls Werte klein wenig verändert

         g.setColor(Color.black);
         g.drawOval(ix-98,iy-98,196,196); // ######## ebenfalls Werte klein wenig verändert
      }
   }
}
 

pogo

Bekanntes Mitglied
menno beni warst de einfach schneller wollte es auch gerade posten. hat dies gerade fertig gestellt
 
B

Beni

Gast
schuldig.gif


harharhar

:)
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben