Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Slenderguy

Frischling

  • »Slenderguy« ist der Autor dieses Themas

Beiträge: 53

Wohnort: Schleswig-Holstein

  • Private Nachricht senden

1

07.11.2015, 18:41

[Java] Fragen über Komponenten

Hallo,
Ich frage mich wie ich (bei Swing) auf einem Frame zeichnen kann.
Z.B. erstelle ich in der main() Methode einen Frame mit Attributen, danach einen void für PaintComponent.
Die meisten, glaube Ich zumindest, erstellen fürs Zeichnen eine neue Klasse und fügen die Klasse dann über dem Frame mit add() ein.
Wie kann ich direkt aus der Main-Klasse aus Zeichnen, das verstehe ich nicht so genau. Was muss ich denn beachten ?

Wieso geht das nicht so wie in dem Beispiel ?

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Test {
    public static int width = 400, height = 500;
            
    
            public static void main(String[] args){
                JFrame jframe = new JFrame("Zeichnen");
                jframe.setSize(width, height);
                jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                jframe.setLocationRelativeTo(null);
                jframe.setVisible(true);
                
            }
            public void paintComponent(Graphics g){
                g.fillRect(10, 10, width, height);
            }
    }

Ich würde mich über eine Persönliche Antwort sehr freuen, danke :D .

2

07.11.2015, 19:34

Woher soll die Instanz von JFrame denn wissen, welche paintComponent-Methode es aufrufen soll?

Slenderguy

Frischling

  • »Slenderguy« ist der Autor dieses Themas

Beiträge: 53

Wohnort: Schleswig-Holstein

  • Private Nachricht senden

3

07.11.2015, 19:42

@Roflo dass weiss ich leider auch nicht.
Mit jframe.add(paintComponent()); geht das nicht.
Bitte sag du es mir, ich frage mich das schon seid mehreren Tagen :(

Slenderguy

Frischling

  • »Slenderguy« ist der Autor dieses Themas

Beiträge: 53

Wohnort: Schleswig-Holstein

  • Private Nachricht senden

4

07.11.2015, 20:25

Danke für den einen Link.
Ich konnte mir einfach keine Methode ausdenken die das macht.
So werde ich es jetzt machen:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
public class Test extends JPanel{
public static void main(String[] args){
JFrame jframe = new JFrame("Mein frame");
jframe.setSize(100, 100);
jframe.add(new Konsole());
jframe.setVisible(true);
}
public void paintComponent(Graphics g){
g.fillRect(10, 10, 10, 10);
}
}

Ich habe einfach nicht an die new zuweisung bei add gedacht :(

Slenderguy

Frischling

  • »Slenderguy« ist der Autor dieses Themas

Beiträge: 53

Wohnort: Schleswig-Holstein

  • Private Nachricht senden

5

07.11.2015, 20:29

Wieso klappt das dann nicht ?

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
public class Test  {
    public static void main(String[] args){
        JFrame jframe = new JFrame("Beispiel");
        jframe.setSize(300, 300);
        jframe.add(new any());
        jframe.setVisible(true);
    }
    class any extends JPanel{
        public void paintComponent(Graphics g){
            g.fillRect(10, 10, 10, 10);
        }
    }
    }

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

6

07.11.2015, 20:48

Weil Du versuchst eine non-static nested class aus einem static method Kontext heraus zu instanziieren.
Oder anders gesagt: Eine Instanz von einer non-static nested class kann nur aus einer Instanz der Parent class heraus instanziiert werden. Du hast aber keine Instanz von Test.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Slenderguy

Frischling

  • »Slenderguy« ist der Autor dieses Themas

Beiträge: 53

Wohnort: Schleswig-Holstein

  • Private Nachricht senden

7

07.11.2015, 21:40

Weil Du versuchst eine non-static nested class aus einem static method Kontext heraus zu instanziieren.
Oder anders gesagt: Eine Instanz von einer non-static nested class kann nur aus einer Instanz der Parent class heraus instanziiert werden. Du hast aber keine Instanz von Test.
Danke, danke 8o
Jetzt hab ichs raus.

Nur noch das bitte.
Dann nerve ich auch nicht mehr mit den Dummen fragen.
Wieso funktioniert der ActionListener hier nicht ?

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public class Test implements ActionListener{
    public static int x = 0;
    
    
    public static void main(String[] args){
        new Test(); 
    }
    public Test(){
        
        JFrame jframe = new JFrame();
        jframe.setSize(300, 300);
        jframe.add(new any());
        jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jframe.setVisible(true);
        
        Timer t = new Timer(100, this);
        t.start();
        
    }
    @Override
    public void actionPerformed(ActionEvent e){
        x = +5;
    }
        
    static class any extends JPanel {
        public void paintComponent(Graphics g){
            g.fillRect(x, 10, 10, 10);
        }

        
    }
}

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

8

07.11.2015, 22:05

Was heißt bei Dir "funktioniert nicht"? Ich denke schon, dass er gerufen werden sollte. Aber da wird sicherlich nichts neu gezeichnet. Wieso sollte auch, wird ja nirgends angetriggert.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Slenderguy

Frischling

  • »Slenderguy« ist der Autor dieses Themas

Beiträge: 53

Wohnort: Schleswig-Holstein

  • Private Nachricht senden

9

08.11.2015, 18:13

@[Anonymer Benutzer]Soft
Für eins deiner ersten Programme ist das schon weit Fortgeschritten, denke ich.
Muss das den so kompliziert sein ?
Aber ich danke dir für die Mühe :)

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

10

08.11.2015, 18:48

Du kannst den Code eins zu eins kopieren
Ich würde empfehlen das zu lassen. Durch Kopieren lernt man so gut wie nichts.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige