Graphics auf JFrame Koordinatensystem

MarkusKirch

Mitglied
Hallo!
Ich habe eine GUI gebastelt, in die ich einen Funktionsterm eingeben kann und möchte diese Funktion zeichnen lassen.
Ich habe eine Methode, in der alle X-Werte von -10 - 10 in schritten von 0.02 (1px bei 1000px Fenstergröße) durchgerechnet werden und die X- und Y-Werte bereits als Koordinaten ausgerechnet (als für das JFrame indem sie gezeichnet werden sollen) in eine List<Point> eingetragen werden, die ich theoretisch nurnoch zeichnen müsste.

Also habe ich in der Liste z.B. folgende Punkte:
(500/500)
(501/490)
(502/460)
(503/400)
[...]

Ich möchte nun, dass diese Punkte der Reihe nach mit einer Linie verbunden werden, wenn ich die Funktion dazu aufrufe und diese Linien in meinem JFrame (oder von mir aus auch einem untergeordnetem JPanel) angezeigt werden...

Bisher habe ich noch nicht mit paint(Graphics g) gearbeitet und habe mit folgenden Codeansatz erarbeitet:

Java:
	public List<Point> punkte = new LinkedList<Point>();
	public Point letzterPunkt, aktuellerPunkt;
	public JFrame f;

	public void paint(Graphics g) {
		Iterator<Point> it = punkte.iterator();

		while(it.hasNext()) {
			if(aktuellerPunkt!=null) {
				letzterPunkt=aktuellerPunkt;
			}
			aktuellerPunkt = it.next();
			if(letzterPunkt!=null) {
				g.drawLine(letzterPunkt.x, letzterPunkt.y, aktuellerPunkt.x, aktuellerPunkt.y);
			}
		}
	}

Nur:
Wann wird paint(g) aufgerufen (habe gelesen bei f.setVisible(true);), bzw. wie kann ich es manuell tun?
Was bedeutet eigentlich genau das Ojekt Graphics g?! Was wäre es in meinem Falle? Muss ich noch ein erzeugen?
Oder noch besser: Gibt es eine Alternative, mit der ich die Punkte ohne Graphics g verbinden kann?!

VG und Danke für die Hlfe!

Markus
 

MarkusKirch

Mitglied
Also ich habe das Tutorial zu diesem Thema entdeckt ;-)

Jetzt habe ich nach den Anweisungen des Tuts folgendes geschrieben:

Java:
	public void actionPerformed(ActionEvent e) {
		System.out.println("ActionPerformed für "+e.getSource()+" ausgeführt");
		if(e.getSource()==zeichneFunktion) {

			while(it.hasNext()) {
				if(aktuellerPunkt!=null) {
					letzterPunkt=aktuellerPunkt;
				}
				aktuellerPunkt = it.next();
				if(aktuellerPunkt!=null) {
					paintComponent.setBounds(0, formelHoehe, 1000, 1000);
					paintComponent.setVisible(true);
					paintComponent.zeichneLinie(letzterPunkt.x, letzterPunkt.y, aktuellerPunkt.x, aktuellerPunkt.y);
					paintComponent.repaint();
				}
			}
		}

	}
}

class MeinePaintingComponent extends JComponent {
	private int letzteX=0, letzteY=0, aktuelleX=0, aktuelleY=0;
	
    
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        
		if(letzteX!=0 && letzteY!=0 && aktuelleX!=0 && aktuelleY!=0) {
			g.drawLine(letzteX, letzteY, aktuelleX, aktuelleY);
		}
    }
    
    public void zeichneLinie(int vonX, int vonY, int bisX, int bisY) {
        letzteX=vonX;
        letzteY=vonY;
        aktuelleX=bisX;
        aktuelleY=bisY;
    }

}

Leider funktioniert es immernoch nicht!
Ich bekomme noch nicht einmal eine 1000*1000px große JComponent angezeigt (Auch nicht wenn ich sofort bei der Init setVisible auf true habe bzw eine BGColor gesetzt habe).

Könnt ihr mir BITTE helfen?!

VG Markus
 

Marco13

Top Contributor
Ja, die richtige Lösung wäre eine Mischung aus beidem. "paint" (bzw. paintComponent) wird sozusagen(!) "vom Betriebssystem" (bzw. dem Fenstermanager, Windows zum Beispiel) aufgerufen, und zwar immer dann, wenn das Fenster neu gezeichnet werden muss. Z.B. wenn das Fenster kurz verdeckt war, und wieder sichtbar wird. Das "Graphics", das dort übergeben wird, ist sozusagen der "Zugang" zu dem Bereich auf dem Bildschirm, wo hingezeichnet werden kann. (Alles sehr vereinfacht...).

Damit ist vielleicht der Ablauf etwas klarer: ALLES, was gezeichnet wird, muss von der paintComponent-Methode aus gezeichnet werden. Und zwar immer alles "in einem Rutsch". Ganz grob bräuchtest du sowas wie
Java:
class PlotPanel extends JPanel
{
    private List<Point> points = ...

    @Override
    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        Point previous = points.get(0);
        for (int i=1; i<points.size(); i++)
        {
            Point current = points.get(i);
            g.drawLine(previous.x, previous.y, current.x, current.y);
            previous = current;
        }
    }
}
 

MarkusKirch

Mitglied
Ok, danke für die Erklärung von paintComponent(g)!

Den Code, den du gepostet hast, hatte ich fast genau so schon implementiert, habe nur vergessen, die Methode punkteHinzufuegen() aufzurufen, die Werte in die List<Point> einträgt...

Des wegen konnte ja nur eine leere Liste gezeichnet werden ;-)

Meistens scheitert es an so banalen Dingen :p


Trotzdem Danke für die Hilfe, jetzt funktioniert es!!!

VG Markus
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P JPanle, JFrame und Graphics AWT, Swing, JavaFX & SWT 2
D Frage zu JFrame und Graphics AWT, Swing, JavaFX & SWT 4
M JFrame Graphics.drawString Problem AWT, Swing, JavaFX & SWT 11
R JFrame und paint(Graphics g) AWT, Swing, JavaFX & SWT 5
N Graphics Objekte scalen mit Veränderung des Bildschirms AWT, Swing, JavaFX & SWT 19
T Bild in ein graphics füllen AWT, Swing, JavaFX & SWT 2
volcanos Scrollen: JScrollPane mit Graphics g und Java-Fonts extends Frame ? AWT, Swing, JavaFX & SWT 5
DonBronson Java Graphics bewegbar machen (Drag&Drop) AWT, Swing, JavaFX & SWT 3
ExceptionOfExpectation MouseListener-Objekte zu den Graphics-Objekten einfügen AWT, Swing, JavaFX & SWT 3
R AWT Graphics initialisieren AWT, Swing, JavaFX & SWT 15
R 2D-Grafik PNG Bild per Graphics auf JPanel AWT, Swing, JavaFX & SWT 9
B Graphics to Image AWT, Swing, JavaFX & SWT 3
T Swing Graphics auf Panel AWT, Swing, JavaFX & SWT 2
B Graphics -> Graphics2D etwas zu beachten? AWT, Swing, JavaFX & SWT 8
P ActionListener Graphics Einbauen AWT, Swing, JavaFX & SWT 0
J Swing Problem mit Graphics Methode AWT, Swing, JavaFX & SWT 4
R Swing Bewegung eines Graphics Objektes innerhalb eines JPanels funktioniert nicht richtig AWT, Swing, JavaFX & SWT 2
V Netbeans: TabbedPane, ScrollPane und Graphics AWT, Swing, JavaFX & SWT 4
V Graphics g - drawOval problem mit background AWT, Swing, JavaFX & SWT 1
M Graphics.fillOval AWT, Swing, JavaFX & SWT 1
javampir Sauberes Faden mit awt Graphics AWT, Swing, JavaFX & SWT 6
D 2D-Grafik Inhalt eines Graphics in anderes Graphics zeichnen.... AWT, Swing, JavaFX & SWT 3
X AWT Text der mit Graphics "drawString(...)" geschreiben wurde wieder löschen. AWT, Swing, JavaFX & SWT 6
C Zwei Ebenen in Graphics ? AWT, Swing, JavaFX & SWT 0
C Graphics Objekt in Zeitschleife zeichnen AWT, Swing, JavaFX & SWT 4
I JavaFX Graphics Performance AWT, Swing, JavaFX & SWT 2
vodkaz Graphics aufrufen AWT, Swing, JavaFX & SWT 4
V 2D-Grafik Frage zum Graphics Objekt AWT, Swing, JavaFX & SWT 2
P 2D-Grafik NPE beim Zeichnen auf Graphics g AWT, Swing, JavaFX & SWT 8
M Graphics.drawImage von unten nach oben abbilden lassen AWT, Swing, JavaFX & SWT 6
F Probleme mit (Graphics g) II AWT, Swing, JavaFX & SWT 4
F Probleme mit (Graphics g) AWT, Swing, JavaFX & SWT 3
I Rechteck eines Graphics eines JPanels in einem anderen JPanel anzeigen AWT, Swing, JavaFX & SWT 7
antonbracke Multiplayer Shooter- Wie geht das mit Canvas & Graphics AWT, Swing, JavaFX & SWT 6
R Ankerpunkt bei Graphics AWT, Swing, JavaFX & SWT 3
R Fließende Bewegung von Graphics AWT, Swing, JavaFX & SWT 6
T AWT Graphics G Kein Text erscheint warum? AWT, Swing, JavaFX & SWT 12
L Graphics.drawImage() - Output-Größe entspricht nicht Parametern AWT, Swing, JavaFX & SWT 10
L Border verschwindet durch Graphics.drawImage() AWT, Swing, JavaFX & SWT 4
Furtano AWT paint braucht ein Graphics Objekt ? AWT, Swing, JavaFX & SWT 2
P "Graphics" wird nicht angezeigt AWT, Swing, JavaFX & SWT 11
L Graphics Objekt - aus anderer Klasse aufrufen / übergeben AWT, Swing, JavaFX & SWT 5
B Swing Zeilenumbruch in Graphics AWT, Swing, JavaFX & SWT 20
T Graphics zeichnet nicht AWT, Swing, JavaFX & SWT 2
T Applet graphics - zeichnen funktioniert nicht AWT, Swing, JavaFX & SWT 14
R Graphics-Object speichern AWT, Swing, JavaFX & SWT 4
S Zeichnen mit java.awt.Graphics AWT, Swing, JavaFX & SWT 6
D Graphics zeichnen AWT, Swing, JavaFX & SWT 6
T Graphics Ersetzend Zeichnen AWT, Swing, JavaFX & SWT 6
S Unterscheiden ob ein Graphics-Objekt von einer JComponent oder einem BufferedImage kommt..? AWT, Swing, JavaFX & SWT 4
Developer_X Swing Auf ein BufferedImage mit Graphics/Graphics2D zeichnen AWT, Swing, JavaFX & SWT 6
D Erzeugen eines leeren Graphics-Objektes AWT, Swing, JavaFX & SWT 7
B Anzeigefehler in GridBagLayout durch paintComponent(Graphics g) AWT, Swing, JavaFX & SWT 3
A AWT AWT Panelfenster mit Graphics kombinieren AWT, Swing, JavaFX & SWT 7
T Graphics Parameterübergabe AWT, Swing, JavaFX & SWT 3
K Graphics.drawImage() sehr schnell AWT, Swing, JavaFX & SWT 5
M Graphics-Objekt aktualisiert sich nicht AWT, Swing, JavaFX & SWT 2
N paintComponent für Graphics ansprechen AWT, Swing, JavaFX & SWT 2
M Graphics.drawImage verlangsamt sich plötzlich AWT, Swing, JavaFX & SWT 15
S Swing AWT (graphics (g)) AWT, Swing, JavaFX & SWT 27
E einfache Frage zu paintComponent und Graphics AWT, Swing, JavaFX & SWT 7
B Swing Tooltips auf Graphics AWT, Swing, JavaFX & SWT 8
Ä Graphics-Komponente auf JPanel wird nicht angezeigt AWT, Swing, JavaFX & SWT 4
S Applet mit Graphics dynamisch vergrößern AWT, Swing, JavaFX & SWT 3
T Dialog ohne Frame, direktes paint in graphics AWT, Swing, JavaFX & SWT 5
T Swing Component in Graphics zeichnen AWT, Swing, JavaFX & SWT 4
J getFontMetrics außerhalb von paint(Graphics g) AWT, Swing, JavaFX & SWT 8
E Problem bzw. Sinn von Graphics / Graphics Context AWT, Swing, JavaFX & SWT 21
S Weder ActionListener noch Graphics wollen so recht AWT, Swing, JavaFX & SWT 3
F Methode drawOval(int,int,int,int) von graphics AWT, Swing, JavaFX & SWT 4
G Graphics Objekte in AWT Container einfügen AWT, Swing, JavaFX & SWT 2
S Mit Graphics g ins Fenster zeichnen AWT, Swing, JavaFX & SWT 4
G Graphics - Raute AWT, Swing, JavaFX & SWT 3
G "pinseldicke" bei Graphics? AWT, Swing, JavaFX & SWT 2
G Graphics.drawImage() AWT, Swing, JavaFX & SWT 6
D Methode Graphics g klassenübergreifend nutzen. AWT, Swing, JavaFX & SWT 3
W java.lang.NoClassDefFoundError: org/eclipse/swt/graphics/Dev AWT, Swing, JavaFX & SWT 1
B Graphics und Canvas - Problem AWT, Swing, JavaFX & SWT 2
H eigene paintComponent(Graphics) kommt mit rezise nicht klar AWT, Swing, JavaFX & SWT 6
T Transparenz bei Graphics AWT, Swing, JavaFX & SWT 9
L Graphics AWT, Swing, JavaFX & SWT 37
B JPanel#paintComponent(Graphics g) << flackert oO AWT, Swing, JavaFX & SWT 3
Y Problem mit der Referenz eines Graphics-Objekts AWT, Swing, JavaFX & SWT 5
O Graphics erstellt Componente scheinbar nicht richtig AWT, Swing, JavaFX & SWT 23
G 2x Graphics in einer paint() miteinander verbinden AWT, Swing, JavaFX & SWT 11
K Gutes Buch gesucht (Graphics Only) Kennt jemand eins? AWT, Swing, JavaFX & SWT 5
K Graphics-Objekt zeichnet nicht alle Bilder AWT, Swing, JavaFX & SWT 3
J Einmal gleichzeitig auf zwei Graphics malen? AWT, Swing, JavaFX & SWT 5
E Image, Graphics, verzögert zeichnen AWT, Swing, JavaFX & SWT 2
N Graphics Objekt "puffern" AWT, Swing, JavaFX & SWT 7
H neuzeichnen von graphics nach minimierung oder ähnlichem AWT, Swing, JavaFX & SWT 10
G SWT Graphics Zeichnung neu laden AWT, Swing, JavaFX & SWT 13
G SWT Graphics GC Problem AWT, Swing, JavaFX & SWT 6
M Abstrakte Graphics Klasse erzeugen AWT, Swing, JavaFX & SWT 2
H awt Graphics und Image selbermachen ? AWT, Swing, JavaFX & SWT 12
D Image aus Graphics erstellen? AWT, Swing, JavaFX & SWT 2
R Graphics Objekt ändern AWT, Swing, JavaFX & SWT 11
raptorrs J2D graphics, sind 500px immer 500 px AWT, Swing, JavaFX & SWT 2
G Graphics AWT, Swing, JavaFX & SWT 2
H Graphics: Schriftgröße ändern AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben