# Panel in GUI laden?



## FeelX (16. Nov 2007)

Ich habe zwei Klassen, einmal für die GUI und einmal fürs Panel. Nun will ich auf Knopfdruck das Panel in der GUI laden.


```
else if (cmd.equals("Übersicht"))
        {
            ÜbersichtPanel panelU = new ÜbersichtPanel();
            panelU.setBackground(Color.black);
            panelU.setBounds(40,110,310,250);
            this.add(panelU);

        }
```

Leider kommt dann immer die Fehlermeldung:
*Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: adding a window to a container*
 + noch viel mehr Text, aber ich denke in dieser Zeile liegt das Problem.

Was muss ich anders machen?[/i]


----------



## thE_29 (16. Nov 2007)

Schwer zu sagen, ohne die Klasse ÜbersichtPanel zu kennen!

Desweiteren BITTE BITTE verwende keine Ü,ö, etc im Klassennamen! Es ist zwar toll, das java sowas kann, aber tus bitte nicht!!!

Laut der Exception ist das ÜbersichtPanel eigentlich ein JDialog/JFrame oder JWindow und das kann man nicht auf ein Panel/JFrame/JDialog/JWindow, etc.. adden. Kann das sein?


----------



## FeelX (16. Nov 2007)

also mir wurde erzählt (u.a. auch von meinem Lehrer), dass das funktionieren müsste...
Es klappt auch wenn GUI und das Panel in einer Klasse sind, aber ich würde das gerne der Übersicht halber getrennt haben.


----------



## vdvaart23 (16. Nov 2007)

Hallo,

für eine Fehleranalyse bräuchten wir noch mehr Code!

Danke,
vdvaart23


----------



## FeelX (16. Nov 2007)

```
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;


public class GUI extends JFrame implements ActionListener  {

    private JTextField tGeld;
    private JTextField tOrangen;
    private JTextField tZucker;
    private JTextField tBecher;
    private JTextField tRuf;
    private UbersichtPanel panelU = new UbersichtPanel();
    private Speichern speichern = new Speichern();
    private Spieler spieler = new Spieler();

    public GUI() {

        super("Orange Tycoon");
        Container cp = new Container()
        {
          public void paint(Graphics g)
          {
            Image pic = Toolkit.getDefaultToolkit().getImage( "Images/gui.gif" );
            g.drawImage(pic,0,0,650,400, this);
            super.paint(g);
          }
        };
        this.getContentPane().setLayout(null);
        this.setContentPane(cp);

        // GeldAnzeige
        // Textfeld Geld
        tGeld = new JTextField (20);
        tGeld.setBounds (455, 195, 50, 30);
        tGeld.setEditable(false);
        tGeld.setText(""+spieler.getGeld());
        this.getContentPane().add (tGeld);
        // Geld-Label
        JLabel lGeld = new JLabel(new ImageIcon ("Images/Dollar.gif"));
        lGeld.setBounds(390, 200, 100, 20);
        this.getContentPane().add (lGeld);
        
        // WarenAnzeige
        // Textfeld Orangen
        tOrangen = new JTextField (20);
        tOrangen.setBounds (555, 195, 50, 30);
        tOrangen.setEditable(false);
        tOrangen.setText(""+spieler.getOrangen());
        this.getContentPane().add (tOrangen);
        // Orangen-Label
        JLabel lOrangen = new JLabel(new ImageIcon ("Images/Orange.gif"));
        lOrangen.setBounds(490, 200, 100, 20);
        this.getContentPane().add (lOrangen);
        
        // Textfeld Zucker
        tZucker = new JTextField (20);
        tZucker.setBounds(455, 230, 50, 30);
        tZucker.setEditable(false);
        tZucker.setText(""+spieler.getZucker());
        this.getContentPane().add (tZucker);
        // Zucker-Label
        JLabel lZucker = new JLabel(new ImageIcon ("Images/Zucker.gif"));
        lZucker.setBounds(390, 235, 100, 20);
        this.getContentPane().add (lZucker);
        
        // Textfeld Becher
        tBecher = new JTextField (20);
        tBecher.setBounds (555, 230, 50, 30);
        tBecher.setEditable(false);
        tBecher.setText(""+spieler.getBecher());
        this.getContentPane().add (tBecher);
        // Becher-Label
        JLabel lBecher = new JLabel(new ImageIcon ("Images/Becher.gif"));
        lBecher.setBounds(490, 235, 100, 20);
        this.getContentPane().add (lBecher);
        
        // Label Wetter
        JLabel lWetter = new JLabel("Wetter nächste Runde");
        lWetter.setBounds (455, 100, 150, 30);
        this.getContentPane().add (lWetter);
        // Laber Wetterbild
        JLabel lWetterBild = new JLabel("Bild");
        lWetterBild.setBounds(500, 140, 100, 20);
        this.getContentPane().add (lWetterBild);
        
        //Ruf
        // Textfeld Beliebtheit
        tRuf = new JTextField (20);
        tRuf.setBounds (420, 305, 62, 30);
        tRuf.setEditable(false);
        tRuf.setText(""+spieler.getBeliebtheit());
        this.getContentPane().add (tRuf);
        // Beliebtheit-Label
        JLabel lRuf = new JLabel("Beliebtheit:");
        lRuf.setBounds(420, 280, 100, 20);
        this.getContentPane().add (lRuf);
        
        // Label Tendenz
        JLabel lTendenz = new JLabel("Tendenz:");
        lTendenz.setBounds (550, 280, 100, 20);
        this.getContentPane().add (lTendenz);
        // Laber TendenzBild
        JLabel lTendenzBild = new JLabel("Bild");
        lTendenzBild.setBounds(560, 305, 100, 20);
        this.getContentPane().add (lTendenzBild);

        //Hauptmenü
        JButton bMenu = new JButton("Menu", new ImageIcon("Images/transparent.gif"));
        bMenu.setBounds (375, 10, 270, 72);
        bMenu.setContentAreaFilled(false);
        bMenu.setOpaque(false);
        bMenu.setBorderPainted(false);
        bMenu.addActionListener(this);
        this.getContentPane().add(bMenu);
        
        //Übersicht
        JButton bUbersicht = new JButton("Übersicht", new ImageIcon("Images/transparent.gif"));
        bUbersicht.setBounds (10, 12, 94, 50);
        bUbersicht.setContentAreaFilled(false);
        bUbersicht.setOpaque(false);
        bUbersicht.setBorderPainted(false);
        bUbersicht.addActionListener(this);
        this.getContentPane().add(bUbersicht);
        
        //Window-Listener
        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent event){
               setVisible(false);
               dispose();
               System.exit(0);
            }
         });
    }

    public void actionPerformed(ActionEvent event){
        String cmd = event.getActionCommand();

        if (cmd.equals("Menu"))
        {
            Menu wndMenu = new Menu();

            int width = 250;
            int height = 300;

            Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
            int x = (d.width/2)-(width/2);
            int y = (d.height/2)-(height/2);

            wndMenu.setBounds(x,y,width,height);
            wndMenu.setUndecorated(true);
            wndMenu.setResizable(false);
            wndMenu.setVisible(true);
        }
        else if (cmd.equals("Übersicht"))
        {
            panelU = new UbersichtPanel();
            panelU.setBackground(Color.black);
            panelU.setBounds(40,110,310,250);
            this.add(panelU);
        }
    }
}
```


```
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class UbersichtPanel extends JFrame implements ActionListener{

    public UbersichtPanel() {

        JPanel panel = new JPanel();
        panel.setBounds(40,110,310,250);
        panel.setOpaque(false);
        panel.setBackground(Color.black);


        //Window-Listener
        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent event){
               setVisible(false);
               dispose();
               System.exit(0);
            }
         });
    }
    
    public void actionPerformed(ActionEvent event){
        String cmd = event.getActionCommand();

        if (cmd.equals(""))
        {

        }
    }

}
```

Das sind die beiden Klassen um die es geht. Ich möchte halt gerne, dass ich in der Klasse GUI so ein Übersichts Panel starten bzw benutzen kann.


----------



## Gast2 (16. Nov 2007)

ja du kannst kein frame auf ein frame packen du musst schon ein panel benutzen

wenn du es UbersichtPanel nennst solltest du vielleicht auch extend JPanel machen
und das innere panel weglassen


----------



## FeelX (16. Nov 2007)

ich habs geändert, funktionieren tuts aber trotzdem nicht  :bahnhof:


----------



## Gast2 (17. Nov 2007)

was genau hast du verändert???und wie sieht der code jetzt aus ???und was für eine exception kommt???fragen über fragen....


----------



## FeelX (17. Nov 2007)

der code sieht jetzt so aus:


```
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class UbersichtPanel extends JPanel implements ActionListener{

    public UbersichtPanel() {
    
        this.setBounds(220,305,330,260);
        this.setBackground(Color.black);

        //Window-Listener
        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent event){
               setVisible(false);
               dispose();
               System.exit(0);
            }
         });
    }
    
    public void actionPerformed(ActionEvent event){
        String cmd = event.getActionCommand();

        if (cmd.equals(""))
        {

        }
    }

}
```

jetzt mecker er anscheinend am window-listener rum...

*UbersichtPanel.java:27:16: cannot find symbol
symbol: method dispose()
               dispose();
                ^
UbersichtPanel.java:24:9: cannot find symbol
symbol  : method addWindowListener(<anonymous java.awt.event.WindowAdapter>)
location: class UbersichtPanel
        addWindowListener(new WindowAdapter() {
*


----------



## vdvaart23 (18. Nov 2007)

FeelX hat gesagt.:
			
		

> jetzt mecker er anscheinend am window-listener rum...
> 
> *UbersichtPanel.java:27:16: cannot find symbol
> symbol: method dispose()
> ...



1) Die Klasse WindowAdapter enthält keine Methode dispose()...
2) Benutz doch einfach

```
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
```
statt einem WindowListener

Lg,
vdvaart23


----------



## Gast2 (18. Nov 2007)

1. wenn du System.exit(0) machst bruachst du kein setVisible false und kein dispose()...
Des weiteren schließt du nicht dein JPanel sondern deine ganzes Frame auf dem das JPanel geaddet ist d.h. du brauchst keinen WindowsListener auf deinem Panel


----------



## vdvaart23 (18. Nov 2007)

SirWayne hat gesagt.:
			
		

> Des weiteren schließt du nicht dein JPanel sondern deine ganzes Frame auf dem das JPanel geaddet ist d.h. du brauchst keinen WindowsListener auf deinem Panel



Stimmt das hatte ich übersehen.
Also das setDefaultCloseOperation() auf das JFrame anwenden

Lg,
vdvaart23


----------



## FeelX (18. Nov 2007)

soweit so gut, jetzt müsst ich nur noch wissen was ich in die Klasse der GUI schreiben muss, damit das Panel angezeigt werden kann


----------



## Gast2 (18. Nov 2007)

getContentPane.add(übersichtspanel);
und wenn du ein nullLayout hast dann musst du natürlich die Position und eine größe angeben


----------



## thE_29 (19. Nov 2007)

<ot> Sag mal was für Lehrer/Professoren habt ihr in letzter Zeit auf euren UNI´s? Entweder passt ihr/du net gut auf oder die verzapfen zT einfach nur Bullshit</ot>


----------



## FeelX (19. Nov 2007)

nee nicht uni, ist jgst 12 aufm gymnasium  :wink: 
aber so richtig was lernen tun wir trotzdem nicht  :roll:


----------



## Gast2 (19. Nov 2007)

meinst du mich????Hab ich falsches erklärt?????


----------

