Mal Programm

Franky-2012

Mitglied
Hi,
ich hab mal versucht ein Malprogramm zu schreiben, doch hab ich ein paar Probleme mit dem zeichnen ;(

Java:
package paint;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class ZeichenPanel extends JPanel{
	
	private int[]x,y;
	private int n,Xsize,Ysize;
    private float stroke;
    private Color color;
    
	public ZeichenPanel(int Xvalue,int Yvalue){  //Konstruktor
	n=0;
	x=new int[100000];
	y=new int [100000];
	color=Color.black;
	stroke=2.0f;
	setSize(Xvalue,Yvalue);
	Xsize=this.getWidth();
	Ysize=this.getHeight();
	this.addMouseMotionListener(new ClickBearbeiter());
	}
	//Überschreibung der methode paintComponent
	public void paintComponent(Graphics g){
	super.paintComponent(g);
	Graphics2D gd=(Graphics2D)g.create();
	gd.setColor(Color.WHITE);
	gd.fillRect(0, 0, Xsize,Ysize);
	
	gd.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
	gd.setStroke(new BasicStroke(stroke));
	gd.setColor(color);

	gd.drawPolyline(x,y,n);
    gd.dispose();

	}
	public void setStroke(int value){
		stroke=(float)value;
		repaint();
	}
	public void setColor(Color c){
		color=c;
		repaint();
	}
	class ClickBearbeiter extends MouseMotionAdapter{
		public void mouseDragged(MouseEvent e){
			
		x[n]=e.getX();
		y[n]=e.getY();
		repaint();
		n++;	
		}
	
		
	}
	}
Das ist mein Zeichenpanel, das Problem ist wenn ich jetzt in meinem "eigentlichen"Editor in einem Colorchooser die Farbe verändere, ändert sich die Farbe von allem vorher gemalten...Logisch
Wie kann ich dies ändern??
Außerdem wenn ich die Maus drücke und male und dann los lasse, woanders hinbewege, wieder drücke, verbindet es zum vorher gemalten ;(
Dies ist natürlich auch unerwünscht.
In meinem Editor verwende ich, in der Mitte, eine JSplitPane, auf der rechten seite habe ich ein JPanel, welches dann das Zeichenpanel added. Oben halt noch ToolBar mit Werkzeugen, Strichstärken,
Farben und MenuBar mit File, Edit...
 

bERt0r

Top Contributor
Naja, du speicherst alle Punkte, auf die du mit gedrückter Maus fährst in ein Polygon. Ein Polygon is eben eine zusammenhängende Figur. Wenn du mehrere Figuren haben willst, musst du das anders angehen. Guck dir mal das Programm in meiner Sig an.
 

Franky-2012

Mitglied
Dankee wie dumm von mir...;)
Ich denke ich werde das Problem lösen!
Nochmal Dankee für eure Aw's!!!
Ich schließ das Thema erstmal nicht......hab bestimmt nochmal Fragen :D
 

Franky-2012

Mitglied
Und da ist auch schon die erste Frage :D
Habe mein Problem zwar gelöst...doch wenn man länger malt buggt es rum und ist tierisch lam...;(
Wie hast du(bERt0r) das gemacht???
konnte ich im Code nicht finden, oder habs übersehen....
Lern ja auch erst seit ein paar Monaten Java...;(
 

bERt0r

Top Contributor
In java gibt es das interface Shape. Um das herum hab ich eine Klasse Colored Shape gebastelt, das heist die Klasse speichert ein Shape und eine Farbe.
In der Funktion createShape wird ein ColoredShape abhängig von zwei Punkten erstellt, abhängig welche Einstellungen (Farbe & Form) gerade in der Toolbar oben eingestellt sind. Diese ColoredShapes kommen in eine Liste, welche in der paintComponent einfach durchgegangen und gezeichnet wird.
Das wichtige: keine Arrays verwenden, schließlich weist du nicht wieviele Formen du zeichnen willst, vielleicht brauchst du 100000, vielleicht mehr, vielleicht weniger. Das weist du im vorhinein nicht. Wenn du eine Liste verwendest kann dir das aber auch egal sein. In java gibts die schöne Klasse ArrayList welche die Performance Vorteile von Arrays mit der Flexibilität von Listen ziemlich gut vereint.
 

Franky-2012

Mitglied
Sry meine frage war nicht wie du das mit dem Malen und soo geproggt hast, sondern wie du das mit der Performence gemacht hast!
Denn bei mir fängt es nach einer Zeit malen an zu laggen..;(

Ansonsten klappt ja alles :D
Werden das nicht zu viele obj's???
 
Zuletzt bearbeitet:

Franky-2012

Mitglied
Soo dies ist meine momentane Klasse ZeichenPanel.
Java:
package paint;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.geom.Path2D;
import java.util.Vector;

public class ZeichenPanel extends JPanel{
	

	private int Xsize,Ysize;
    private float stroke;
    private Color color;
    coloredShape drawingShape =null;
	Vector<coloredShape> shapes=new Vector<coloredShape>();
	Point d=new Point(0,0);
		
	public ZeichenPanel(int Xvalue,int Yvalue){  //Konstruktor
	color=Color.black;
	stroke=2.0f;
	setSize(Xvalue,Yvalue);
	Xsize=this.getWidth();
	Ysize=this.getHeight();
	this.addMouseMotionListener(new ClickBearbeiter());
	this.addMouseListener(new ClickBearbeiter());
	}
	//Überschreibung der methode paintComponent
	public void paintComponent(Graphics g){
	super.paintComponent(g);
	Graphics2D gd=(Graphics2D)g;
    gd.setColor(Color.WHITE);
    gd.fillRect(0,0,Xsize,Ysize);
    	gd.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
	for(coloredShape cs:shapes)	{

	gd.setStroke(new BasicStroke(cs.getStroke()));	
	gd.setColor(cs.getColor());
	gd.draw(cs.getShape());
	}
	}
	public void setStroke(int value){
		stroke=(float)value;

	}
	public void setColor(Color c){
		color=c;

	}
	public coloredShape createShape(Point a,Point b){
		Path2D.Double part;
		coloredShape colorShape=new coloredShape();
		if(drawingShape==null || !(drawingShape.getShape() instanceof Path2D.Double))
		{
			part=new Path2D.Double();
			part.moveTo(a.x, a.y);
		}
		else
		{
			part=(Path2D.Double)drawingShape.getShape();
		}
		part.lineTo(b.x, b.y);
		colorShape.setShape(part);
		colorShape.setColor(color);
		colorShape.setStroke(stroke);
		return colorShape;
	}
	class ClickBearbeiter extends MouseAdapter{
	
		
		public void mouseDragged(MouseEvent e){
		Point p=new Point(e.getPoint())	;
		drawingShape= createShape(d,p);
		shapes.add(drawingShape);
		repaint();
		}
		public void mousePressed(MouseEvent e) 
		{
			d=e.getPoint();
		}
		
		public void mouseReleased(MouseEvent e)
		{
			Point r=e.getPoint();
			coloredShape cs=createShape(d,r);
			if(cs!=null)
			{
		
				shapes.add(cs);
			}
			drawingShape=null;
			repaint();
		}
		
		
	}
	}
Dann habe ich noch die Klasse coloredShape,mit den Atributen und meine Editor Klasse mit der ganzen Gui.
 

Michael...

Top Contributor
Ohne vernünftige Einrückung ist der Code schwer zu lesen.
So ganz überblickt habe ich es nicht, aber warum fügst Du beim Mausziehen immer wieder neue Shapes oder bestehende Referenzen neu dazu? Deine shapes Vector wird da ja ewig lang und ich glaube nicht, dass Du das so willst.
Java:
		public void mouseDragged(MouseEvent e){
		Point p=new Point(e.getPoint())	;
		drawingShape= createShape(d,p);
		shapes.add(drawingShape);
		repaint();
		}
 

Franky-2012

Mitglied
Dankee ist wenigstens schon ein bisschen besser geworden!!
Echt dumm von mir...
Habe mir auch noch ein Test Programm geschrieben, mit nur einem JPanel....laggt aber auch ;(
 

Franky-2012

Mitglied
Soo hab den Code nochmal ein bisschen verändert....
Ist aber fast nicht besser geworden ;(
Pls helft mir!

Java:
package paint;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.geom.Path2D;
import java.util.Vector;

public class ZeichenPanel extends JPanel{
	

	private int Xsize,Ysize;
    private float stroke;
    private Color color;
    coloredShape drawingShape =null;
	Vector<coloredShape> shapes=new Vector<coloredShape>();
	Point a=new Point(0,0);
	Point location;
	
	public ZeichenPanel(int sizex,int sizey){  //Konstruktor
	color=Color.black;
	stroke=2.0f;
	setSize(sizex,sizey);
	Xsize=this.getWidth();
	Ysize=this.getHeight();
	location=new Point(getLocation());
	
	this.addMouseMotionListener(new ClickBearbeiter());
	this.addMouseListener(new ClickBearbeiter());
	}
	
	public void paintComponent(Graphics g){
	  super.paintComponent(g);
	    Graphics2D gd=(Graphics2D)g;
        gd.setColor(Color.WHITE);
        gd.fillRect(location.x,location.y,Xsize,Ysize);
        gd.setClip(location.x,location.y,Xsize,Ysize);
    	gd.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
    			            RenderingHints.VALUE_ANTIALIAS_ON);
    	System.out.println(shapes.size());
	   for(coloredShape cs:shapes)	{

	    gd.setStroke(new BasicStroke(cs.getStroke()));	
	    gd.setColor(cs.getColor());
	    gd.draw(cs.getShape());
	    
	  }
	   
	}
	public void setStroke(int value){
		stroke=(float)value;

	}
	public void setColor(Color c){
		color=c;

	}
	public coloredShape createShape(Point a,Point b){
		Path2D.Double part;
		coloredShape colorShape=new coloredShape();
		if(drawingShape==null){
		
			part=new Path2D.Double();
			part.moveTo(a.x, a.y);
		}
		else {
		
			part=(Path2D.Double)drawingShape.getShape();
		}
		part.lineTo(b.x, b.y);
		colorShape.setShape(part);
		colorShape.setColor(color);
		colorShape.setStroke(stroke);
		return colorShape;
	}
	class ClickBearbeiter extends MouseAdapter{
	
		
		public void mouseDragged(MouseEvent e){
			 Point b=new Point(e.getPoint()) ;
		        drawingShape= createShape(a,b);
		        shapes.add(drawingShape);
		        repaint(location.x,location.y,Xsize,Ysize);
		}
		public void mousePressed(MouseEvent e) {
		
		a=e.getPoint();	
		
		}
		
		public void mouseReleased(MouseEvent e){
		
			
			drawingShape=null;
			
		}
		
		
	}
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Juelin starten maven javafx programm ohne netbeans AWT, Swing, JavaFX & SWT 38
P AWT Programm funktioniert nicht richtig AWT, Swing, JavaFX & SWT 35
G CAD Programm AWT, Swing, JavaFX & SWT 4
thor_norsk E - Mail Programm AWT, Swing, JavaFX & SWT 2
_user_q Über installDist exportiertes Programm wirft "Unsupported JavaFX configuration" AWT, Swing, JavaFX & SWT 0
CodingBerlin JavaFX Programm läuft nur unter Eclipse AWT, Swing, JavaFX & SWT 1
J Programm findet Resource nicht. AWT, Swing, JavaFX & SWT 6
N Programm Läuft nicht auf anderen Pcs AWT, Swing, JavaFX & SWT 9
imawake Java Paket-Tracking Programm 📦 AWT, Swing, JavaFX & SWT 7
S Lustiges programm schnell coden? AWT, Swing, JavaFX & SWT 2
O Ein Java-Programm mit Swing steuern AWT, Swing, JavaFX & SWT 1
P Swing Programm hängt sich bei Buttondruck auf? (GUI für "Chatbot" erstellen) AWT, Swing, JavaFX & SWT 15
M DragAndDrop - aus Browser ins Programm AWT, Swing, JavaFX & SWT 6
T Java GUI - Würfel Programm AWT, Swing, JavaFX & SWT 6
JojoSand Java Programm wird nicht gestartet - keinen Fehlerhinweis AWT, Swing, JavaFX & SWT 9
SvenPittelkow Programm soll auf JButton warten bis der geklickt wurde AWT, Swing, JavaFX & SWT 1
I Gui in bestehendes Java-Programm AWT, Swing, JavaFX & SWT 11
L JavaFX IntelliJ Standalone Programm exportieren AWT, Swing, JavaFX & SWT 9
Bluedaishi JavaFX Programm start mit zwei scenen bzw Fenster AWT, Swing, JavaFX & SWT 1
M AWT Programm in den Tray minimieren AWT, Swing, JavaFX & SWT 2
steven789hjk543 Swing Weiß jemand, warum dieses Programm nicht funktioniert? AWT, Swing, JavaFX & SWT 7
A Java Programm gestalten AWT, Swing, JavaFX & SWT 4
P Swing Warum startet das Programm nicht? AWT, Swing, JavaFX & SWT 3
J JavaFX Kamera im Programm öffnen AWT, Swing, JavaFX & SWT 6
H Hintergrundbild in einem Programm AWT, Swing, JavaFX & SWT 4
MR._FIRE_Flower progressBar in ein bestehendes Programm einbauen AWT, Swing, JavaFX & SWT 3
J Verbesserungsvorschläge?! Kleines AWT Programm AWT, Swing, JavaFX & SWT 4
A Programm nun in ein Frame basteln AWT, Swing, JavaFX & SWT 1
A Swing Programm funktioniert aber zwei Buttons werden angezeigt AWT, Swing, JavaFX & SWT 3
G Zeichnen Programm AWT, Swing, JavaFX & SWT 1
R Swing Programm läuft nur beim Debuggen korrekt ab AWT, Swing, JavaFX & SWT 4
Arif Swing Programm friert ein... AWT, Swing, JavaFX & SWT 2
apple_pie1998 Programm gibt plötzlich exceptions aus. AWT, Swing, JavaFX & SWT 4
N Swing Wie Programm strukturieren? (Dynamisch Komponenten hinzufügen) AWT, Swing, JavaFX & SWT 1
N JLabel ändern während Programm ausgeführt wird AWT, Swing, JavaFX & SWT 4
X JMenu Menu-Bar ausrichtung ändern im Programm AWT, Swing, JavaFX & SWT 0
T Swing Programm hängt sich auf! AWT, Swing, JavaFX & SWT 23
L Probleme mit Programm AWT, Swing, JavaFX & SWT 13
S Grafik: Programm kommt nicht zur paint()-Methode AWT, Swing, JavaFX & SWT 6
P Programm durch Dateiaufruf starten und Datei öffnen AWT, Swing, JavaFX & SWT 2
S Action durchführen beim Programm beenden AWT, Swing, JavaFX & SWT 3
N Programm mit Swing und Thread, Figur bewegen sich nicht AWT, Swing, JavaFX & SWT 6
G Programm GUI erstellen AWT, Swing, JavaFX & SWT 5
L JButton flackern - Programm hängt sich auf AWT, Swing, JavaFX & SWT 3
T Programm im METRO Design? AWT, Swing, JavaFX & SWT 1
J Programm hängt sich bei Log In auf AWT, Swing, JavaFX & SWT 1
C Programm mit Passwort schließen AWT, Swing, JavaFX & SWT 5
D Robot Programm mit Escape abbrechen (aus Eclipse heraus) AWT, Swing, JavaFX & SWT 2
N Programm läuft perfekt in Eclipse aber nicht in .JAR AWT, Swing, JavaFX & SWT 3
S JScrollPane --> Programm hängt sich beim scrollen auf AWT, Swing, JavaFX & SWT 2
J Programm im GUI ausführen AWT, Swing, JavaFX & SWT 4
A Probleme mit 2 JFrames in einem Programm AWT, Swing, JavaFX & SWT 7
S Event Handling konsole Programm mit Tastendruck beenden AWT, Swing, JavaFX & SWT 5
G JTextArea on the fly aus anderem Programm befüllen AWT, Swing, JavaFX & SWT 4
K Swing Konsolen Programm in GUI - Suche Hilfe bei Konsolenausgabe AWT, Swing, JavaFX & SWT 2
W Windows Fenster in einem Programm AWT, Swing, JavaFX & SWT 2
C In Hauptfenster Programm-Klassen implementieren AWT, Swing, JavaFX & SWT 9
A KeyListener Button wechseln & Programm beenden AWT, Swing, JavaFX & SWT 4
C Swing Wie kann ich im Programm das Menü schließen AWT, Swing, JavaFX & SWT 2
J SWING - Programm ohne Eclipse etc. starten AWT, Swing, JavaFX & SWT 7
J Button soll nach Klick Text ändern und Programm in 3 Sekunden beenden AWT, Swing, JavaFX & SWT 6
M Programm hängt sich auf nachdem repaint() benutzt wurde AWT, Swing, JavaFX & SWT 2
M Programm in Jframe "einbinden" AWT, Swing, JavaFX & SWT 7
S Programm auf aktuellen Stand bringen AWT, Swing, JavaFX & SWT 2
Spin Tool: Popup -Programm AWT, Swing, JavaFX & SWT 3
GUI-Programmer Swing JWindow - Programm wird ohne Grund beendet AWT, Swing, JavaFX & SWT 3
E Kreis-Mal-Programm AWT, Swing, JavaFX & SWT 7
P Programm aktuallisiert sich nur beim Rüberzeigen AWT, Swing, JavaFX & SWT 6
T Java-Anwendung arbeitet Programm in seltsamer Reihenfolge ab AWT, Swing, JavaFX & SWT 3
C Programm für 5 sekunden anhalten und actionevent abfangen AWT, Swing, JavaFX & SWT 18
J Programm schließen AWT, Swing, JavaFX & SWT 4
J Programm nur einmal öffnen AWT, Swing, JavaFX & SWT 3
E Windows Kontext Menü - Laufendes Programm AWT, Swing, JavaFX & SWT 3
T Programm vom Desktop starten! AWT, Swing, JavaFX & SWT 2
S Programm pausieren während JDialog offen ist AWT, Swing, JavaFX & SWT 2
M Browser in Programm einbinden AWT, Swing, JavaFX & SWT 4
R Durch Listener lässt sich Programm nicht mehr ausführen AWT, Swing, JavaFX & SWT 4
H Userinput in GUI an externes Programm AWT, Swing, JavaFX & SWT 8
D Firefox aus Programm starten AWT, Swing, JavaFX & SWT 4
S LayoutManager Einfaches Programm mit VE und Eclipse3.6 realisieren AWT, Swing, JavaFX & SWT 2
J SWT 32 bit Programm für 64 bit Jave AWT, Swing, JavaFX & SWT 10
R GUI hängt während Programm läuft AWT, Swing, JavaFX & SWT 7
S AWT Fenster schließen und Programm beenden AWT, Swing, JavaFX & SWT 10
H Infofenster vor dem eigentlichen Java Programm AWT, Swing, JavaFX & SWT 3
B Uberschrift in Swing-Programm zur Laufzeit aendern... AWT, Swing, JavaFX & SWT 4
C Swing Kleines Programm mit SWING unter Verwendung von MVC AWT, Swing, JavaFX & SWT 5
capgeti Wie Programm in JPanel (o.ä.) starten? AWT, Swing, JavaFX & SWT 3
B Externes Programm mit Robot Steuern AWT, Swing, JavaFX & SWT 3
G Programm läuft nur auf manchen Rechnern AWT, Swing, JavaFX & SWT 10
M SWT Programm pausiert ungewollt AWT, Swing, JavaFX & SWT 5
K Website in Java Programm einbinden AWT, Swing, JavaFX & SWT 3
B komplettes programm in einem fenster AWT, Swing, JavaFX & SWT 5
L Frage bei Programm mit Zufallskreisen AWT, Swing, JavaFX & SWT 9
L Programm terminated (zu frueh) AWT, Swing, JavaFX & SWT 3
T SplashScreen im laufenden Programm AWT, Swing, JavaFX & SWT 2
M Panelinhalt im Programm verändern AWT, Swing, JavaFX & SWT 12
R Programm nicht mehr in der Taskleiste AWT, Swing, JavaFX & SWT 2
3TageBart Ebenen in Zeichen-Programm implementieren AWT, Swing, JavaFX & SWT 9
H Swing HUD in externes Programm einblenden AWT, Swing, JavaFX & SWT 7
R Japaner koennen mein Programm nicht nutzen..? AWT, Swing, JavaFX & SWT 11

Ähnliche Java Themen

Neue Themen


Oben