AWT Graphics initialisieren

realodds

Aktives Mitglied
Hallo,
ich habe ein kleines Problem in einem größeren Projekt:
Code:
//Klasse Drawing (JComponent)
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
String str1 = "";
g2.drawString(str1,0,90);
}
public void setStr1(String str1) {
this.str1 = str1;
}
soweit verstehe ich es noch, g wird automatisch initialisiert.
Code:
//Klasse Graphic
JFrame frame = new JFrame("");
frame.setDefaultCloseOperation(JFrame.EXIR_ON_CLOSE);
frame.setSize(500,500);
Drawing d = new Drawing();
frame.add(d);
//bei einem ereignis wird str1 (aus Drawing) verändert und soll erneut gezeichnet werden
//nicht das ereignis
if (1<3){
d.setStr1("Hallo");
//paint(Graphics g) soll erneut durchlaufen, um den string zu zeichnen
/*
Graphics g;
d.paint(g);
//Das klappt natülich nicht, da g null ist
*/
//wenn ich es mit dem probierte:
d.paint(d.getGraphics);
//klappte es auch nicht, da es null ist "java.lang.NullPointerException"
}
Welche Graphics muss ich benutzen, wie kann ich sie initialisieren oder gehe ich da komplett falsch heran?
Danke im Voraus
 

realodds

Aktives Mitglied
Ja. Erstens überschreibt man in Swig nicht paint sondern paintComponent, zweitens reicht ein einfaches d.repaint();
Also ich habe jetzt, nach deinem Vorschlag, es geändert und d.repaint(); benutzt, allerdings klappt das auch nicht. Es ist kein Problem bezüglich der Graphics mehr, aber trotzdem habe ich im Debug Modus überprüft und bei d.repaint(); geht es nicht in die andere klasse hinein, um den string zu zeichnen.
 

LimDul

Top Contributor
Wie sieht deine Methode paintComponent aus? So wie da oben paint? Da erzeugst du ein neues String Objekt was du zeichnest und zeichnest nicht das Feld.
 

realodds

Aktives Mitglied
Ja wie da oben, oben ist es halt vereinfacht. Aber bei repaint(); wird gar nicht erst in die andere methode reingegangen bzw. es wird auch nicht gezeichnet
 
K

kneitzel

Gast
Also bei repaint geht er nicht direkt rein in die andere Methode. Repaint signalisiert nur, dass die Komponente erneut gemalt werden soll. Das erfolgt dann kurze Zeit später sobald der UI Thread dazu kommt.

Zeig doch bitte etwas mehr von Deinem Code und was wichtig ist:
a) Deine Komponente überschreibt paintComponent korrekt.
b) Du blockierst nicht den UI Thread.
 

realodds

Aktives Mitglied
Es ist nicht viel mehr als das dort oben:
Code:
public class Drawing extends JComponent{
String str1 = "";
//noch weitere Strings, die aber denke ich nicht wichtig sind
public paintComponent(Graphics g){
Graphics2D g2 = (Graphics2D) g;
g2.drawString(str1,5,90);
g2.drawRect(0,0,100,100);
}
}
Code:
public class Graphic extends JFrame implements MouseListener{
public void gui(){
setDeafultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(800,800);
setUndecorated(true);
Drawing d = new Drawing();
add(d);
}
public void mousePressed(MouseEvent e){
Rectangle r1 = new Rectangle(0,0,100,100);
if (r1.contains(e.getPoint())){
d.setStr1("Pressed here");
}
}
}
Und dann ist das Problem, dass bei repaint(); str1 immer noch als "" gezeichnet wird, da es nur nochmal gezeichnet wird und nicht durchläuft
 
K

kneitzel

Gast
Also da sieht erst einmal alles soweit ok aus und so wie ich Dich jetzt verstehe ist das Problem auch eher so, dass str1 nicht umgesetzt wird?

Soll das in dem MouseListener erfolgen? Hast Du denn denn hinzu gefügt?

Und in gui() erzeugst Du eine Drawing Instanze und speichert diese in einer lokalen Variable d. Wenn Du auch eine Instanzvariable d hast, die Du in mousePressed nutzen willst, dann enthält die natürlich nicht die Drawing Instanz, die du in gui() erzeugt hast....
 

realodds

Aktives Mitglied
Ja, stimmt das habe ich alles in Program drin, hier hab ichs vergessen ^^". Das Programm geht in den MousePressed rein und die bedingung usw. klappt alles. str1 wird zu "Pressed here" umgeändert und dies soll dann gezeichnet werden.
 
K

kneitzel

Gast
Also mit den limitierten Ausschnitten wird dir wohl keiner wirklich helfen können fürchte ich. Bau ein minimales, komplettes Beispiel mit der Problematik, das du ganz einstellst und dann können wir gerne im Detail schauen ...
 

mihe7

Top Contributor
Ja, stimmt das habe ich alles in Program drin, hier hab ichs vergessen ^^". Das Programm geht in den MousePressed rein und die bedingung usw. klappt alles. str1 wird zu "Pressed here" umgeändert und dies soll dann gezeichnet werden.
Nochmal: Deinem d.setStr1 muss ein repaint() des Drawing-Objekts folgen. Am Besten machst Du das in der Methode setStr1.
 

Blender3D

Top Contributor
Hallo,
ich habe ein kleines Problem in einem größeren Projekt:
Ich habe Dir ein kleines Beispiel gemacht.
Links klicken --> neue Position des Textes
Rechts klicken --> neuen Text eingeben

Java:
import javax.swing.JComponent;

@SuppressWarnings("serial")
public class Drawing extends JComponent {
    private int x = 0;
    private int y = 0;
    private String text = null;

    public String getText() {
        return text;
    }
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        if (text != null)
            g.drawString(text, x, y);
    }
    public void setTextLocation(int x, int y) {
        this.x = x;
        this.y = y;
    }
    public void setText(String text) {
        this.text = text;
    }
}
Java:
import java.awt.Dimension;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
public class start {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Drawing click left or right on frame ");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Drawing drawing = new Drawing();
        drawing.setText("test");
        drawing.setTextLocation(0, 90);
        frame.add(drawing);
        frame.setPreferredSize(new Dimension(500, 500));
        frame.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                if (e.getButton() == MouseEvent.BUTTON3) {
                    String text = JOptionPane.showInputDialog(drawing, "Text eingeben", drawing.getText());
                    if (text != null)
                        drawing.setText(text);
                }
                if (e.getButton() == MouseEvent.BUTTON1) {
                    Point pos = e.getPoint();
                    drawing.setTextLocation(pos.x, pos.y);
                }
                drawing.repaint();
            }
        });
        frame.pack();
        frame.setVisible(true);
    }
}
 

realodds

Aktives Mitglied
Also ein Beispiel von mir:
Code:
public class Graphic implements MouseListener{
public static void main(String[] args){
JFrame window = new JFrame();
window.setSize(300,300);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Drawing drw = new Drawing();
window.add(drw);
window.addMouseListener(this)
    public void mousePressed(MouseEvent e) {
    Drawing drw = new Drawing();
    drw.setStr("Clicked");
    //drw.repaint();
    }
    
}
}
Code:
public class Drawing extends JComponent {
String str = "";
    public void setStr1(String str1) {
        this.str1 = str1;
    }
public void paintComponent (Graphics g){
g.drawLine(0,90,300,90);
g.drawString(str,140,90);
}
}
weil ich das nicht so wirklich verstehe bzw auf meins umsetzen kann ^^". Trotzdem Danke.
Was müsste ich hier konkret ändern? Danke im Voraus und für all eure Antworten ^^
 

mihe7

Top Contributor
Java:
public class Graphic implements MouseListener {
    private Drawing drawing;

    public void run() {
        drawing = new Drawing();
        drawing.addMouseListener(this)

        JFrame window = new JFrame();
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.add(drawing);
        window.setSize(300,300);
        window.setVisible(true);
    }

    public void mousePressed(MouseEvent e) {
        drawing.setStr("Clicked");
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new Graphic().run());
    }
}


Java:
public class Drawing extends JComponent {
    private String str = "";

    public void setStr1(String str1) {
        this.str1 = str1;
        repaint();
    }

    public void paintComponent (Graphics g){
        g.drawLine(0,90,300,90);
        g.drawString(str,140,90);
    }
}
 

LimDul

Top Contributor
Also ein Beispiel von mir:
Java:
public class Graphic implements MouseListener{
public static void main(String[] args){
JFrame window = new JFrame();
window.setSize(300,300);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Drawing drw = new Drawing();
window.add(drw);
window.addMouseListener(this)
    public void mousePressed(MouseEvent e) {
    Drawing drw = new Drawing();
    drw.setStr("Clicked");
    //drw.repaint();
    }
    
}
}
Die Zeile
Drawing drw = new Drawing();
in mousePressed ist kompletter Humbug. Du erzeugt ein neues Drawing Objekt und änderst da den string. Das ist schön, ändert aber nix an dem angezeigten Drawing Objekt. Die Zeile muss komplett raus. Du willst ja das Drawing Objekt ändern, was du in der main Methode erzeugt hast.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
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
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
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
X Problem mit Image und Graphics AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben