GUI

Status
Nicht offen für weitere Antworten.

magnum

Mitglied
Hallo Leute ,

Ich versuche die ganze Zeit ein Programm zu schreiben,
mit dem Ich zwei aufeinanderfolgend angeklickte Punkte mit einer Linie verbinde.
Was Ich nicht verstehe ,ist, wenn Ich einmal mit der Maus klicke , dann habe Ich nur
denn ersten Punt der(x,y, fehlt,fehlt) Koordinate aber nicht den Rest von dem.
Den ersten Punkt bekomme Ich durch die Funktionen getX() und getY() geliefert.
Ich würde mich freuen, wenn mir da Jemand helfen Könnte.

mfg

magnum

Code:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Test extends JFrame {

  Test() {
    super();

    this.setTitle("Herzlich Willkommen zu Swing");

		
    addMouseListener(new MyMouseListener());
    
    this.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
   }


	class MyMouseListener extends MouseAdapter{

	      public void mousePressed(MouseEvent event){

			Graphics g = getGraphics();
						
			int x=getX();
			int y=getY();
						
			//g.drawline(x,y,fehlt,fehlt);		
			//.......und nu
						
	      }
	}

  public static void main(String[] args) {

      Test fenster = new Test();
      fenster.setSize(300, 100);
      //fenster.setLocation(200, 100);
      fenster.setVisible(true);

  }


}


[/code]
 

Loep

Aktives Mitglied
Dann zähl doch einfach die gemachten Klicks mit und entscheid daran, ob du dir denn Punkt merkst oder alles hast um zu zeichne (z.B. so oder so ähnlich):
Code:
   class MyMouseListener extends MouseAdapter{
         clickCount = 1;

         public void mousePressed(MouseEvent event){
            if(clickCount == 1) {
              int x=getX();
              int y=getY();
              clickCount++;
            } else {
              Graphics g = getGraphics();
              g.drawline(x,y,getX(),getY());
              clickCount = 1;
            }
         }
   }
 

Drake

Bekanntes Mitglied
Hallo

vielleicht liegts ja am Stauder, aber so wie ich das sehe dürfte deine vorgeschlagene Variante nicht wie gewünscht funktionieren, da sich die Lebensdauer von int x,y doch nur auf den Klick beschränkt. Diese beiden Werte müssten doch eigentlich auch ausserhalb der mousePressed Methode gespeichert werden.

mfg
Drake
 

Loep

Aktives Mitglied
Natürlich, hast Recht. Ich schiebs mal einfach darauf, dass ich das direkt hier im Forum getippt hab ohne groß zu testen ;)

Code:
   class MyMouseListener extends MouseAdapter{
         clickCount = 1;
         int x;
         int y;

         public void mousePressed(MouseEvent event){
            if(clickCount == 1) {
              x =getX();
              y =getY();
              clickCount++;
            } else {
              Graphics g = getGraphics();
              g.drawline(x,y,getX(),getY());
              clickCount = 1;
            }
         }
   }

Versuch mal so..
 

magnum

Mitglied
Das geht nicht, weil sobald die Funktion mousePressed aufgerufen wird
bekommt getX() und getY() im if Teil den selben wert wie getX() und getY() im else Teil.
Somit bekomme Ich einen Punkt statt einer Linie.
Das ist ja auch mein Hauptproblem.
 

Loep

Aktives Mitglied
Hö? Aber es wird doch entweder der if-Teil ODER der else-Teil aufgerufen und somit nur eins der beiden getX/Y() ausgeführt!?!
 

magnum

Mitglied
Hallo Leute,

Ich habe mein problem gelöst.
Ich habe das event Objekt vor getX()/getY() vergessen, also statt event.getX() habe Ich
nur getX() eingetippt, deshalb hat es bei mir nicht funktioniert .
Also Loep das was Ich zuletzt geschrieben habe ist MÜLL!!!

Hier ist meine Lösung.
Es ist aber ein Linienzug und kein Linie.
Code:
public void mousePressed(MouseEvent event){

						Graphics g = getGraphics();

						if(clickCount == 1){

								x = event.getX();
								y = event.getY();
								clickCount++;
								i++;
								if(i==2){
									g.drawLine(event.getX(),event.getY(),x1,y1);
									i=1;
								}
								System.out.println(i);
						}
						else{
								x1=event.getX();
								y1=event.getY();
								g.drawLine(x,y,x1,y1);
								clickCount=1;

						}//if-else
			}//mousePressed
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben