Graphics Objekte scalen mit Veränderung des Bildschirms

NicoHatProbleme2

Bekanntes Mitglied
Das hier ist eine Funktion der Klasse Char, die ich nutze:
Java:
public void draw(Graphics2D g2d, int x, int y, int yOffset) {
        indentSize = g2d.getFontMetrics().charWidth(' ')*5*indent;
        this.x = x + indentSize;
        this.y = y;
        g2d.setFont(font);
        this.height = g2d.getFontMetrics().getHeight();
        g2d.setColor(color);
        g2d.drawString("" + c, this.x, y + yOffset);
        offset = g2d.getFontMetrics().charWidth(c);
      
    }
 

NicoHatProbleme2

Bekanntes Mitglied
Sonst könnte ich mir nichts vorstellen, dass die Verzerrung verursacht. Ich dachte, dass Graphics2Ds drawString mit dem Scalen des Bildschirms mitscaled. Wenn ich den Bildschirm sehr dünn mache, wird die Schrift auch zusammengedrückt (mit setResizable(true)).
 

Jw456

Top Contributor
Mal eine Frage wiso gibst du deiner Methode nur den offset in y Richtung mit und nicht auch X Richtung.
Die wird sich beim zoomen wohl auch verändert haben.
 

KonradN

Super-Moderator
Mitarbeiter
Kannst Du etwas genauer beschreiben, was Du genau machst? Du hast eine Swing Anwendung mit einem JFrame.
Dann hast Du irgend eine Loop Methode, die etwas malt? Auf was malst Du wann / wie?

Der generelle Ablauf sollte eigentlich so sein:
  • Das JFrame malt sich, wenn es von außen aufgefordert wird. (Event Loop bekommt ein WM_PAINT). Dazu wird dann die ganze paint / paintComponent Chain aufgerufen für alle Childs und so.
  • Das Graphics Objekt einer solchen Methode sollte nicht irgendwo außerhalb der Methode bzw, direkt aufgerufener Methoden verwendet werden. Also nicht irgendwo speichern um dann außerhalb des UI-Threads darauf zugreifen.

Natürlich kann es sein, dass man direkt etwas malen möchte. Gameloop eines Spieles ist da ein gutes Beispiel. Da wird dann aber in der Regel der Inhalt erstellt und dann dem UI Thread zur Verfügung gestellt (Mit ggf. Aufruf repaint() was dann ein WM_PAINT Event in die Eventloop packt).

Evtl. kommt es zu Verzerrungen, weil Du mit Instanzen arbeitest, die dafür nicht mehr wirklich gedacht sind?
 

NicoHatProbleme2

Bekanntes Mitglied
Java:
public void draw(Graphics2D g2d) {
        if(dbi == null) {
            dbi = createImage(getWidth(), getHeight());
            dbg = dbi.getGraphics();
        }
        Graphics2D dbg2d = (Graphics2D) dbg;
        dbg2d.setRenderingHints(renderhints);
        renderOffScreen(dbg2d);
        
        g2d.drawImage(dbi, 0, 0, getWidth(), getHeight(), null);
        
    }


Durch
Code:
draw((Graphics2D) this.getGraphics());
In public void update(double dt) {}
Mit this. als extends JFrame
 

Oneixee5

Top Contributor
Verstehe ich das richtig, du willst direkt auf ein JFrame malen? Das ist nicht der richtige Weg. Du solltest dem JFrame eine JComponent z.B. JPanel hinzufügen und dieses zum zeichnen verwenden.
 

KonradN

Super-Moderator
Mitarbeiter
Also paar Unterschiede kann man direkt feststellen: Wenn Du etwas gemalt hast und dann das Fenster neu gemalt werden muss (z.B bei einem maximieren), dann ist das Gemalte weg.

Also ein minimaler Test (Code aus main Methode):
Java:
        JFrame frame = new JFrame();
        frame.setSize(600, 400);
        frame.setVisible(true);
        Graphics2D graphics2D = (Graphics2D) frame.getGraphics();
        SwingUtilities.invokeLater(() -> graphics2D.drawLine(0, 0, 600, 400));

Wenn Du das Fenster angezeigt bekommen hast und es dann maximierst, dann ist der Strich weg.

Es macht halt Sinn, Verantwortlichkeiten zu trennen. Dann hast Du die Daten in irgendwelchen Model Klassen. Und die Daten zeigst Du dann an. Und bei den Swing Klassen ist es üblich paint bzw. paintComponent zu nutzen um die Darstellung zu machen.

Kaum packst Du das Malen der Linie in die entsprechende Methode (und das Graphics Objekt musst Du Dir nicht holen - das bekommst Du direkt als Parameter!) dann wird es immer wieder erneut aufgerufen, wenn notwendig. Also auch z.B. nach dem Maximieren des Fensters.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
ExceptionOfExpectation MouseListener-Objekte zu den Graphics-Objekten einfügen AWT, Swing, JavaFX & SWT 3
G Graphics Objekte in AWT Container einfügen AWT, Swing, JavaFX & SWT 2
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
R AWT Graphics initialisieren AWT, Swing, JavaFX & SWT 15
P JPanle, JFrame und Graphics AWT, Swing, JavaFX & SWT 2
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
D Frage zu JFrame und Graphics 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
M JFrame Graphics.drawString Problem AWT, Swing, JavaFX & SWT 11
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
M Graphics auf JFrame Koordinatensystem AWT, Swing, JavaFX & SWT 3
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
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
X Problem mit Image und Graphics AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben