Graphics zeichnen

davidh38

Bekanntes Mitglied
Java:
jframe = new JFrame("Cluster Visualizer");
		DrawArea drawArea = new DrawArea();
		drawArea.initComponents();
		jpanel = new JPanel();
		Graphics g = null;	
		Graphics2D g2 = (Graphics2D) g;
		
		g2.drawLine(3, 4, 5, 6);
		jpanel.paint(g2);
		
		jframe.add(jpanel);
		jframe.setVisible(true);

Hey Leute,
ich würde gern auf diese Weise wie oben beschrieben eine graphics zeichnen oder kann ich das nur, indem ich einen Jpanel erweitere und die Paintmethode aufrufe?
 
Java:
jframe = new JFrame("Cluster Visualizer");
		DrawArea drawArea = new DrawArea();
		drawArea.initComponents();
		jpanel = new JPanel();
		Graphics g = null;	
		Graphics2D g2 = (Graphics2D) g;
		
		g2.drawLine(3, 4, 5, 6);
		jpanel.paint(g2);
		
		jframe.add(jpanel);
		jframe.setVisible(true);

Hey Leute,
ich würde gern auf diese Weise wie oben beschrieben eine graphics zeichnen oder kann ich das nur, indem ich einen Jpanel erweitere und die Paintmethode aufrufe?

Gewöhnlich überschreibt man paintComponent ja und ruft dann immer repaint() auf! So wie du hier skizziert hast jedenfalls nicht, vor allem weil du ja so eig. eine NPE bekommen müsstest 🙂

Java:
		JFrame jframe = new JFrame("Cluster Visualizer");
        JPanel jpanel = new JPanel(){
        	@Override
        	protected void paintComponent(Graphics g) {
        		super.paintComponent(g);
        		g.drawLine(3, 4, 5, 6);
        	}
        };
        jframe.add(jpanel);
        jframe.setSize(500, 500);
        jframe.setVisible(true);

Es gibt hier jede Menge Links im Forum zu Tutorials wie man in Swing zeichnet, auch in der FAQ müsste einiges dazu stehen!
 
Gewöhnlich überschreibt man paintComponent ja und ruft dann immer repaint() auf! So wie du hier skizziert hast jedenfalls nicht, vor allem weil du ja so eig. eine NPE bekommen müsstest 🙂

Java:
		JFrame jframe = new JFrame("Cluster Visualizer");
        JPanel jpanel = new JPanel(){
        	@Override
        	protected void paintComponent(Graphics g) {
        		super.paintComponent(g);
        		g.drawLine(3, 4, 5, 6);
        	}
        };
        jframe.add(jpanel);
        jframe.setSize(500, 500);
        jframe.setVisible(true);

Es gibt hier jede Menge Links im Forum zu Tutorials wie man in Swing zeichnet, auch in der FAQ müsste einiges dazu stehen!


Hallo erraaa ich habe auch ein funktionierendes Beispiel. Es kommt mir nur so komisch vor, dass ich praktisch gezwungen bin ein Jpanel zu erweitern, damit ich etwas zeichnen kann. Oder bin ich das nicht?
 
Hallo erraaa ich habe auch ein funktionierendes Beispiel. Es kommt mir nur so komisch vor, dass ich praktisch gezwungen bin ein Jpanel zu erweitern, damit ich etwas zeichnen kann. Oder bin ich das nicht?
Das ist in Swing der übliche Weg. Einzig durch erweitern von JComponent oder JPanel und überschreiben deren paintComponent(Graphics g) ist sichergestellt, dass man an ein gültiges Graphics Objekt gelangt, mit dem man zeichnen kann. Das ist das Grundprinzip von Swing und wird auch von allen anderen Swing Komponenten so praktiziert.
 
Das ist in Swing der übliche Weg. Einzig durch erweitern von JComponent oder JPanel und überschreiben deren paintComponent(Graphics g) ist sichergestellt, dass man an ein gültiges Graphics Objekt gelangt, mit dem man zeichnen kann. Das ist das Grundprinzip von Swing und wird auch von allen anderen Swing Komponenten so praktiziert.


Alles klaro, verstanden. Wie wird eigentlich Graphics g übergeben, wenn man davon gar kein Objekt erstellen kann oder ist es eine Unterklasse von Graphics?
 
Alles klaro, verstanden. Wie wird eigentlich Graphics g übergeben, wenn man davon gar kein Objekt erstellen kann oder ist es eine Unterklasse von Graphics?
Das sind die großen Geheimnisse ;-) Ehrlich gesagt, habe ich mich damit nicht näher auseinander gesetzt. Das Graphics Objekt wird wohl irgendwo durch die JVM erzeugt und über den Container an seine Subkomponenten weiter gereicht.
Selbst erstellen kann man so ein Graphics Objekt nicht.

Das Graphics Objekt das man z.B. in der paintComponent übergeben bekommt ist vom Typ Graphics2D - die Klasse ist allerding auch abstract.
 

Zurück
Oben