Problem beim Linien ziehen!

Status
Nicht offen für weitere Antworten.
P

Paristick

Gast
Hallo!

Ich habe eine Frage zu einem Problem, dass mich schon zu lange nervt, obwohl nix Großartiges dahinter sein kann. Und zwar gehts dabei um das Ziehen einer geraden Linie. Mein Problem besteht darin, dass ich immer einen Fächereffekt beim Zeichnen bekomme und erst beim resizen des Fensters wird wirklich nur die letze Linie dargestellt. Ich habe das Ganze mit 2 Listen gelöst - aber seht am Besten selbst:

//Die ganzen Imports lass ich mal weg...


<code>
public class ePanel extends JPanel implements MouseListener,
MouseMotionListener {

private static final long serialVersionUID = 1L;

int x1;
int x2;
int y1;
int y2;
boolean dragged = false;
boolean released = true;

// @jve:decl-index=0:

public List<Shape> drawlist = new ArrayList<Shape>(); // @jve:decl-index=0:
public List<Shape> dragglist = new ArrayList<Shape>(); // @jve:decl-index=0:


// @jve:decl-index=0:

/**
* This is the default constructor
*/

public ePanel() {
super();
initialize();
}

public void paint (Graphics g) {

g.setColor(Color.black);

for (int i = 0; i <= this.getWidth(); i = i + 20) {
g.drawLine(i, 0, i, this.getHeight());
}
for (int i = 0; i <= this.getHeight(); i = i + 20) {
g.drawLine(0, i, this.getWidth(), i);
}

if (released == true) {
if (Main.shapeUebergabe == "line") {
if (Main.colorUebergabe == "blue") {
Stroke stroke = new Stroke(x1, y1, x2, y2, Color.BLUE);
drawlist.add(stroke);
} else if (Main.colorUebergabe == "red") {
Stroke stroke = new Stroke(x1, y1, x2, y2, Color.RED);
drawlist.add(stroke);
}
} else if (Main.shapeUebergabe == "ellipse") {
if (Main.colorUebergabe == "blue") {
Ellipse ellipse = new Ellipse(x1, y1, x2, y2, Color.BLUE);
drawlist.add(ellipse);
} else if (Main.colorUebergabe == "red") {
Ellipse ellipse = new Ellipse(x1, y1, x2, y2, Color.RED);
drawlist.add(ellipse);
}
}
}

if (dragged == true) {
if (Main.shapeUebergabe == "line") {
if (Main.colorUebergabe == "blue") {
dragglist.clear();
Stroke stroke = new Stroke(x1, y1, x2, y2, Color.BLUE);
dragglist.add(stroke);
}
}
}

for (Shape s : dragglist) {
s.paint(g);
}

for (Shape s : drawlist) {
s.paint(g);
}

}

private void initialize() {

this.setSize(300, 200);
this.addMouseListener(this);
this.addMouseMotionListener(this);
}

// @jve:decl-index=0:
@Override
public void mouseClicked(MouseEvent e) {

}

@Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub

}

@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub

}

@Override
public void mousePressed(MouseEvent press) {

x1 = press.getX();
y1 = press.getY();

}

// @jve:decl-index=0:

@Override
public void mouseReleased(MouseEvent release) {
released = true;
dragged = false;
x2 = release.getX();
y2 = release.getY();
repaint();
}

@Override
public void mouseDragged(MouseEvent drag) {
dragged = true;
released = false;
x2 = drag.getX();
y2 = drag.getY();
repaint();

}

@Override
public void mouseMoved(MouseEvent arg0) {

}


}

</code>
 

Wildcard

Top Contributor
In paint darfst du niemals dein Datenmodell (die Listen) manipulieren. Das muss in Folge der MouseEvents geschehen.
 

André Uhres

Top Contributor
Etwas verstehe ich nicht:
"java.awt.Stroke" ist ein interface mit der Methode "Shape createStrokedShape (Shape p);"
aber eine Klasse Stroke kenne ich nicht, nur "public class BasicStroke implements Stroke"
im package java.awt.
 
G

Guest

Gast
Danke erstmal für die schnellen Antworten!

habe für die Shapes eigene Klassen erstellt in der sie sich selbst zeichnen... deshalb gibts eine Klasse Stroke!
 
P

Paristick

Gast
Ok, jetz hab ich die Veränderung der Listen aus der paint Methode rausgenommen und eigene Funktionen geschrieben, die bei mousedragged() und mousereleased() aufgerufen werden... hab den gleichen Fächereffekt noch immer, erst wenn ich das Fenster resize oder ein neues ePanel zum zeichenn aufmache, dann bleibt wirklich nur der letzte Strich auf dem Panel sichtbar, bis dahin sind alle sichtbar - eben dieser Fächer... der neue code schaut so aus:

Code:
import javax.sound.sampled.Line;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.JTextArea;

public class ePanel extends JPanel implements MouseListener,
		MouseMotionListener {

	private static final long serialVersionUID = 1L;

	int x1;
	int x2;
	int y1;
	int y2;

	// @jve:decl-index=0:

	public List<Shape> drawlist = new ArrayList<Shape>();  //  @jve:decl-index=0:
	public List<Shape> dragglist = new ArrayList<Shape>();  //  @jve:decl-index=0:


	// @jve:decl-index=0:

	/**
	 * This is the default constructor
	 */

	public ePanel() {
		super();
		initialize();
	}

	public void paint (Graphics g) {

		g.setColor(Color.black);

		for (int i = 0; i <= this.getWidth(); i = i + 20) {
			g.drawLine(i, 0, i, this.getHeight());
		}
		for (int i = 0; i <= this.getHeight(); i = i + 20) {
			g.drawLine(0, i, this.getWidth(), i);
		}



		for (Shape s : drawlist) {
			s.paint(g);
		}
		
		for (Shape s : dragglist) {
			s.paint(g);
		}
		

		
		
		
	}

	private void initialize() {

		this.setSize(300, 200);
		this.addMouseListener(this);
		this.addMouseMotionListener(this);
	}

	// @jve:decl-index=0:
	@Override
	public void mouseClicked(MouseEvent e) {

	}

	@Override
	public void mouseEntered(MouseEvent arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void mouseExited(MouseEvent arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void mousePressed(MouseEvent press) {

		x1 = press.getX();
		y1 = press.getY();

	}

	// @jve:decl-index=0:

	@Override
	public void mouseReleased(MouseEvent release) {

		x2 = release.getX();
		y2 = release.getY();
		released();
		repaint();
	}

	@Override
	public void mouseDragged(MouseEvent drag) {

		x2 = drag.getX();
		y2 = drag.getY();
		dragged();
		repaint();
		
	}

	@Override
	public void mouseMoved(MouseEvent arg0) {

	}
	
	public void dragged() {
		
		if (Main.shapeUebergabe == "line") {
			if (Main.colorUebergabe == "blue") {
				Stroke stroke = new Stroke(x1, y1, x2, y2, Color.BLUE);
				dragglist.add(stroke);
			} else if (Main.colorUebergabe == "red") {
				Stroke stroke = new Stroke(x1, y1, x2, y2, Color.RED);
				dragglist.add(stroke);
			}
		} else if (Main.shapeUebergabe == "ellipse") {
			if (Main.colorUebergabe == "blue") {
				Ellipse ellipse = new Ellipse(x1, y1, x2, y2, Color.BLUE);
				dragglist.add(ellipse);
			} else if (Main.colorUebergabe == "red") {
				Ellipse ellipse = new Ellipse(x1, y1, x2, y2, Color.RED);
				dragglist.add(ellipse);
			}
		}
	}
	
	public void released() {
		if (Main.shapeUebergabe == "line") {
			if (Main.colorUebergabe == "blue") {
				Stroke stroke = new Stroke(x1, y1, x2, y2, Color.BLUE);
				drawlist.add(stroke);
			} else if (Main.colorUebergabe == "red") {
				Stroke stroke = new Stroke(x1, y1, x2, y2, Color.RED);
				drawlist.add(stroke);
			}
		} else if (Main.shapeUebergabe == "ellipse") {
			if (Main.colorUebergabe == "blue") {
				Ellipse ellipse = new Ellipse(x1, y1, x2, y2, Color.BLUE);
				drawlist.add(ellipse);
			} else if (Main.colorUebergabe == "red") {
				Ellipse ellipse = new Ellipse(x1, y1, x2, y2, Color.RED);
				drawlist.add(ellipse);
			}
		}
	}

	
}
 
P

Paristick

Gast
Aja, was jetz noch in dem Codeteil da oben fehlt, is das "dragglist.clear()" in der ersten Zeile der dragged() Methode, damit auch beim resizen wenigstens das richtige angezeigt wird...
 
P

Paristick

Gast
Hmm... das mit "==" funktioniert eigentlich ganz gut! Mein Problem ist eigentlich ein ganz anderes. Vielleicht jemand eine Idee dazu!?

Grüße Paristick
 

Marco13

Top Contributor
In einem JPanel nicht paint überschreiben, sondern paintComponent
Code:
public void paintComponent(Graphics g)
{
    super.paintComponent(g); // <--- auch wischtisch!

    //... hier jetzt dein Kram...

}
 
S

SlaterB

Gast
im JPanel überschreibt man mit:


public void paintComponent(Graphics g) {
super.paintComponent(g); // wichtig, Panel leeren

// dein Code

}


edit:
mist, schneller und schöner ;)
 
P

Paristick

Gast
WAHNSINN!!! ENDLICH *gg* freu mich jetz grad total... alles funktioniert :D :D

Vielen Dank :)
 

Wildcard

Top Contributor
Paristick hat gesagt.:
Hmm... das mit "==" funktioniert eigentlich ganz gut! Mein Problem ist eigentlich ein ganz anderes.
Es funktioniert nur unter sehr bestimmten Vorraussetzungen. Verwende equals.
Beispiel das nicht mehr funktioniert:
Code:
Main.shapeUebergabe == new String("ellipse")
 

André Uhres

Top Contributor
Beim Stringvergleich wird davor gewarnt == oder != zu benutzen.
Z.B. bei verschiedenen Strings mit gleichem Inhalt gibt "equals()" immer "true" zurück,
aber == liefert dann das falsche Resultat.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Z Und schon wieder die Linien (Problem beim überzeichnen) AWT, Swing, JavaFX & SWT 4
TheWhiteShadow JavaFX ListView Problem beim Entfernen von Elementen AWT, Swing, JavaFX & SWT 1
K JavaFX Resizing-Problem beim BorderLayout (Center Component) beim Arbeiten mit mehreren FXMLs AWT, Swing, JavaFX & SWT 2
L JavaFX Problem beim Aufrufen einer Methode AWT, Swing, JavaFX & SWT 5
I 2D-Grafik Problem beim Ändern der Farbe eine 2d Objekts AWT, Swing, JavaFX & SWT 3
7 JavaFX Problem beim Zeichnen eines Dreiecks in einem GUI AWT, Swing, JavaFX & SWT 6
N Swing Problem beim Scrollen mit JScrollPane AWT, Swing, JavaFX & SWT 6
N Swing JTree Problem beim erstellen der Knoten AWT, Swing, JavaFX & SWT 0
N Swing CardLayout: Problem beim Wechsel zwischen den JPanels AWT, Swing, JavaFX & SWT 3
T Problem beim Zeichnen von Rechteck AWT, Swing, JavaFX & SWT 3
S Anordnung von GUI-Komponenten mit LayouManger (Problem beim anzeigen von JTextField) AWT, Swing, JavaFX & SWT 5
A Swing Problem beim Neuerstellen einer Node AWT, Swing, JavaFX & SWT 4
bluerob Problem beim Image zeichnen via andere Klasse AWT, Swing, JavaFX & SWT 7
B Swing Problem beim ActionListener AWT, Swing, JavaFX & SWT 5
K Swing Problem beim Zeichnen von Kreisen AWT, Swing, JavaFX & SWT 4
K JButton Problem beim Schriftfarbe Ändern AWT, Swing, JavaFX & SWT 2
P Problem beim erstellen eines JPanel in einem JFrame AWT, Swing, JavaFX & SWT 7
R Problem beim Anzeigen von Bildern auf JInternalFrame AWT, Swing, JavaFX & SWT 6
D 2D-Grafik Problem beim Drucken eines Grafik-Objekts AWT, Swing, JavaFX & SWT 2
M Problem beim Eventhandling AWT, Swing, JavaFX & SWT 5
B Problem beim laden von Bild mit getResource() AWT, Swing, JavaFX & SWT 3
T JSpinner in JTable: Problem beim Auslesen, funktioniert erst beim Zellwechsel AWT, Swing, JavaFX & SWT 7
H Thread-Problem mit der Darstellung beim Sperren des Fensters AWT, Swing, JavaFX & SWT 2
C Performance-Problem beim Überschreiben von paintComponent() AWT, Swing, JavaFX & SWT 2
M Problem beim Zeichnen mit Path2D AWT, Swing, JavaFX & SWT 4
F Swing JTable: Problem beim zeile löschen AWT, Swing, JavaFX & SWT 3
G Problem beim setzen des Fokus AWT, Swing, JavaFX & SWT 4
Z Problem beim JTextField AWT, Swing, JavaFX & SWT 5
C Swing Problem beim 2. Öffnen eines JFrames AWT, Swing, JavaFX & SWT 9
1 Java.awt.Robot Problem beim Shift-Druck AWT, Swing, JavaFX & SWT 5
B Swing Problem beim Elemente zu JList hinzufügen AWT, Swing, JavaFX & SWT 5
F Problem beim Positionieren von Icon und Text in Button AWT, Swing, JavaFX & SWT 2
Developer_X Swing Problem beim "rezeichnen" -> Überzeichnen der Komponente AWT, Swing, JavaFX & SWT 8
N SWT Einfaches Problem beim Layout AWT, Swing, JavaFX & SWT 8
N Swing Problem beim Einlesen von Jtable in Array AWT, Swing, JavaFX & SWT 5
W Swing Problem beim Passwort Dialog AWT, Swing, JavaFX & SWT 4
C Problem mit Swing Application Framework - Projekt beim AWT, Swing, JavaFX & SWT 2
F kleines problem beim suchen in einem String AWT, Swing, JavaFX & SWT 15
A Problem beim Setzen von JPanels AWT, Swing, JavaFX & SWT 4
S Problem beim Anpassen vom GridBagLayout AWT, Swing, JavaFX & SWT 10
H Adressbuch - Problem beim Speichern der Eingabe AWT, Swing, JavaFX & SWT 5
A Problem mit der Seiteneinrichtung beim Drucken AWT, Swing, JavaFX & SWT 7
P Bug in Java? - Problem beim Ändern von Spaltentiteln AWT, Swing, JavaFX & SWT 2
I Layout Problem beim Skalieren AWT, Swing, JavaFX & SWT 3
S Problem beim implementerien von ActionListener AWT, Swing, JavaFX & SWT 4
Y Problem beim Drucken AWT, Swing, JavaFX & SWT 2
A Problem beim Import! AWT, Swing, JavaFX & SWT 2
M Problem beim Einsatz von ScrollPane (Fenster spielt verrückt AWT, Swing, JavaFX & SWT 2
H Problem beim zeichen eines TimeSeriesChart mit jfreechart AWT, Swing, JavaFX & SWT 5
W Problem beim neuzeichnen eines Rechteckes (SWT) AWT, Swing, JavaFX & SWT 2
J Problem beim Multi-Threading mit einem JDialog AWT, Swing, JavaFX & SWT 2
J Problem mit Alpha-Wert beim Button AWT, Swing, JavaFX & SWT 3
P Problem beim Zeichnen auf ein BufferedImage AWT, Swing, JavaFX & SWT 4
F Problem mit geänderten AttributSet beim StyledDocument AWT, Swing, JavaFX & SWT 4
B BorderLayout/JSplitPane Problem beim Ausrichten AWT, Swing, JavaFX & SWT 5
C Problem beim Ausführen von Thread per Button AWT, Swing, JavaFX & SWT 2
S Problem beim Image laden AWT, Swing, JavaFX & SWT 4
D Problem beim Erstellen eines GridBagLayouts AWT, Swing, JavaFX & SWT 3
A Problem beim Neuzeichnen AWT, Swing, JavaFX & SWT 2
V Problem beim drucken AWT, Swing, JavaFX & SWT 4
D Problem beim Update von unsichtbaren JComponents mit Timern AWT, Swing, JavaFX & SWT 5
S Problem beim Umbenennen von MP3s AWT, Swing, JavaFX & SWT 10
O Problem beim Umwandeln eines Applets in eine Applikation AWT, Swing, JavaFX & SWT 15
T Problem beim Laden von Bildern AWT, Swing, JavaFX & SWT 14
G Problem mit der Anzeige von jLabel. Unlesbar wenn der Text geändert wird. AWT, Swing, JavaFX & SWT 28
H 2D-Grafik Problem mit Paint AWT, Swing, JavaFX & SWT 1
S Layout - Problem AWT, Swing, JavaFX & SWT 1
Tassos JavaFX/Problem mit der Maussteuerung in Stackpane AWT, Swing, JavaFX & SWT 7
sserio Java Fx - Problem AWT, Swing, JavaFX & SWT 3
A Problem Spiel auf Panel der GUI zu bringen AWT, Swing, JavaFX & SWT 1
A JavaFX Controller Problem AWT, Swing, JavaFX & SWT 1
E LayoutManager Welcher Layout-Mix löst mein Problem? AWT, Swing, JavaFX & SWT 3
Umb3rus JavaFX Problem mit PropertyValueFactory: can not read from unreadable property AWT, Swing, JavaFX & SWT 1
T Problem mit paintComponent() AWT, Swing, JavaFX & SWT 17
AmsananKING Java Menü-Problem AWT, Swing, JavaFX & SWT 1
G Instance OF Problem AWT, Swing, JavaFX & SWT 9
FrittenFritze Ein Problem mit der CSSBox, die Größe wird nicht angepasst AWT, Swing, JavaFX & SWT 5
M Problem mit dem Anzeigen von Frames im Vordergrund AWT, Swing, JavaFX & SWT 5
Badebay Problem mit JButton AWT, Swing, JavaFX & SWT 2
newJavaGeek Grid-Layout problem AWT, Swing, JavaFX & SWT 7
J JavaFX Löschen im Tabelview macht Problem AWT, Swing, JavaFX & SWT 15
JavaTalksToMe JavaFx ExekutorService Problem AWT, Swing, JavaFX & SWT 2
Zrebna Problem bei Eventhandling (Value soll nach jedem erneutem Klick gelöscht werden) AWT, Swing, JavaFX & SWT 4
B Problem mit JavaFX AWT, Swing, JavaFX & SWT 5
J css Problem AWT, Swing, JavaFX & SWT 5
B JavaFX habe mein Problem fett markiert AWT, Swing, JavaFX & SWT 2
A Swing Filter-Problem AWT, Swing, JavaFX & SWT 1
temi JavaFX Problem mit IntelliJ und JavaFx 11 unter XUbuntu AWT, Swing, JavaFX & SWT 3
L Java FX Problem mit Ubuntu 18 und JavaFx AWT, Swing, JavaFX & SWT 27
H JTable TableCellEditor-Problem AWT, Swing, JavaFX & SWT 0
kodela Swing Problem mit Warten-Dialog AWT, Swing, JavaFX & SWT 16
B JavaFx Scene Builder Problem AWT, Swing, JavaFX & SWT 2
B [Problem] Java öffnet Word-Datein nicht AWT, Swing, JavaFX & SWT 14
T DataBinding Problem AWT, Swing, JavaFX & SWT 5
Blender3D Problem mit € Symbol Font Gotham Windows 10 Swing AWT, Swing, JavaFX & SWT 11
T Problem mit JTable Sortierung AWT, Swing, JavaFX & SWT 2
J Problem mit Platfrom run later AWT, Swing, JavaFX & SWT 15
J Problem mit Platfrom run later AWT, Swing, JavaFX & SWT 0
D Swing SwingUtils / Thread Problem AWT, Swing, JavaFX & SWT 3
T Swing Problem mit Datum und FormattedTextField AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben