Swing JPanel zeigt Buttons nicht an

Alex2013

Bekanntes Mitglied
Hallo Leute,

ich wollte mal einen kleinen Test wagen und habe folgendes kleines Übungsprogramm geschrieben. Hier möchte ich einige JPanels einfügen, welche bei betätigen verschiedener Buttons jeweils angezeigt werden (setVisible(true/false)).
Soweit so gut, das Programm kompiliert ohne sichtbare Fehler. Jedoch werden die Buttons auf den verschiedenen Panels nicht angezeigt. Ich habe schon einige Varianten versucht. (Initialisierung in der Hauptklasse, im Konstruktor etc.)Bisher hat nichts wirklich geholfen.
Ich habe auch einige Hilfsausgaben verwendet, jedoch werden die korrekt angesteuert. Das Programm läuft nur nicht in die jeweilige actionPerformed Methode.
Kann mir jemand sagen, wo genau mein Fehler liegt?
Schlussendlich sollen mir checkboxes angezeigt werden welche ich auswählen kann und dass mir diese Auswahl nach einem klick auf "ok" wieder auf dem "hauptpanel" angezeigt wird.

Hier mal der Code:

Java:
import java.awt.Component;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class McDonaldsWenig extends JFrame {
    public JPanel menuepanel;public JPanel burgerpanel;public JPanel gemuesepanel;public JPanel obstpanel;
    JButton ok = new JButton("OK"), burgerbutton = new JButton("Burger"),
            gemuesebutton = new JButton("Gemuese"), obstbutton = new JButton(
                    "Obst");
    JCheckBox burger = new JCheckBox("Burger"),
            pommes = new JCheckBox("Pommes"), bigmac = new JCheckBox("BigMac"),
            salat = new JCheckBox("Salat"), gurken = new JCheckBox("Gurke"),
            tomaten = new JCheckBox("Tomate"),
            banane = new JCheckBox("Banane"), apfel = new JCheckBox("Apfel"),
            pfirsich = new JCheckBox("Pfirsich");
    JLabel anzeige = new JLabel();
    Container c;

    public McDonaldsWenig() {
        setSize(400, 400);
        setLocationRelativeTo(null);
        menuepanel=new JPanel();
        burgerpanel=new JPanel();
        gemuesepanel=new JPanel();
        obstpanel=new JPanel();
      
        add(menuepanel);
        menuepanel.setLayout(new GridLayout(4, 1));
        menuepanel.add(burgerbutton);
        menuepanel.add(gemuesebutton);
        menuepanel.add(obstbutton);
        menuepanel.add(anzeige);
      
        System.out.println("x1");
        burgerbutton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                burgerpanel.setVisible(true);
                gemuesepanel.setVisible(false);
                obstpanel.setVisible(false);
                menuepanel.setVisible(false);
            }
        });
      
        gemuesebutton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                burgerpanel.setVisible(false);
                gemuesepanel.setVisible(true);
                obstpanel.setVisible(false);
                menuepanel.setVisible(false);
            }
        });
        obstbutton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                burgerpanel.setVisible(false);
                gemuesepanel.setVisible(false);
                obstpanel.setVisible(true);
                menuepanel.setVisible(false);
            }
        });
        System.out.println("x2");
      
        burgerpanel.setLayout(new GridLayout(2, 1));
        burgerpanel.add(burger);
        burgerpanel.add(ok);
      
        System.out.println("x5");
        ok.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("x3");
                String a="";
                if(burger.isSelected())
                {
                    a=a+burger.getText();
                }
                burgerpanel.setVisible(false);
                menuepanel.setVisible(true);
                anzeige.setText(""+a);
            }
        });
      
        gemuesepanel.add(salat);
        gemuesepanel.add(ok);
        System.out.println("x4");
        ok.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("x1_2");
                String a="";
                if(salat.isSelected())
                {
                    a=a+salat.getText();
                }
                gemuesepanel.setVisible(false);
                menuepanel.setVisible(true);
                anzeige.setText(""+a);
            }
        });
        System.out.println("X2_1");
        obstpanel.add(apfel);
        obstpanel.add(ok);
        ok.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("x_3");
                String a="";
                if(apfel.isSelected())
                {
                    a=a+apfel.getText();
                }
                obstpanel.setVisible(false);
                menuepanel.setVisible(true);
                anzeige.setText(""+a);
            }
        });
        System.out.println("x6");
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public static void main(String[] args) {
        new McDonaldsWenig();
    }
}

Die Hilfsausgabe sieht folgend aus:
x1
x2
x5
x4
x2_1
x6

Weiß hier zufällig jemand weiter? Dafür wäre ich dankbar 🙂
Lg
 
Zuletzt bearbeitet von einem Moderator:
Hi, ich arbeite selber erst seit paar Tagen mit Grafischen Komponenten und kenne mich selber nicht wirklich gut aus ,-)

Ich habe mir den Code angesehen und mir ist aufgefallen, dass du die Panels: burgerpanel, gemuesepane, obstpanel nirgendwo hinzufügst. Wenn ich eines der Panel zum Frame hinzufüge wird mir dort dann zumindest eine CheckBox angezeigt. So soll es zwar bestimmt nicht sein, aber vielleicht hilft dir das ja weiter
 
Also ich hatte sie schon hinzugefügt. Ich habe das jetzt noch mal etwas geändert. Aber an dem Problem hat sich noch immer nichts geändert... :-(
Ich habe diesmal zum Teil nur eine Komponente die hinzugefügt werden soll um zunächst nur die Funktionalität zu bekommen.
Ich kann mir nicht erklären, wieso die Buttons nicht angezeigt werden. Das Programm läuft fehlerfrei durch und geht bei entsprechendem Klick auch in die actionPerformed Methode. Angezeigt wird aber nichts...

Hier der Code:

Java:
public class McDonaldsNochMalNeu extends JFrame{
    JPanel vierPanel=new JPanel(),einsPanel=new JPanel(),zweiPanel=new JPanel(),dreiPanel=new JPanel();
    JButton okEins=new JButton("ok"),okZwei=new JButton("ok"),okDrei=new JButton("ok"),zuPaneleins=new JButton("panel 1"),zuPanelzwei=new JButton("panel 2"),zuPaneldrei=new JButton("panel 3");
    Container c;
    public McDonaldsNochMalNeu() {  
        c=getContentPane();
        JFrame frame=new JFrame();
        frame.setSize(300, 200);
        //das Content Pane des frames wird geladen und das Layout gesetzt
        frame.add(c);
        c.setLayout(new FlowLayout());
      
        //Die Panels werden hinzugefügt
        c.add(einsPanel);
        c.add(zweiPanel);
        c.add(dreiPanel);
        System.out.println("x1");
      
        //Die drei Panels werden unsichtbar gesetzt
        dreiPanel.setVisible(false);
        zweiPanel.setVisible(false);
        einsPanel.setVisible(false);
        System.out.println("x2");
      
        //die Buttons welche die Panels aufrufen werden zu den panels gefügt
        c.add(zuPaneleins);
        c.add(zuPanelzwei);
        c.add(zuPaneldrei);
        System.out.println("x3");
      
        //das hauptpanel wird sichbar gemacht
        einsPanel.setLayout(new FlowLayout());
        einsPanel.add(okEins);
        System.out.println("x4");
        zuPaneleins.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("x5");
                c.setVisible(false);
                zweiPanel.setVisible(false);
                dreiPanel.setVisible(false);
                einsPanel.setVisible(true);
            }
        });

        System.out.println("x6");
        zweiPanel.setLayout(new FlowLayout());
        zweiPanel.add(okZwei);
        zuPanelzwei.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("x7");
                c.setVisible(false);
                zweiPanel.setVisible(true);
                dreiPanel.setVisible(false);
                einsPanel.setVisible(false);
            }
        });
        System.out.println("x8");
        dreiPanel.setLayout(new FlowLayout());
        dreiPanel.add(okDrei);
        zuPaneldrei.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("x9_2");
                c.setVisible(false);
                zweiPanel.setVisible(false);
                dreiPanel.setVisible(true);
                einsPanel.setVisible(false);
            }
        });
        System.out.println("x9");
        //Was passiert bei drücken des OK buttons
        einsPanel.setLayout(new FlowLayout());
        einsPanel.add(okEins);
        okEins.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                einsPanel.setVisible(false);
                c.setVisible(true);
            }
        });
        zweiPanel.setLayout(new FlowLayout());
        zweiPanel.add(okZwei);
        okZwei.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                zweiPanel.setVisible(false);
                c.setVisible(true);
            }
        });
        dreiPanel.setLayout(new FlowLayout());
        dreiPanel.add(okDrei);
        okDrei.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                dreiPanel.setVisible(false);
                c.setVisible(true);
            }
        });
        System.out.println("x10");
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public static void main(String[] args) {
        new McDonaldsNochMalNeu();
    }
}

Hat vlt. noch jemand einen Tipp oder sogar die Lösung? 🙂
Lg
 
Zuletzt bearbeitet von einem Moderator:
Also die Variablennamen solltest Du einmal überarbeiten. Eine Variable c ist nun wirklich nichtssagend.

Und wenn Du alles in c steckst und c dann unsichtbar machst, dann ist C mit ganzem Inhalt nicht mehr sichtbar. Nimm die c.setVisible(false); raus und Du kannst da die Panels umschalten. Musst halt noch am Layout arbeiten... Und das c.setVisible(true); brauchst du auch nicht, wobei die auch nicht schaden ...
 
Du scheinst da nen kleinen Denkfehler zu haben ^^

Dein ContentPane mit dem Namen "c" beinhaltet all deine Komponenten. Wenn du dieses nun also unischtbar machst, werden auch alle in c enthaltenen Komponenten unsichtbar. Also alle deine JPanel... Anmerkung: Auch jene Komponenten, die sich in den Panel befinden, gehören natürlich zu denen oben genannten Komponenten, die sich in c befinden...
Also wie gesagt, machst du alle Komponenten, die du da erstellt hast und c zugefügt hast unsichtbar. Was sicher nicht dein Ziel war 😱
 

Neue Themen


Zurück
Oben