# Anfänger - JFrame/JLabel nicht sichtbar



## shwN (3. Aug 2011)

Hallo,

wollte ein wenig mit Java Swing rumspielen, habe jedoch folgenden Fehler,
Mein Fenster wird problemlos angezeigt. Mein Label jedoch nicht, obwohl ich es mit add(label) hinzufüge.

Was mache ich da falsch?






```
package guione;

import java.awt.Frame;
import java.awt.Color;
import java.awt.Toolkit;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;



public class GuiOneApp 
{
    public static void main(String[] args) 
    {
        
        // Fenster
        JFrame frame = new Fenster("*** titel ***");
        System.out.println("Fenster erfolgreich geladen.");
        
        
        // Spieler 
        JLabel label = new Label(" label 1 ");
        System.out.println("Label erfolgreich geladen.");
        

        frame.add(label);
        frame.pack();
    }
}






class Fenster extends JFrame
{
    public Fenster(String fenstername)
    {
        JFrame fenster = new JFrame(fenstername);
        fenster.setBackground(Color.gray);
        fenster.setSize(600,200);
        fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        fenster.setLocationRelativeTo(null);        
        fenster.setResizable(false);
        fenster.setVisible(true);
    }
}


class Label extends JLabel
{
    public Label(String text)
    {
        JLabel label = new JLabel(text);
        label.setForeground(Color.blue);
    }
}
```


----------



## eRaaaa (3. Aug 2011)

Schau dir mal den Thread an:
http://www.java-forum.org/java-basics-anfaenger-themen/122432-aufruf-klasse-package.html

der macht den selben Fehler  (extends mal nachschlagen!)


----------



## shwN (3. Aug 2011)

Danke, aber bin jetzt trotzdem nicht mehr weitergekommen.

Finde auch den anderen Code ziemlich unübersichtlich.


Wenn ich das mit den Subklassen weglasse und einfach in der Main einen Frame und ein Label erstelle und das Label dem Frame hinzufüge funktioniert alles perfekt.

Aber eigentlich wollte ich das alles übersichtlich machen und in Subklassen verlagern, anstatt die Main-Funktion voll zuschreiben.


----------



## SlaterB (3. Aug 2011)

Fenster ist selber ein JFrame und dieses wird auch angezeigt,
im Fenster-Konstruktor werden Komponenten erstellt, aber nicht in Fenster selber eingefügt, 
sondern in ein separates normales JFrame-Objekt, welches nie angezeigt wird


----------



## eRaaaa (3. Aug 2011)

Ok kleiner Tipp noch: bei new Fenster() erstellst du bereits ein JFrame (da Fenster JFrame erweitert) ...das new JFrame ist überflüssig, genau so bei dem Label. Normal sollte man eig. Klassen nicht erweitern wenn man die eigentliche Funktion nicht weitgehend verändert/erweitert. 
Hier ist das Erweitern nicht notwendig. Du kannst ja trotzdem mehrere Klassen nutzen, dann erstellst du eben in deiner Fenster Klasse einen JFrame so wie jetzt auch schon, schreibst dir aber zusätzlich einen getter der den jFrame zurück gibt!


----------



## shwN (3. Aug 2011)

...aaaah danke !!

Habe das anfangs anders verstanden, aber ist eigentlich klar.
Problem gelöst! Funktioniert jetzt mit dem Code.




```
package guione;

import java.awt.Frame;
import java.awt.Color;
import java.awt.Toolkit;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;



public class GuiOneApp 
{
    public static void main(String[] args) 
    {
        
        // Fenster
        JFrame frame = new Fenster("*** titel ***");
        System.out.println("Fenster erfolgreich geladen.");
        
        
        // Spieler 
        JLabel label = new Label(" label 1 ");
        System.out.println("Label erfolgreich geladen.");
        

        
        // Komponenten ins Fenster hinzufügen
        frame.add(label);
        
        
        frame.setVisible(true);
    }
}






class Fenster extends JFrame
{
    public Fenster(String fenstername)
    {
        super(fenstername);
        setBackground(Color.gray);
        setSize(600,200);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);        
        setResizable(false);
    }
}


class Label extends JLabel
{
    public Label(String text)
    {
        super(text);
        setForeground(Color.blue);
    }
}
```


----------

