Swing + Paint: Mehrere Objekte zeichnen lassen

H2O2

Mitglied
Hallo,
bin neu hier im Forum und bin kein "Profi" im programmieren. Ich versuch mich gerade an der paint / paintComponent Methode -(gibt es da nen Unterschied)- komme allerdings nicht weiter.

Und zwar habe ich quasi einen Zeiger einer Uhr programmiert, der in einer externen Klasse "berechnet" wird und mit Hilfe der Koordinaten dann gezeichnet wird.

Allerdings kann ich keine zwei Zeiger anzeigen lassen, da das erste immer verschwindet.o_O
Ich könnte auch zwei Zeiger programmieren aber da das Projekt noch größer werden soll muss ich später sowieso noch mehrere Uhren erstellen, also will ich das Problem erstmal lösen.

Ich hab mehrere Theorien wieso das erste verschwindet:
1: Das zweite Überdeckt das erste komplett.
2: Wenn ich das erste Objekt dem JFrame hinzufüge kann kein zweites hinzugefügt werden.
3: paint zeichnet nur den letzten Befehl. Ich habe aber zwei Objekte vom Typ Uhr erstellt, deswegen dachte ich, dass er dann beide zeichnen wird

Wahrscheinlich ist es nen Denkfehler irgendwo. Oder vielleicht auch was grundlegendes was ich falsch mache.

Java:
import java.awt.Dimension;
import java.awt.Toolkit;

import javax.swing.JFrame;


public class Hour
{
    static JFrame frm;
    static Dimension dim;
   
    Uhr u1 = new Uhr(50, 50, 1, 30);
    Uhr u2 = new Uhr(100, 100, 15, 15);
   
    public Hour()
    {
        frm.add(u1);
        frm.add(u2);
    }
   
    public static void main(String[] args)
    {
        dim = Toolkit.getDefaultToolkit().getScreenSize();
       
        frm = new JFrame();
        frm.setSize(200, 200);
        frm.setLocation(dim.width/2 - frm.getSize().width/2, dim.height/2 - frm.getSize().height/2);
        frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frm.setVisible(true);
       
        new Hour();
    }
}
Java:
import java.awt.Graphics;

import javax.swing.JPanel;


public class Uhr extends JPanel
{
    private long clockspd = 100;
   
    private int x = 50 ,y = 50;
    private int nx = 50 ,ny = 50;
   
    double angle = 0, length = 0;
   
    public Uhr(int px, int py, double pangle, double plength)
    {
        x = px;
        y = py;
        angle = pangle;
        length = plength;
       
        Thread thread = new Thread()
        {
            public void run()
            {
                action();
            }
        };
        thread.start();
    }
   
    public void action()
    {
        for(int i=0; i<20; i++)
        {
            new Calc(this, angle*i, length);
            nx = (int)Calc.bx;
            ny = (int)Calc.by;
            try {
                Thread.sleep(clockspd);
            }
            catch(InterruptedException ex) {
                Thread.currentThread().interrupt();
            }
            repaint();
        }
    }
   
    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);
       
        g.drawLine(x, y, x+nx, y+ny); //0, -30
    }
   
    public int getXCoor()
    {
        return x;
    }
   
    public int getYCoor()
    {
        return y;
    }
}
Java:
public class Calc
{
    static double bx = 0;
    static double by = 0;
   
    public Calc(Uhr u, double angle, double length)
    {
        if(angle <= 180)
        {
            by = -length * Math.cos(Math.toRadians(angle));
            bx = Math.sqrt(Math.pow(length, 2)-Math.pow(by, 2));
        }
        if(angle > 180)
        {
            by = -length * Math.cos(Math.toRadians(angle));
            bx = -Math.sqrt(Math.pow(length, 2)-Math.pow(by, 2));
        }
    }
}

Hoffe es kann jemand helfen :)
 

Thallius

Top Contributor
Du kannst nicht mit static arbeiten wenn du mit Threads arbeitest. Die static Variablen bx und by existieren nur einmal in deiner Klasse Calc. Da du für jede Uhr die gleiche Klasse benutzt, wird auch jede Uhr die gleichen Variablen zum Zeichnen benutzen und damit das gleiche zeichnen. Du must die Variablen als Instanz-Variablen deklarieren und einen Getter dafür schreiben. Dann must du in Uhr eine Instanz der Klasse Calc erstellen und die Werte mit den Gettern daraus holen.

Am besten liest du dir erst einmal was durch zu Objekten, Klassen und Instanzen von Klassen. Solange Du das nicht gelernt hast. wird das nichts :)

Gruß

Claus
 

H2O2

Mitglied
Du kannst nicht mit static arbeiten wenn du mit Threads arbeitest. Die static Variablen bx und by existieren nur einmal in deiner Klasse Calc. Da du für jede Uhr die gleiche Klasse benutzt, wird auch jede Uhr die gleichen Variablen zum Zeichnen benutzen und damit das gleiche zeichnen.
Stimmt. Hab das static nun überall entfernt und in Calc zwei sondierende Methoden reingebaut die bx und by zurückliefern. Hab in Uhr ein Objekt der Klasse Calc erstellt und initialisiere es in der for-Schleife mit
Java:
c = new Calc(this, einDouble, andererDouble);
. Vielleicht liegt hier der Fehler, denn es wird immernoch nur die zweite Uhr angezeigt.:(

Die action-methode:
Java:
public void action()
    {
        for(int i=0; i<20; i++)
        {
            c = new Calc(this, angle*i, length);
            nx = (int)c.getBx();
            ny = (int)c.getBy();
            try {
                Thread.sleep(clockspd);
            }
            catch(InterruptedException ex) {
                Thread.currentThread().interrupt();
            }
            repaint();
        }
    }
 

H2O2

Mitglied
Versteh ich es überhaupt richtig, dass wenn ich in der Klasse Hour
Java:
Uhr u1 = new Uhr(50, 50, 1, 30);
Uhr u2 = new Uhr(100, 100, 15, 15);
aufrufe, ich zwei Objekte des Typs Uhr habe. Somit wird die Klasse Uhr zwei mal aufgerufen und die variablen x und y aud Uhr gibt es zwei mal im Speicher? Dann müsste paint ja beides zeichnen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H 2D-Grafik Problem mit Paint AWT, Swing, JavaFX & SWT 1
frager2345 Warum paintComponent hier und nicht paint AWT, Swing, JavaFX & SWT 2
U Was ist der Unterschied von paint und paincomponent? AWT, Swing, JavaFX & SWT 3
L 2D-Grafik Swing paint|paintComponent AWT, Swing, JavaFX & SWT 2
krgewb 2D-Grafik paint-Methode wird zu oft ausgeführt AWT, Swing, JavaFX & SWT 5
S Zeichen ohne paint-Methode AWT, Swing, JavaFX & SWT 2
J Swing Wann brauche ich @Override vor der paint()-Methode? AWT, Swing, JavaFX & SWT 1
G Eine paint-Methode, 2 Welten? AWT, Swing, JavaFX & SWT 3
A paint-Methode aufrufen AWT, Swing, JavaFX & SWT 13
Xanny 2D-Grafik Beginner! Probleme mit Swing, Gprahics class und paint AWT, Swing, JavaFX & SWT 13
L Berechnungen in paint AWT, Swing, JavaFX & SWT 8
S Grafik: Programm kommt nicht zur paint()-Methode AWT, Swing, JavaFX & SWT 6
W Paint-Methode in anderer Klasse funktioniert nicht AWT, Swing, JavaFX & SWT 7
S 2 Paint-Methoden in einer Klasse ? AWT, Swing, JavaFX & SWT 2
J zwei Paint methoden in einer Klasse AWT, Swing, JavaFX & SWT 3
P Paint und paintComponent AWT, Swing, JavaFX & SWT 12
F 2D-Grafik Was ruft die Paint - Methode auf ? AWT, Swing, JavaFX & SWT 2
S JButton u. Label auf paint-Methode AWT, Swing, JavaFX & SWT 1
S 2 paint-Methoden in einer Klasse ? AWT, Swing, JavaFX & SWT 2
S Paint Methode ohne implements JPanel AWT, Swing, JavaFX & SWT 1
S Farbe ändern bei der paint-Methode AWT, Swing, JavaFX & SWT 5
J ActionListener soll auf paint() Methode zugreifen AWT, Swing, JavaFX & SWT 1
J Problem mit der paint Methode AWT, Swing, JavaFX & SWT 0
Junb 2D-Grafik paint() Methode bugt? AWT, Swing, JavaFX & SWT 2
C JFrame paint ohne hintergrund nutzen AWT, Swing, JavaFX & SWT 6
I Paint-Methode von nicht statischen Objekten aufrufen AWT, Swing, JavaFX & SWT 3
A Swing Paint mit Button Clear den Hintergrund säubern um wieder zeichnen zu können AWT, Swing, JavaFX & SWT 2
K 2D-Grafik Paint - Wie binde ich repaint ein? AWT, Swing, JavaFX & SWT 8
D JSlider "laggt" nach überschreiben der paint methode AWT, Swing, JavaFX & SWT 2
S paint() verzögern AWT, Swing, JavaFX & SWT 9
K AWT begrenzte anzahl paint aufrufe AWT, Swing, JavaFX & SWT 6
B Infolabel Probleme mit Paint() ? AWT, Swing, JavaFX & SWT 8
L AWT paint mit ArrayList und Iterator AWT, Swing, JavaFX & SWT 3
Furtano AWT paint braucht ein Graphics Objekt ? AWT, Swing, JavaFX & SWT 2
L Swing 64bit Problem mit paint/paintComponent AWT, Swing, JavaFX & SWT 7
A Paint Methode externer auruf AWT, Swing, JavaFX & SWT 5
T JFrame und paint() AWT, Swing, JavaFX & SWT 5
B Ablauf der paint-Methoden von JComponents AWT, Swing, JavaFX & SWT 20
J AWT Methode paint() AWT, Swing, JavaFX & SWT 4
F 2D-Grafik Hostkomponentengröße in paint AWT, Swing, JavaFX & SWT 2
L JFrame an Paint-Inhalt anpassen AWT, Swing, JavaFX & SWT 6
E Warum übermalt paint das ganze Fenster? AWT, Swing, JavaFX & SWT 15
X Bild via FileChooser in paint-Methode laden AWT, Swing, JavaFX & SWT 2
T paint() wird nicht aufgerufen AWT, Swing, JavaFX & SWT 8
M JMenuBar im Applet und paint AWT, Swing, JavaFX & SWT 9
G paint-Methode kopiert GUI AWT, Swing, JavaFX & SWT 14
H paint überlappend AWT, Swing, JavaFX & SWT 5
E paint AWT, Swing, JavaFX & SWT 3
H Swing paint() von JPanel wird nicht aufgerufen AWT, Swing, JavaFX & SWT 10
L AWT Paint(g) im Listener aufrufen AWT, Swing, JavaFX & SWT 2
S JCheckBox Paint AWT, Swing, JavaFX & SWT 7
F AWT Probleme mit der paint() methode AWT, Swing, JavaFX & SWT 2
C Unterschiedlicher Aufruf der paint() Methode ? (AWT/Swing) AWT, Swing, JavaFX & SWT 2
L Problem mit paint Methode und Bild AWT, Swing, JavaFX & SWT 7
F Swing Paint mit Canvas Element AWT, Swing, JavaFX & SWT 35
K AWT paint wird nicht aufgerufen AWT, Swing, JavaFX & SWT 7
R LayoutManager Image Paint + Text Panel AWT, Swing, JavaFX & SWT 10
F paint-Methode des JComboboxEditorComponent AWT, Swing, JavaFX & SWT 2
S Threads in einen Frame zeichnen lassen (Paint()?!) AWT, Swing, JavaFX & SWT 5
radiac Swing JFrame - paint(g) - FrameObjects bei activeRendering AWT, Swing, JavaFX & SWT 3
I AWT paint() in MouseEvent aufrufen klappt nicht AWT, Swing, JavaFX & SWT 8
T paint() wird zweimal ausgeführt AWT, Swing, JavaFX & SWT 6
hdi Swing JLabel & paint-Methode gemixt - wie schlimm wirklich? AWT, Swing, JavaFX & SWT 5
N Paint methode anhalten und neustarten AWT, Swing, JavaFX & SWT 5
H AWT Wann ist paint() fertig? AWT, Swing, JavaFX & SWT 7
R [gelöst]Fenster schließen - trotz Endlosschleife in der Paint-Methode? AWT, Swing, JavaFX & SWT 3
W Steuerelemente und paint() in einem JPanel AWT, Swing, JavaFX & SWT 3
M Allgemeines zur paint Methode AWT, Swing, JavaFX & SWT 5
M AWT Component/Canvas erzeugt unerwünschten Rahmen bei paint AWT, Swing, JavaFX & SWT 3
T Dialog ohne Frame, direktes paint in graphics AWT, Swing, JavaFX & SWT 5
G Probleme mit repaint / paint AWT, Swing, JavaFX & SWT 6
A paint()-Methode für Videoexport nutzen AWT, Swing, JavaFX & SWT 2
K repaint() ruft paint() nicht auf AWT, Swing, JavaFX & SWT 14
J Canvas / paint() AWT, Swing, JavaFX & SWT 2
bugmenot paint() verzögert ausgeführt? AWT, Swing, JavaFX & SWT 4
S paint() in anderen Methoden AWT, Swing, JavaFX & SWT 5
J getFontMetrics außerhalb von paint(Graphics g) AWT, Swing, JavaFX & SWT 8
D Paint() Methode aus einer anderen Klasse aufrufen AWT, Swing, JavaFX & SWT 6
H paint verwenden AWT, Swing, JavaFX & SWT 3
S java.awt.Component und paint() AWT, Swing, JavaFX & SWT 4
A Paint funktioniert nicht richtig AWT, Swing, JavaFX & SWT 7
L Dynamisches Ändern der Größe in JPanel mit paint()-Methode AWT, Swing, JavaFX & SWT 8
G JScrollPane mit "paint" scrollt nicht AWT, Swing, JavaFX & SWT 2
C paint-Methode überschreiben AWT, Swing, JavaFX & SWT 19
hdi meine paint-methode macht faxen? AWT, Swing, JavaFX & SWT 21
T Variable Menge an Bildern außerhalb paint() zeichnen? AWT, Swing, JavaFX & SWT 2
G Paint und Buttons AWT, Swing, JavaFX & SWT 8
G JFrame JPanel und Paint(Image)? AWT, Swing, JavaFX & SWT 6
S Programm aufgrund von paint() zu langsam AWT, Swing, JavaFX & SWT 18
G paint() wird aufgerufen, aber nicht angezeigt AWT, Swing, JavaFX & SWT 10
G 2x Graphics in einer paint() miteinander verbinden AWT, Swing, JavaFX & SWT 11
M Probleme mit paint() aus JFrame AWT, Swing, JavaFX & SWT 2
G paint() Methode aus anderer klasse aufrufen? AWT, Swing, JavaFX & SWT 6
G Frage zum paint Prozess AWT, Swing, JavaFX & SWT 3
D JPanel und Paint AWT, Swing, JavaFX & SWT 2
B Gui und Zeichnen (paint ? ) AWT, Swing, JavaFX & SWT 4
L Anzeigen von fotos: ImageIcon oder BufferedImage + paint() ? AWT, Swing, JavaFX & SWT 5
G Frage zur paint-Methode (AWT) AWT, Swing, JavaFX & SWT 9
B Button anzeigen bei überschrieber paint() AWT, Swing, JavaFX & SWT 12
N paint Methode im JFrame AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben