Probleme beim Zeichnen einer Geraden

Status
Nicht offen für weitere Antworten.

kulturfenster

Bekanntes Mitglied
Hallo,
Ich habe die Aufgabe, eine Gerade zu zeichnen, die durch 2 Clicks definiert wird. Dazu hab ich eine Punkt-Klasse erstellt, die mir die beiden Punkt liefern soll, und eine Gerade-Klasse, welche mir die Punkte verbinden und die Gerade zeichnen soll.

Hier mein Versuch:

Code:
package geradeZeichner;

import java.awt.geom.Line2D;
import java.awt.Graphics2D;
import java.awt.Graphics;
import javax.swing.JComponent;

public class Zeichner extends JComponent{

	private Line2D.Double l;
	private int x1;
	private int x2;
	private int y1;
	private int y2;
	
	public void paintComponent(Graphics g)
	{
		Graphics2D g2 = (Graphics2D) g;
		l = new Line2D.Double(x1,y1,x2,y2);
		g2.draw(l);
	}
	
	public void draw1(int x1, int y1)
	{
		this.x1 = x1;
		this.y1 = y2;
		repaint();
	}
	
	public void draw2(int x2, int y2)
	{
		this.x2 = x2;
		this.y2 = y2;
		repaint();
	}
	
}

Code:
package geradeZeichner;

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.*;

public class Punkter {

	public static void main(String[] args)
	{
		JFrame frame = new JFrame("Zeichner");
		JPanel panel = new JPanel();
		final Zeichner z = new Zeichner();
		
		class Punkt1 implements MouseListener
		{
			public void mouseClicked(MouseEvent event)
			{
				int x1 = event.getX();
				int y1 = event.getY();
				z.draw1(x1, y1);
			}
			
			public void mousePressed(MouseEvent event) {}
			public void mouseReleased(MouseEvent event) {}
			public void mouseEntered(MouseEvent event) {}
			public void mouseExited(MouseEvent event) {}
		}
		
		class Punkt2 implements MouseListener
		{
			public void mouseClicked(MouseEvent event)
			{
				int x2 = event.getX();
				int y2 = event.getY();
				z.draw1(x2, y2);
			}
			
			public void mousePressed(MouseEvent event) {}
			public void mouseReleased(MouseEvent event) {}
			public void mouseEntered(MouseEvent event) {}
			public void mouseExited(MouseEvent event) {}
		}
		
		MouseListener listener1 = new Punkt1();
		MouseListener listener2 = new Punkt2();
		
		z.addMouseListener(listener1);
		z.addMouseListener(listener2);
		
		frame.add(z);
		
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setSize(300,300);
		frame.setVisible(true);
	}
}
Das Problem ist, dass zwar ein Strich gezeichnet wird, sich dieser aber aber oberen Rand des Frames befindet. Der 2. Click wird zudem ignoriert.

Wo liegt der Fehler?? Ich nehme an, ich habe beim Anfügen der Mouselistener einen Murks gemacht. Leider fehlt mir das Wissen, um den Fehler zu erkennen.

Vielen Dank und schon mal schöne Pfingsten!
 

Leroy42

Top Contributor
Code:
z.draw1(x2, y2);

Sollte das nicht draw2 in der Klasse Punkt2 sein?
 

kulturfenster

Bekanntes Mitglied
ah ja, klar!

Der Fehler ist leider damit nicht behoben, sondern es werden nur die eigentlich schwächen des Programms aufgezeigt... :cry:
Bei jedem Click bekomme ich nun einen horizontalen Strich mit der Länge der Differenz der Y-Werte, was ich mir leider nicht erklären kann. Wieso werden wie X-Werte nicht berücksichtigt?
 
S

SlaterB

Gast
hast du überhaupt keinen Willen, das ganze selber zu lösen?

mit einfachen Mitteln wie
System.out.println("zeiche Linie: x1: "+x1+", y1: "+y1+", x2: "+x2+", y2: "+y2);
in paintComponent und
System.out.println("neuer Punkt2: x2: " + x2 + ", y2: " + y2);
usw in den MouseListenern kannst du doch bis auf den letzten Millimeter herausfinden was das Programm wann genau tut,
nix einfacher als das..

einen Tippfehler bei den Variablenzuweisungen hast du irgendwo
(Suchaufgabe wenn du sonst schon nix alleine machst...)

und das Hauptproblem natürlich:
wieso sollte Java dafür sorgen, dass mal der eine und mal der andere MouseListener aktiv wird?
es werden selbstverständlich immer beide Listener aktiv,

wenn du nicht den Tippfehler bei den Variablenzuweisungen hättest, dann würden immer beide Punkte die gleichen Werte haben und nur ein Punkt gezeichet
(eine Linie der Länge 1 Pixel)
 

Marco13

Top Contributor
Nur mal so aus Neugier: Wenn du jetzt die Aufgabe hättest, eine Poly-Linie zu zeichnen (also eine Linie, die aus beliebige vielen Segmenten besteht), würdest du dann Methoden
public void draw1(int x1, int y1)
bis
public void draw1000(int x1000, int y1000)
und Klassen
class Punkt1 implements MouseListener
bis
class Punkt1000 implements MouseListener
erstellen, in der Hoffnung, dass der Benutzer zu faul ist, mehr als 1000 mal zu klicken?
 

Leroy42

Top Contributor
Ein Hinweis:

Du benutzt nur einen Listener und merkst
dir ineiner Instanzvariablen (boolean bietet sich da an)
ob du gerade den Anfang oder das
Ende der Linie klickst.

Wesentlich bessere Vorgehensweise:

Du registrierst noch einen MouseMotionListener
und zeichnest in der mouseDragged-Methode.

mousePressed: Anfangspunkt merken
mouseDragged: Endpunkt merken und SOFORT (repaint) zeichnen
mouseReleased: Anfang und Ende FIX machen, um die Gerade
in der paint-Methode immer wieder
(bei Bedarf) zeichnen zu lassen
 

kulturfenster

Bekanntes Mitglied
hmm, ok, ich sehe das Problem, dass meine beiden Listener gleichzeitig aufgerufen werden. Meine Linie endet in einem Punkt.
Leider ist es mir nicht gelungen, die Listener zeitlich versetzt aufzurufen. Eine Instanzvaribale konnte ich auch nicht ins Spiel bringen, da die inneren Klassen bekanntlich auch auf äussere Variblen zurückgreifen können, diese aber nicht verändern. Mein Counter, mit dem ich die Listener zu zählen versuchte, war also nutzlos.

Kann mir jemand einen weiterführenden Tipp geben?
 
S

SlaterB

Gast
ein Listener ist ein Objekt wie jedes andere,

schreib dafür eine eigene Klasse,
dann brauchst du dir über komische Argumente wie
'äussere Variblen zurückgreifen können, diese aber nicht verändern' (??)
gar nicht erst Gedanken zu machen

im Listener dann mit einem boolean-Flag oder Counter die Ereignisse unterscheiden,
was sollte da ein Problem sein?

flag true/falsch wechselnd, oder Counter gerade Zahlen/ ungerade Zahlen

-------

die Variante von Leroy wäre anspruchsvoller und inhaltlich anders (Maus gedrückt halten um zu zeichen)
aber auch möglich (die Stunden, bis du das begriffen hast, musst du dann aber Leroy nerven ;) )
 

Leroy42

Top Contributor
SlaterB hat gesagt.:
die Stunden, bis du das begriffen hast, musst du dann aber Leroy nerven
:shock:
Dann komm ich dem mal zuvor:

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

public class Gerade extends JPanel {
	int xAnf, yAnf;
	int xEnd, yEnd;
	
	public Gerade() {
		addMouseListener(new MouseAdapter() {
			public void mousePressed(MouseEvent e) {
				xAnf = xEnd = e.getX();
				yAnf = yEnd = e.getY();
				repaint();
			}});
		addMouseMotionListener(new MouseMotionAdapter() {
			public void mouseDragged(MouseEvent e) {
				xEnd = e.getX();
				yEnd = e.getY();
				repaint();
			}});
	}
	protected void paintComponent(Graphics g) {
		super.paintComponent(g);
		g.drawLine(xAnf, yAnf, xEnd, yEnd);
	}

	public static void main(String[] args) {
		JFrame f = new JFrame("Gerade");
		f.getContentPane().add(new Gerade());
		f.setDefaultCloseOperation(f.EXIT_ON_CLOSE);
		f.setSize(400, 400);
		f.setLocationRelativeTo(null);
		f.setVisible(true);
	}
}

Fragen dazu erwünscht! :D
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Projekte in IDE untereinander sharen / Probleme beim Build Java Basics - Anfänger-Themen 8
T Probleme beim Import eines Git-Repos Java Basics - Anfänger-Themen 2
N Probleme beim printen von Arrays durch for Schleife Java Basics - Anfänger-Themen 3
tom.j85 TicTacToe - probleme beim Casten Java Basics - Anfänger-Themen 6
D Probleme beim Kompelieren mache ich etwas falsch ? Java Basics - Anfänger-Themen 3
K Probleme beim Programm schreiben - Lesen von Dateiinhalten -zaehlen von Wörtern/ Buchstaben Java Basics - Anfänger-Themen 4
M Probleme beim aktualisieren eines JPanels Java Basics - Anfänger-Themen 7
J Probleme beim Array ausgeben Java Basics - Anfänger-Themen 4
M Probleme beim verwenden von Packages Java Basics - Anfänger-Themen 6
G Methoden Probleme beim Methodenaufruf Java Basics - Anfänger-Themen 2
M Array mit eigenem Datentyp probleme beim übergeben Java Basics - Anfänger-Themen 6
G Probleme beim casten von double zu int Java Basics - Anfänger-Themen 3
J Probleme beim schreiben von Dateien Java Basics - Anfänger-Themen 5
A Probleme beim zykl. aktulisieren von Daten in JTable Java Basics - Anfänger-Themen 3
M Erste Schritte Probleme beim Verknüpfen von Methoden Java Basics - Anfänger-Themen 15
A Probleme beim Methodenaufruf von Object[] ! Java Basics - Anfänger-Themen 12
A Probleme beim Methodenaufruf von char[] ! Java Basics - Anfänger-Themen 10
D JTable Probleme beim Sortieren von Zahlen. Java Basics - Anfänger-Themen 6
M OOP Probleme beim Funktionsaufruf, Java OpenCV Java Basics - Anfänger-Themen 0
X Probleme beim rekursiven Durchsuchen von Verzeichnissen Java Basics - Anfänger-Themen 1
B Probleme beim einlesen einer short variablen für einen Array Java Basics - Anfänger-Themen 1
A LinkedList: Probleme beim Auslesen Java Basics - Anfänger-Themen 2
F Probleme beim Übersetzen Java Basics - Anfänger-Themen 7
O Probleme beim import von Projekten in Eclipse Java Basics - Anfänger-Themen 7
C OOP Probleme beim Addieren von Arrays Java Basics - Anfänger-Themen 4
N Probleme beim entfernen eines JPanels Java Basics - Anfänger-Themen 4
J Probleme beim JRadioButton Java Basics - Anfänger-Themen 2
S Klasse properties - Probleme beim umwandeln Java Basics - Anfänger-Themen 3
M Input/Output Probleme beim Parsen von CSV und TXT Dateien Java Basics - Anfänger-Themen 7
C Probleme beim Array Java Basics - Anfänger-Themen 6
G Probleme beim HTML auslesen Java Basics - Anfänger-Themen 6
N Probleme beim Rechnen mit Integer und double Java Basics - Anfänger-Themen 4
T Probleme beim casten Java Basics - Anfänger-Themen 9
C Input/Output Probleme beim .jar erstellen Java Basics - Anfänger-Themen 5
M Klassen Probleme beim Debuggen - Datentypkonvertierung - Speichern in Datei Java Basics - Anfänger-Themen 7
W Probleme beim Wiedereinstieg Java Basics - Anfänger-Themen 25
P Interpreter-Fehler Probleme beim Ausführen einer Jar Datei Java Basics - Anfänger-Themen 2
F MVC -> Probleme beim Controller Java Basics - Anfänger-Themen 6
0 Log4J Probleme beim einlesen der Log datei Java Basics - Anfänger-Themen 2
F Probleme beim umwandeln von String in Int Java Basics - Anfänger-Themen 10
M Kontaktbuch - Probleme beim Input Java Basics - Anfänger-Themen 3
H Probleme beim erzeugen einer Headerdatei mit javah Java Basics - Anfänger-Themen 3
T Interpreter-Fehler Probleme beim .jar ausführen mit JRE 64bit Java Basics - Anfänger-Themen 9
M Probleme beim Beenden eines Threads Java Basics - Anfänger-Themen 25
A Probleme beim erstellen einer lauffähigen jar Java Basics - Anfänger-Themen 3
A Probleme beim IntervallCheck Java Basics - Anfänger-Themen 4
M Probleme beim Aufruf von Listener in anderer Klasse Java Basics - Anfänger-Themen 9
R Probleme mit NullPointer beim Mp3 abspielen (JMF) Java Basics - Anfänger-Themen 21
I Probleme beim Laden einer .gif-Datei. Java Basics - Anfänger-Themen 8
I Probleme beim Laden eins BufferedImage Java Basics - Anfänger-Themen 8
Sebi Probleme beim Kompilieren Java Basics - Anfänger-Themen 11
I Probleme beim adden von Elementen in einer ArrayList Java Basics - Anfänger-Themen 10
C Probleme beim casten und Objekt zugriff Java Basics - Anfänger-Themen 12
L Probleme beim Ausführen des Programms Java Basics - Anfänger-Themen 9
N Probleme beim abfangen von fehlern Java Basics - Anfänger-Themen 4
B kleine Probleme beim auslesen einer m3u Datei Java Basics - Anfänger-Themen 3
S Probleme beim Umwandeln von Long nach Int Java Basics - Anfänger-Themen 4
G Probleme beim Zufügen eines JLabels Java Basics - Anfänger-Themen 18
M Probleme beim Jar erstellen Java Basics - Anfänger-Themen 7
M Probleme beim Objekzugriff auf andere Klasse: NullPointerExc Java Basics - Anfänger-Themen 5
I Probleme beim Einrichten von Java (PATH-Veriable) Java Basics - Anfänger-Themen 4
A Memory Probleme beim Laden von thumbnails Java Basics - Anfänger-Themen 3
G Probleme beim Login (Webservice) Java Basics - Anfänger-Themen 4
B Probleme beim Kompilieren. Java Basics - Anfänger-Themen 12
M probleme beim parsen Java Basics - Anfänger-Themen 7
R Probleme beim Repaint Java Basics - Anfänger-Themen 3
M probleme beim applet einbinden Java Basics - Anfänger-Themen 7
L beim ersten compilen schon erste probleme Java Basics - Anfänger-Themen 8
R Probleme beim umwandeln eines String zu einem Int Wert Java Basics - Anfänger-Themen 3
M Probleme beim Datei auslesen Java Basics - Anfänger-Themen 6
M Probleme beim Compileren Java Basics - Anfänger-Themen 29
I Probleme beim ausführen des Programms Java Basics - Anfänger-Themen 6
kulturfenster Probleme beim Erstellen von Objekten Java Basics - Anfänger-Themen 15
S Probleme beim Java Kompilieren + ausführen Java Basics - Anfänger-Themen 6
M probleme beim kompilieren / übersetzen ! Systemeinstellung ? Java Basics - Anfänger-Themen 5
I Probleme beim Ausführen von Anwendungen Java Basics - Anfänger-Themen 2
S Probleme mit Datentyp beim Einlesen Java Basics - Anfänger-Themen 4
I java - probleme beim complimieren Java Basics - Anfänger-Themen 4
L Probleme beim ersten JavaProgramm! Java Basics - Anfänger-Themen 4
P Probleme beim Exportieren einer jar datei Java Basics - Anfänger-Themen 8
M Probleme beim Strich(e) zwichen Java Basics - Anfänger-Themen 3
M Probleme beim Drucken Java Basics - Anfänger-Themen 4
M Probleme beim Zuweisen eines Arbeitsverzeichnis Java Basics - Anfänger-Themen 2
A Probleme beim char-Vergleich! Java Basics - Anfänger-Themen 9
G Probleme beim Compilieren Java Basics - Anfänger-Themen 6
J Probleme beim Vererben Java Basics - Anfänger-Themen 2
B Probleme beim Dateien auslesen Java Basics - Anfänger-Themen 12
C Probleme beim overloaden. Java Basics - Anfänger-Themen 2
W MouseListener Probleme beim Abfangen Java Basics - Anfänger-Themen 8
X probleme beim import Java Basics - Anfänger-Themen 3
S Probleme beim Füllen einer HashMap Java Basics - Anfänger-Themen 15
K Probleme beim Einstieg Java Basics - Anfänger-Themen 2
I Probleme beim Ansprechen eines Arrays Java Basics - Anfänger-Themen 12
T Probleme beim Einlesen eines Strings Java Basics - Anfänger-Themen 3
K Neuronales Netz in Java und Probleme beim Konfigurieren Java Basics - Anfänger-Themen 2
N Probleme beim generieren von Objekten Java Basics - Anfänger-Themen 2
G Unknown Source Probleme beim Starten des Prgramms Java Basics - Anfänger-Themen 2
J probleme beim wieder aufruf Java Basics - Anfänger-Themen 2
J Probleme beim Erstellen eines Programms Java Basics - Anfänger-Themen 5
D Rekursions Probleme / frage Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben