Swing Buttons werden trotz setVisible nicht dargestellt

Alex2013

Bekanntes Mitglied
Hallo Leute,

ich bin aktuell ein wenig am besten, wie ich mein Programm am besten schreibe. Es soll nur ein kleines Testprogramm für mich werden.
Hier möchte ich jeweils verschiedene JPanels aufrufen, welche sichtbar und wieder nicht sichtbar werden. Das hat zunächst auch geklappt. Auch mit Inhaltsanzeige.
Als ich jetzt jedoch die einzelnen "zurück" Buttons jeweils einzeln deklariert habe, funktionieren zwar die "zurück" Buttons, aber der Inhalt der JPanels wird an der entscheidenden Stelle nicht mehr angezeigt. Ebenso wird auch der erste "zurück" Button, welcher zum Knopf "Hauptmenü" führen soll von Anfang an nicht angezeigt.
Was mache ich falsch? Die Panels werden jeweils mit setVisible aufgerufen, die Layouts gesetzt und die Buttons zum Teil auch noch einmal explizit mit setVisible gesetzt.
Wie gesagt, vorher war der Inhalt, aber nicht die Buttons zu sehen. Jetzt sind einige Buttons zu sehen, aber der Inhalt nicht mehr :-(
Hier einige Codeschnipsel und ein Bild.
Ich kann gerne auch den ganzen Code posten (über 300 Zeilen)

Java:
// die Buttons welche die Panels aufrufen werden zu den panels gefügt
        hauptPanel.add(aldi);
        aldi.addActionListener(this);
        hauptPanel.add(lidl);
        lidl.addActionListener(this);
        hauptPanel.add(mcdonalds);
        mcdonalds.addActionListener(this);
        hauptPanel.add(zurueckZuHauptmenuePanel);
        zurueckZuHauptmenuePanel.setVisible(false);
        zurueckZuHauptmenuePanel.addActionListener(this);
      
        //Im Hauptpanel werden die Buttons zunächst unsichtbar gemacht
        aldi.setVisible(false);
        lidl.setVisible(false);
        mcdonalds.setVisible(false);
      
        //Die Labels werden gesetzt und unsichtbar gemacht
        c.add(auswahlMitText);
        auswahlMitText.setVisible(false);
      
        c.add(anzeigeOhneText);
        anzeigeOhneText.setVisible(false);
      
        c.add(preis);
        preis.setVisible(false);
        c.add(preisanzeige);
        preisanzeige.setVisible(false);
      
        // Die Panels werden hinzugefügt
        c.add(aldiPanel);
        c.add(lidlPanel);
        c.add(mcdonaldsPanel);
        System.out.println("x3");





//Lebensmittelpanel von Aldi
        auswahlLebensmittelAldiPanel.setLayout(new GridLayout(10, 1));
        auswahlLebensmittelAldiPanel.add(brot);
        auswahlLebensmittelAldiPanel.add(nudeln);
        auswahlLebensmittelAldiPanel.add(kartoffeln);
        auswahlLebensmittelAldiPanel.add(reis);
        auswahlLebensmittelAldiPanel.add(milch);
        auswahlLebensmittelAldiPanel.add(fleich);
        auswahlLebensmittelAldiPanel.add(obst);
        auswahlLebensmittelAldiPanel.add(gemuese);
        auswahlLebensmittelAldiPanel.add(salat);
        auswahlLebensmittelAldiPanel.add(zurueckZuAldiPanel);
//        pack();



// Die drei Panels werden unsichtbar gesetzt
        aldiPanel.setVisible(false);
        lidlPanel.setVisible(false);
        mcdonaldsPanel.setVisible(false);
        pack();
        setLocationRelativeTo(null);
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);




if(src==aldiLebensmittel)
        {
            aldiPanel.setVisible(false);
            auswahlLebensmittelAldiPanel.setVisible(true);
            pack();
        }

Das sollten die wichtigsten Abschnitte sein. Wie gesagt, ich kann gerne auch alles posten.[/code]
 
Zuletzt bearbeitet von einem Moderator:

Alex2013

Bekanntes Mitglied
Ja, die Buttons wurden alle weiter oben (in meinem Programm) hinzugefügt. deshalb wundert es mich ja, dass sie trotz explizieter Befehle nicht sichtbar werden. Das Layout ist auch angepasst.
Hier noch ein Bild:
 

Anhänge

  • Java 1.jpg
    Java 1.jpg
    16,5 KB · Aufrufe: 34

RalleYTN

Bekanntes Mitglied
Anstatt so viele sachen unsichtbar zu machen solltest du eventuell eine JTabbedPane verwenden.
Zum Thema... es kann hier und da mal sein, dass man Komponenten nicht sehen kann, weil sie keine Bounds in einem null-Layout haben.
 

Alex2013

Bekanntes Mitglied
@RalleYTN: JTabbedPane wäre sicher eine Möglichkeit. Aber in diesem speziellen Fall wollte ich einen anderen Weg einschlagen. Du sagst also, dass ich theoretisch nur Bounds setzen müsste und dann sollte es passen...?

Oder um die Sache vlt. einfacher zu halten, meinst du, wenn ich das layout einfach nicht null setzen würde, dass das schon ausreicht...
Oder hast du da an etwas spezielles gedacht?
 
Zuletzt bearbeitet:

Joose

Top Contributor
@RalleYTN: JTabbedPane wäre sicher eine Möglichkeit. Aber in diesem speziellen Fall wollte ich einen anderen Weg einschlagen. Du sagst also, dass ich theoretisch nur Bounds setzen müsste und dann sollte es passen...?

Mit den Sichtbarkeiten so herumzu"hantieren" wie in diesem Fall ist nicht gerade eine gute Variante. Ich würde auch eher in die Richtung unterschiedliche Panels gehen und nur die Panels austauschen. -> dadurch erspart man sich einfach Arbeit.

Oder um die Sache vlt. einfacher zu halten, meinst du, wenn ich das layout einfach nicht null setzen würde, dass das schon ausreicht...
Oder hast du da an etwas spezielles gedacht?

Entweder verwendest du eben bounds oder statt dem "null"-Layout (was generell vermieden werden sollte) verwendest du einen passenden LayoutManager :)
 

Alex2013

Bekanntes Mitglied
@Joose: das habe ich auch schon berücksichtigt. Ich habe bereits mehrere Panels und versuche nach Möglichkeit nur diese ein- und auszublenden. Mit den einzelnen Elementen wollte ich an sich gar nicht groß herumhantieren.

Ich kann gerne den ganzen Code posten, wenn das hilft. Dieser ist in den (hoffentlich) entscheidenden Passagen auch auskommentiert. So dass hier Zeit erspart bleiben sollte...
da ich allerdings die einzelnen Komponenten nicht mit Arrays oder for Schleifen erstelle, zieht sich der Code etwas...

Also soweit ich das jetzt überblickt habe, habe ich nirgends mehr ein null Layout.
 
Zuletzt bearbeitet:

Joose

Top Contributor
Du hast ja schon 2 Screenshots gepostet auf denen Buttons angezeigt werden.
Besteht dein Problem weiterhin? Gibt es Panels welche Buttons anzeigen sollen, dies aber nicht tun?
Worin besteht der Unterschied zwischen den funktionierenden Panels mit Button und denen die nicht funktionieren? (abgsehen von unterschiedlichen Buttons und einem anderen Layout ;))
 

Alex2013

Bekanntes Mitglied
Der einzige Unterschied besteht darin, dass es sich bei den anderen Komponenten um Checkboxes handelt.
Wandle ich den Code aber etwas ab, werden wiederum, dort wo Checkboxes vorhanden sind, diese aber dann keine Buttons angezeigt... :-/

Ich poste mal alles (inkl. Deklarationen):
Java:
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

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

public class AldiMcDonaldsLidl extends JFrame implements ActionListener{
    private static final long serialVersionUID = 1L;
    //verschiedene Panels
    JPanel hauptPanel = new JPanel(), aldiPanel = new JPanel(),auswahlLebensmittelAldiPanel=new JPanel(),auswahlGetraenkeAldiPanel=new JPanel(),
    auswahlSuessigkeitenAldiPanel=new JPanel(),mcdonaldsPanel = new JPanel(),burgerPanel=new JPanel(),chickenBurgerPanel= new JPanel(),
    fishBurgerPanel= new JPanel(),veggieBurgerPanel= new JPanel(),drinksPanel=new JPanel(),lidlPanel = new JPanel(),auswahlLebensmittelLidlPanel=new JPanel(),
    auswahlGetraenkeLidlPanel=new JPanel(),auswahlSuessigkeitenLidlPanel=new JPanel();
    //verschiedene Buttons
    JButton hauptmenue = new JButton("Hauptmenue"),aldi= new JButton("Aldi"),lidl= new JButton("Lidl"),mcdonalds= new JButton("McDonalds"),
    aldiLebensmittel= new JButton("Aldi Lebensmittel"),aldiGetraenke= new JButton("Aldi Getränke"),aldiSuessigkeiten= new JButton("Aldi Süßigkeiten"),
    lidlLebensmittel = new JButton("Lidl Lebensmittel"),lidlGetraenke= new JButton("Lidl Getränke"),lidlSuessigkeiten= new JButton("Lidl Süßigkeiten"),
    mcdonaldsAuswahlBurger = new JButton("McDonalds Burgerauswahl"),mcdonaldsBurger=new JButton("McDonalds Burger"),mcdonaldsChickenBurger=new JButton("Chicken Burger"),
    mcdonaldsFishBurger=new JButton("Fishburger"),mcdonaldsVeggieBurger=new JButton("Veggieburger"),mcdonaldsDrinks=new JButton("Getränke"),
    zurueckZuHauptpanel=new JButton("zurück"),zurueckZuAldiPanel=new JButton("zurück"),zurueckZuAldiLebensmittelPanel=new JButton("zurück"),zurueckZuAldiSuessigkeitenPanel=new JButton("zurück"),
    zurueckZuAldiGetraenkePanel=new JButton("zurück"),zurueckZuLidlPanel=new JButton("zurück"),zurueckZuLidlLebensmittelPanel=new JButton("zurück"),zurueckZuLidlSuessigkeitenPanel=new JButton("zurück"),
    zurueckZuLidlGetraenkePanel=new JButton("zurück"),zurueckZuHauptmenuePanel=new JButton("zurück"),zurueckZuMcDonaldsPanel=new JButton("zurück"),zurueckZuMcDonaldsBurgerPanel=new JButton("zurück"),
    zurueckZuMcDonaldsChickenburgerPanel=new JButton("zurück"),zurueckZuMcDonaldsFishburgerPanel=new JButton("zurück"),zurueckZuMcDonaldsVeggieburgerPanel=new JButton("zurück"),
    zurueckZuAldiPanel2=new JButton("zurück"),zurueckZuAldiPanel3=new JButton("zurück"),zurueckZuLidlPanel2=new JButton("zurück"),zurueckZuLidlPanel3=new JButton("zurück");
  
    Container c;
    //Checkboxes
    //aldi
    JCheckBox brot=new JCheckBox("Brot"),reis=new JCheckBox("Reis"),kartoffeln=new JCheckBox("Kartoffeln"),nudeln=new JCheckBox("Nudeln"),milch=new JCheckBox("Milch"),fleich=new JCheckBox("Fleisch"),
            obst=new JCheckBox("Obst"),gemuese=new JCheckBox("Gemüse"),salat=new JCheckBox("Salat"),gummibaerchen=new JCheckBox("Gummibärchen"),chips=new JCheckBox("Chips"),wasser=new JCheckBox("Wasser"),
            cola=new JCheckBox("Cola"),sprite=new JCheckBox("Sprite"),orangej=new JCheckBox("Orangensaft"),apfelj=new JCheckBox("Apfelsaft"),pfirsichj=new JCheckBox("Pfirsichsaft"),
    hamburger=new JCheckBox("Hamburger"),cheeseburger=new JCheckBox("Cheeseburger"),chickenburger=new JCheckBox("Chickenburger"),chickencheeseburger=new JCheckBox("Chickencheeseburger"),
    fishburger=new JCheckBox("Fishburger"),veggiecheeseburger=new JCheckBox("Veggiecheeseburger"),fanta=new JCheckBox("Fanta"),
  
    //lidl
    //das Gleiche
    //Mcdonalds
    burger = new JCheckBox("Burger"),pommes = new JCheckBox("Pommes"), bigmac = new JCheckBox("BigMac"),
    salatMcdonalds = new JCheckBox("Salat"), fishfilet = new JCheckBox("Fischfilet"), backfisch = new JCheckBox("Backfisch"),
    veggieBurger=new JCheckBox("VeggieBurger"),drink = new JCheckBox("Drinks");
  
    JLabel anzeigeOhneText = new JLabel(), auswahlMitText = new JLabel("Ihre Auswahl:"),preis=new JLabel("Preis:"),preisanzeige=new JLabel();
    JPanel anzeigeButtons=new JPanel();
    public AldiMcDonaldsLidl() {
        // das Content Pane des frames wird geladen und das Layout gesetzt
        c = getContentPane();
        c.setLayout(new FlowLayout());
      
        // das hauptpanel wird sichbar gemacht
        c.add(hauptPanel);
        hauptPanel.setLayout(new FlowLayout());
        hauptPanel.add(hauptmenue);
        hauptmenue.addActionListener(this);
      
        // die Buttons welche die Panels aufrufen werden zu den panels gefügt
        hauptPanel.add(aldi);
        aldi.addActionListener(this);
        hauptPanel.add(lidl);
        lidl.addActionListener(this);
        hauptPanel.add(mcdonalds);
        mcdonalds.addActionListener(this);
        hauptPanel.add(zurueckZuHauptmenuePanel);
//        zurueckZuHauptmenuePanel.setVisible(false);
        zurueckZuHauptmenuePanel.addActionListener(this);
      
        //Im Hauptpanel werden die Buttons zunächst unsichtbar gemacht
        aldi.setVisible(false);
        lidl.setVisible(false);
        mcdonalds.setVisible(false);
        zurueckZuHauptmenuePanel.setVisible(false);
        //Die Labels werden gesetzt und unsichtbar gemacht
        c.add(auswahlMitText);
        auswahlMitText.setVisible(false);
      
        c.add(anzeigeOhneText);
        anzeigeOhneText.setVisible(false);
      
        c.add(preis);
        preis.setVisible(false);
        c.add(preisanzeige);
        preisanzeige.setVisible(false);
      
        // Die Panels werden hinzugefügt
        c.add(aldiPanel);
        c.add(lidlPanel);
        c.add(mcdonaldsPanel);
        System.out.println("x3");
        //Die Buttons werden dem aldiPanel hinzugefügt und die Actionlistener registriert
        aldiPanel.setLayout(new GridLayout(4, 1));
        aldiPanel.add(aldiLebensmittel);
        aldiLebensmittel.addActionListener(this);
      
        c.add(auswahlLebensmittelAldiPanel);
        auswahlLebensmittelAldiPanel.setVisible(false);
        aldiPanel.add(aldiSuessigkeiten);
        aldiSuessigkeiten.addActionListener(this);
      
        c.add(auswahlSuessigkeitenAldiPanel);
        auswahlSuessigkeitenAldiPanel.setVisible(false);
        aldiPanel.add(aldiGetraenke);
        aldiGetraenke.addActionListener(this);
      
        c.add(auswahlGetraenkeAldiPanel);
        auswahlGetraenkeAldiPanel.setVisible(false);
        aldiPanel.add(zurueckZuHauptpanel);
      
        //Die Buttons werden dem Lidlpanel hinzugefügt und die ActionListener registriert
        lidlPanel.setLayout(new GridLayout(4, 1));
        lidlPanel.add(lidlLebensmittel);
        lidlLebensmittel.addActionListener(this);
      
        c.add(auswahlLebensmittelLidlPanel);
        auswahlLebensmittelLidlPanel.setVisible(false);
        lidlPanel.add(lidlSuessigkeiten);
        lidlSuessigkeiten.addActionListener(this);
      
        c.add(auswahlSuessigkeitenLidlPanel);
        auswahlSuessigkeitenLidlPanel.setVisible(false);
        lidlPanel.add(lidlGetraenke);
        lidlGetraenke.addActionListener(this);
      
        c.add(auswahlGetraenkeLidlPanel);
        auswahlGetraenkeLidlPanel.setVisible(false);
        lidlPanel.add(zurueckZuHauptpanel);
      
        zurueckZuHauptpanel.addActionListener(this);
        zurueckZuHauptpanel.setVisible(false);

        zurueckZuAldiPanel.addActionListener(this);
        zurueckZuAldiPanel2.addActionListener(this);
        zurueckZuAldiPanel3.addActionListener(this);
        zurueckZuLidlPanel2.addActionListener(this);
        zurueckZuLidlPanel3.addActionListener(this);
      
        //Lebensmittelpanel von Aldi
        auswahlLebensmittelAldiPanel.setLayout(new GridLayout(10, 1));
        auswahlLebensmittelAldiPanel.add(brot);
        auswahlLebensmittelAldiPanel.add(nudeln);
        auswahlLebensmittelAldiPanel.add(kartoffeln);
        auswahlLebensmittelAldiPanel.add(reis);
        auswahlLebensmittelAldiPanel.add(milch);
        auswahlLebensmittelAldiPanel.add(fleich);
        auswahlLebensmittelAldiPanel.add(obst);
        auswahlLebensmittelAldiPanel.add(gemuese);
        auswahlLebensmittelAldiPanel.add(salat);
        auswahlLebensmittelAldiPanel.add(zurueckZuAldiPanel);
  
//        pack();
      
        //Lebensmittelpanel von Lidl
        auswahlLebensmittelLidlPanel.setLayout(new GridLayout(10, 1));
        auswahlLebensmittelLidlPanel.add(brot);
        auswahlLebensmittelLidlPanel.add(nudeln);
        auswahlLebensmittelLidlPanel.add(kartoffeln);
        auswahlLebensmittelLidlPanel.add(reis);
        auswahlLebensmittelLidlPanel.add(milch);
        auswahlLebensmittelLidlPanel.add(fleich);
        auswahlLebensmittelLidlPanel.add(obst);
        auswahlLebensmittelLidlPanel.add(gemuese);
        auswahlLebensmittelLidlPanel.add(salat);
        auswahlLebensmittelLidlPanel.add(zurueckZuLidlPanel);
//        pack();
      
        //Süßigkeitenpanel von Aldi
        auswahlSuessigkeitenAldiPanel.setLayout(new GridLayout(3, 1));
        auswahlSuessigkeitenAldiPanel.add(gummibaerchen);
        auswahlSuessigkeitenAldiPanel.add(chips);
        auswahlSuessigkeitenAldiPanel.add(zurueckZuAldiPanel2);
//        pack();
      
        //Süßigkeitenpanel von Lidl
        auswahlSuessigkeitenLidlPanel.setLayout(new GridLayout(3, 1));
        auswahlSuessigkeitenLidlPanel.add(gummibaerchen);
        auswahlSuessigkeitenLidlPanel.add(chips);
        auswahlSuessigkeitenLidlPanel.add(zurueckZuLidlPanel2);
//        pack();
              
        //Getränkepanel von Aldi
        auswahlGetraenkeAldiPanel.setLayout(new GridLayout(8, 1));
        auswahlGetraenkeAldiPanel.add(wasser);
        auswahlGetraenkeAldiPanel.add(cola);
        auswahlGetraenkeAldiPanel.add(sprite);
        auswahlGetraenkeAldiPanel.add(fanta);
        auswahlGetraenkeAldiPanel.add(apfelj);
        auswahlGetraenkeAldiPanel.add(orangej);
        auswahlGetraenkeAldiPanel.add(pfirsichj);
        auswahlGetraenkeAldiPanel.add(zurueckZuAldiPanel3);
//        pack();
      
        //Getränkepanel von Lidl
        auswahlGetraenkeLidlPanel.setLayout(new GridLayout(8, 1));
        auswahlGetraenkeLidlPanel.add(wasser);
        auswahlGetraenkeLidlPanel.add(cola);
        auswahlGetraenkeLidlPanel.add(sprite);
        auswahlGetraenkeLidlPanel.add(fanta);
        auswahlGetraenkeLidlPanel.add(apfelj);
        auswahlGetraenkeLidlPanel.add(orangej);
        auswahlGetraenkeLidlPanel.add(pfirsichj);
        auswahlGetraenkeLidlPanel.add(zurueckZuLidlPanel3);
//        pack();
      
        //Die Buttons werden dem lidlPanel hinzugefügt und die Actionlistener registriert
        lidlPanel.setLayout(new GridLayout(4, 1));
        lidlPanel.add(lidlLebensmittel);
        lidlLebensmittel.addActionListener(this);
        lidlPanel.add(lidlSuessigkeiten);
        lidlSuessigkeiten.addActionListener(this);
        lidlPanel.add(lidlGetraenke);
        lidlGetraenke.addActionListener(this);
        lidlPanel.add(zurueckZuHauptpanel);
      
        //Mcdonalds Burger Panel
        burgerPanel.setLayout(new GridLayout(6, 1));
        burgerPanel.add(burger);
        burgerPanel.add(bigmac);
        burgerPanel.add(pommes);
        burgerPanel.add(cheeseburger);
        burgerPanel.add(hamburger);
        burgerPanel.add(zurueckZuMcDonaldsPanel);
        zurueckZuMcDonaldsPanel.addActionListener(this);
      
        //Die Buttons werden dem McdonaldsPanel hinzugefügt und die Actionlistener registriert
        mcdonaldsPanel.setLayout(new GridLayout(6, 1));
        mcdonaldsPanel.add(mcdonaldsAuswahlBurger);
        mcdonaldsAuswahlBurger.addActionListener(this);
        mcdonaldsPanel.add(mcdonaldsChickenBurger);
        mcdonaldsChickenBurger.addActionListener(this);
        mcdonaldsPanel.add(mcdonaldsFishBurger);
        mcdonaldsFishBurger.addActionListener(this);
        mcdonaldsPanel.add(mcdonaldsVeggieBurger);
        mcdonaldsVeggieBurger.addActionListener(this);
        mcdonaldsPanel.add(mcdonaldsDrinks);
        mcdonaldsDrinks.addActionListener(this);
        mcdonaldsPanel.add(zurueckZuHauptpanel);
      
        //Das Burgerpanel wird hinzugefügt
        mcdonaldsPanel.add(burgerPanel);
        mcdonaldsAuswahlBurger.setVisible(false);
        mcdonaldsChickenBurger.setVisible(false);
        mcdonaldsFishBurger.setVisible(false);
        mcdonaldsVeggieBurger.setVisible(false);
        mcdonaldsDrinks.setVisible(false);
        mcdonaldsBurger.setVisible(false);
        burgerPanel.setVisible(false);
        // Die drei Panels werden unsichtbar gesetzt
        aldiPanel.setVisible(false);
        lidlPanel.setVisible(false);
        mcdonaldsPanel.setVisible(false);
        pack();
        Dimension d=Toolkit.getDefaultToolkit().getScreenSize().getSize();
        int x,y;
        setLocation(x=(int)d.width-(d.width/2), y=(int)d.height-(d.height/2));
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
  
    public static void main(String[] args) {
        new AldiMcDonaldsLidl();
    }
  
    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.println("x5");
        Object src=e.getSource();
        String a="";
        if(src==hauptmenue)
        {
            //im Hauptmenü wird der Menübutton unsichtbar gestellt das Panel bekommt ein neues Layout
            //und die Buttons werden sichtbar
            hauptmenue.setVisible(false);
            hauptPanel.setLayout(new GridLayout(5, 1));
            aldi.setVisible(true);
            lidl.setVisible(true);
            mcdonalds.setVisible(true);
            zurueckZuHauptmenuePanel.setVisible(true);
            pack();
        }
        if(src==aldi)
        {
            hauptPanel.setVisible(false);
            aldiPanel.setVisible(true);
        }
        if(src==lidl)
        {
            hauptPanel.setVisible(false);
            lidlPanel.setVisible(true);
            zurueckZuHauptpanel.setVisible(true);
        }
        if(src==mcdonalds)
        {
            hauptPanel.setVisible(false);
            mcdonaldsPanel.setVisible(true);
            zurueckZuHauptpanel.setVisible(true);
//            pack();
        }
        if(src==aldiLebensmittel)
        {
            aldiPanel.setVisible(false);
            auswahlLebensmittelAldiPanel.setVisible(true);
//            pack();
        }
        if(src==aldiSuessigkeiten)
        {
            aldiPanel.setVisible(false);
            auswahlSuessigkeitenAldiPanel.setVisible(true);
        }
        if(src==aldiGetraenke)
        {
            aldiPanel.setVisible(false);
            auswahlGetraenkeAldiPanel.setVisible(true);
        }
        if(src==lidlLebensmittel)
        {
            lidlPanel.setVisible(false);
            auswahlLebensmittelLidlPanel.setVisible(true);
        }
        if(src==lidlSuessigkeiten)
        {
            lidlPanel.setVisible(false);
            auswahlSuessigkeitenLidlPanel.setVisible(true);
        }
        if(src==lidlGetraenke)
        {
            lidlPanel.setVisible(false);
            auswahlGetraenkeLidlPanel.setVisible(true);
        }
//        if(src==mcdonalds)
//        {
//          
//        }
        if(src==mcdonaldsAuswahlBurger)
        {
            mcdonaldsPanel.setVisible(false);
//            mcdonaldsAuswahlBurger.setVisible(true);
            burgerPanel.setVisible(true);
        }
        if(src==mcdonaldsChickenBurger)
        {
            mcdonaldsPanel.setVisible(false);
            chickenBurgerPanel.setVisible(true);
        }
        if(src==zurueckZuAldiPanel)
        {
        //Aldi zurück Optionen
            //if(auswahlLebensmittelAldiPanel.isVisible())
            //{
                auswahlLebensmittelAldiPanel.setVisible(false);
                aldiPanel.setVisible(true);
                anzeigeOhneText.setText(""+a);
            }//}
            if(src==zurueckZuAldiPanel2){ //if(auswahlSuessigkeitenAldiPanel.isVisible())
            //{
                auswahlSuessigkeitenAldiPanel.setVisible(false);
                aldiPanel.setVisible(true);
                anzeigeOhneText.setText(""+a);
            }//}
            if(src==zurueckZuAldiPanel3){// if(auswahlGetraenkeAldiPanel.isVisible())
            //{
                auswahlGetraenkeAldiPanel.setVisible(false);
                aldiPanel.setVisible(true);
                anzeigeOhneText.setText(""+a);
            }//}
        //}
        if(src==zurueckZuHauptpanel)
        {
            aldiPanel.setVisible(false);
            hauptPanel.setVisible(true);
            anzeigeOhneText.setText(""+a);
        }
        //Lidl zurück Optionen
        if(src==zurueckZuLidlPanel)
        {
            if(auswahlLebensmittelLidlPanel.isVisible())
            {
                auswahlLebensmittelLidlPanel.setVisible(false);
                lidlPanel.setVisible(true);
                anzeigeOhneText.setText(""+a);
            }
            if(auswahlSuessigkeitenLidlPanel.isVisible())
            {
                auswahlSuessigkeitenLidlPanel.setVisible(false);
                lidlPanel.setVisible(true);
                anzeigeOhneText.setText(""+a);
            }
            if(auswahlGetraenkeLidlPanel.isVisible())
            {
                auswahlGetraenkeLidlPanel.setVisible(false);
                lidlPanel.setVisible(true);
                anzeigeOhneText.setText(""+a);
            }
        }
        if(src==zurueckZuHauptpanel)
        {
            lidlPanel.setVisible(false);
            hauptPanel.setVisible(true);
            anzeigeOhneText.setText(""+a);
        }
            //McDonalds zurück Optionen
        if(src==zurueckZuMcDonaldsPanel)
        {
            if(mcdonaldsPanel.isVisible())
            {
                mcdonaldsPanel.setVisible(false);
                hauptPanel.setVisible(true);
                anzeigeOhneText.setText(""+a);
            }
            if(burgerPanel.isVisible())
            {
                burgerPanel.setVisible(false);
                mcdonaldsPanel.setVisible(true);
                anzeigeOhneText.setText(""+a);
            }
            if(chickenBurgerPanel.isVisible())
            {
                chickenBurgerPanel.setVisible(false);
                mcdonaldsPanel.setVisible(true);
                anzeigeOhneText.setText(""+a);
            }
            if(veggieBurgerPanel.isVisible())
            {
                veggieBurgerPanel.setVisible(false);
                mcdonaldsPanel.setVisible(true);
                anzeigeOhneText.setText(""+a);
            }
            if(fishBurgerPanel.isVisible())
            {
                fishBurgerPanel.setVisible(false);
                mcdonaldsPanel.setVisible(true);
                anzeigeOhneText.setText(""+a);
            }
            if(drinksPanel.isVisible())
            {
                drinksPanel.setVisible(false);
                mcdonaldsPanel.setVisible(true);
                anzeigeOhneText.setText(""+a);
            }
        }
        if(src==zurueckZuHauptpanel)
        {
            mcdonaldsPanel.setVisible(false);
            hauptPanel.setVisible(true);
            anzeigeOhneText.setText(""+a);
//            pack();
        }
        if(src==zurueckZuHauptmenuePanel)
        {
            hauptPanel.setSize(150, 30);
            aldi.setVisible(false);
            lidl.setVisible(false);
            mcdonalds.setVisible(false);
            zurueckZuHauptmenuePanel.setVisible(false);
            hauptmenue.setVisible(true);
            hauptPanel.setVisible(true);
//            pack();
        }
    }
}
 
Zuletzt bearbeitet von einem Moderator:

Joose

Top Contributor
Sorry mir ist der Code zu umfangreich als das ich mich da jetzt einlese (vielleicht habe ich später lust).
Du hast zwar eine Aufteilung der Komponenten auf die Panels, aber vielleicht ist dir selber schon aufgefallen das der Code sehr lange ist und etwas unübersichtlich ;)

Du solltest vielleicht mal daran denken den Code auf einzelne Klassen aufzuteilen .. zum Beispiel per Panel eine Klasse.

Nur so als Hinweis:
java - Why shouldn't you extend JFrame and other components? - Stack Overflow (analog dazu auch JPanel)
Du erstellst alle deine Komponten direkt beim Initialisieren der Klasse, kann man machen. Man sollte Objekte aber erst dann initialisieren wenn man sie wirklich braucht. Grund: Wenn du ein Panel nicht anzeigst weil der User einfach nicht draufdrückt auf den richtigen Button -> die Objekte sind erstellt und belegen Speicher!
Du hast viele Code Wiederholungen -> das ist ein Anzeichen dafür Methoden zu verwenden ;)

Java:
            if(mcdonaldsPanel.isVisible())
            {
                mcdonaldsPanel.setVisible(false);
                hauptPanel.setVisible(true);
                anzeigeOhneText.setText(""+a);
            }
            if(burgerPanel.isVisible())
            {
                burgerPanel.setVisible(false);
                mcdonaldsPanel.setVisible(true);
                anzeigeOhneText.setText(""+a);
            }
            if(chickenBurgerPanel.isVisible())
            {
                chickenBurgerPanel.setVisible(false);
                mcdonaldsPanel.setVisible(true);
                anzeigeOhneText.setText(""+a);
            }
            if(veggieBurgerPanel.isVisible())
            {
                veggieBurgerPanel.setVisible(false);
                mcdonaldsPanel.setVisible(true);
                anzeigeOhneText.setText(""+a);
            }
            if(fishBurgerPanel.isVisible())
            {
                fishBurgerPanel.setVisible(false);
                mcdonaldsPanel.setVisible(true);
                anzeigeOhneText.setText(""+a);
            }
            if(drinksPanel.isVisible())
            {
                drinksPanel.setVisible(false);
                mcdonaldsPanel.setVisible(true);
                anzeigeOhneText.setText(""+a);
            }

In jedem "if" schreibst du "anzeigeOhneText.setText(""+a);". Einfacher wäre es doch diese Zeile nur 1x zu schreiben oder? Und du hast zudem nur 1 Stelle zuändern falls du statt Variable "a" mal "b" verwenden willst
In jedem "if" schreibst du "mcdonaldsPanel.setVisible(true);" (bis auf im ersten). Einfacher wäre es doch einfach beim 1.if ein else Zweig hinzuzufügen oder?
Somit bleibt in den meisten if Bedingungen nur noch über "setze Panel auf nicht visible wenn es visible ist". Da brauchst du gar keine if Bedingung mehr drum herum. Wenn es sichtbar ist wird es auf nichtsichtbar gesetzt, sollte es nicht sichtbar sein bleibt es nicht sichtbar.
So kann man den Code von anfangs 36 Zeilen auf 12 kürzen.
Java:
anzeigeOhneText.setText("" + a);
if(mcdonaldsPanel.isVisible()) {
   mcdonaldsPanel.setVisible(false);
   hauptPanel.setVisible(true);
} else {
   mcdonaldsPanel.setVisible(true);   
}
burgerPanel.setVisible(false);
chickenBurgerPanel.setVisible(false);
veggieBurgerPanel.setVisible(false);
fishBurgerPanel.setVisible(false);
drinksPanel.setVisible(false);
 

Alex2013

Bekanntes Mitglied
Grundsätzlich hast du Recht. Nur ich wollte eben zunächst die komplette Funktionalität sicherstellen bevor ich alles auflösen bzw. (wieder einmal) umstellen würde... ;-)

Davon abgesehen, ja es ist sehr viel Code, aber dennoch finde ich ihn persönlich (meine Meinung) aufgrund der Kommentierung, übersichtlich.
Das war bei mir schon mal deutlich anders. Aber man kann sich natürlich immer und überall mehr oder weniger verbessern.

Mein nächster Ansatz wäre, die Checkboxes evtl. noch einmal selbst auf ein Panel zu packen bzw. zwei weitere Panels auf das jeweilige zu setzen. Einmal mit dem nötigen Button und einmal mit den Checkboxes.
Ich kann mir einfach nicht erklären, warum die Komponenten nicht sichtbar sind...
Weder repaint, noch validate haben geholfen.
Vlt. bin ich dazu aber auch einfach (noch) nicht tief genug in der Java Materie und den Eigenschaften der einzelnen Komponenten und Klassen drin...
 

Neumi5694

Top Contributor
Lass dir zu dem Zeitpunkt, an dem der Button angezeigt werden soll, einen Debug-Text ausgeben (oder setz je nach IDE einen Breakpoint).
Wird die Zeile überhaupt erreicht?
Prinzipiell kann man bei einem Flowlayout und setVisible(...) nicht viel falsch machen, das sollte klappen.
Der Fehler dürfte also nicht dort liegen.

Fang mal klein an.
Füge max. 2-3 Buttons in dein Formular ein und nur die zugehörigen Checkboxen.
Schau, ob es dann funktioniert. Erst dann füge noch weitere hinzu.

Wenn du mehrere optionale Seiten verwenden willst, empfehle ich CardLayout. TabbedPane geht wie weiter oben genannt natürlich auch.
Und wirklich ... wenn du sicherstellen willst, dass dein Code funktioniert, dann baue dir Methoden, welche die sich ständig wiederholenden Zeilen ausführen, wenn du schon nicht auf mehrere Klassen zurückgreifen willst.


Und bleib vorerst auch mal beim Flowlayout.
Wenn du nachträglich eine Komponente einblendest, muss der Gridlayout-Manager vielleicht neu angeschubst werden.
 

Alex2013

Bekanntes Mitglied
@Neumi5694: das mit dem Breakpoint wäre noch mal eine Idee.

Zu deinem
Fang mal klein an.
Füge max. 2-3 Buttons in dein Formular ein und nur die zugehörigen Checkboxen.
Schau, ob es dann funktioniert. Erst dann füge noch weitere hinzu.

Wenn du mehrere optionale Seiten verwenden willst, empfehle ich CardLayout. TabbedPane geht wie weiter oben genannt natürlich auch.
Und wirklich ... wenn du sicherstellen willst, dass dein Code funktioniert, dann baue dir Methoden, welche die sich ständig wiederholenden Zeilen ausführen, wenn du schon nicht auf mehrere Klassen zurückgreifen willst.

also mehr Buttons sind pro Panel fast nicht vorhanden. nur noch der "Zurück" Button und das wars. Also max. vier. Der Rest der Komponenten stellen die Checkboxes dar. Diese sind deutlich in der Überzahl ;-)

Zum Punkt Layout:
Ja, ich könnte ein anderes Layout nehmen. Aber ich wollte es dieses mal eben in dieser Variante schreiben. Das muss doch auch funktionieren... :-/

Also ich werds weiter versuchen bzw. schauen, wo ich ggfs. etwas ändern kann. Aber ich schätze mal, dass ich wieder hier lande ;-)
 

Alex2013

Bekanntes Mitglied
Da ich aktuell leider auch über die Breakpoint Methode nicht weiterkomme bzw. dies nicht zielführend ist, werde ich mein Layout einmal komplett umbauen...

Vielleicht hat ja doch noch jemand eine Idee woran es liegen könnte, dass es einfach nicht klappt.
Für mich ist es auf jeden Fall den Aufwand nicht wert, noch länger daran rumzusitzen und nicht weiterzukommen. Dann lieber auf einem anderen Wege :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Swing Programm funktioniert aber zwei Buttons werden angezeigt AWT, Swing, JavaFX & SWT 3
D Buttons werden nebeneinander angeordnet AWT, Swing, JavaFX & SWT 9
R Swing Buttons werden nicht angezeigt AWT, Swing, JavaFX & SWT 4
F JTable soll mit Buttons befüllt werden, aber nicht in jede Zelle einer Spalte AWT, Swing, JavaFX & SWT 3
T Buttons werden nicht angezeigt AWT, Swing, JavaFX & SWT 6
S Buttons werden nach action grau AWT, Swing, JavaFX & SWT 4
L JPanel: Buttons werden nicht angezeigt AWT, Swing, JavaFX & SWT 2
XWing Basic JPanel mit 2 Buttons beutzen. AWT, Swing, JavaFX & SWT 10
jojoge Wie erstelle ich runde Buttons mit Farbe? AWT, Swing, JavaFX & SWT 1
berserkerdq2 Buttons und Shapes sehen ja nach Screengröße klein oder zu groß aus, jemand eine Idee, was man tun kann? AWT, Swing, JavaFX & SWT 1
H Swing Buttons erst nach Klick sichtbar AWT, Swing, JavaFX & SWT 13
volcanos SpringLayout mit zusätzlichen Buttons außerhalb des SpringLayout AWT, Swing, JavaFX & SWT 33
K Swing Buttons erst blinken lassen und dann abfragen, ob sie gedrückt worden sind AWT, Swing, JavaFX & SWT 2
Z Switch Case für Buttons AWT, Swing, JavaFX & SWT 8
O Swing JOptionPane.showOptionDialog - Wie kann ich Buttons größer machen AWT, Swing, JavaFX & SWT 10
R mehrere buttons mit forschleife kreieren und individuell bearbeiten AWT, Swing, JavaFX & SWT 1
Z Swing Kann man denn abstand zwischen zwei Buttons berechnen AWT, Swing, JavaFX & SWT 5
B JavaFX DropDown Menu mit ausführbaren Buttons AWT, Swing, JavaFX & SWT 1
VPChief Buttons Reagieren erst wenn ich Fenster minimiere AWT, Swing, JavaFX & SWT 4
ms_cikar Jbutton erzeugt neue Buttons AWT, Swing, JavaFX & SWT 2
K Buttons dynamisch erstellen (NetBeans) AWT, Swing, JavaFX & SWT 10
S Kreis vergrößern/verkleinern mit Buttons AWT, Swing, JavaFX & SWT 1
J JavaFX von einem Array aus Buttons herausfinden auf welcher geklickt wurde aus dem Array. AWT, Swing, JavaFX & SWT 1
xYurisha ActionListener Methoden Buttons zuweisen! AWT, Swing, JavaFX & SWT 16
xYurisha Aus einer Gui Buttons, Label und ProgessBars entfernen AWT, Swing, JavaFX & SWT 4
CptK Wieso wird nur ein Teil meiner Buttons angezeigt? AWT, Swing, JavaFX & SWT 1
J Ziehen eines Buttons im JPanel AWT, Swing, JavaFX & SWT 2
J Drag and Drop eines Buttons AWT, Swing, JavaFX & SWT 0
J TicTacToe Buttons AWT, Swing, JavaFX & SWT 14
J ActionListener bei Buttons AWT, Swing, JavaFX & SWT 14
DaCrazyJavaExpert Swing Extern den Text eines nicht fetsgelegten Buttons bekommen. AWT, Swing, JavaFX & SWT 12
T Swing Double Click bei Buttons in JTable AWT, Swing, JavaFX & SWT 9
C Buttons funtionieren nicht AWT, Swing, JavaFX & SWT 10
S SWT neues Fenster, buttons aus alten etc... AWT, Swing, JavaFX & SWT 0
G vorgefertigte Buttons oder neue Komponente mit MouseListener? AWT, Swing, JavaFX & SWT 0
Neumi5694 Sprache der Standard-Buttons AWT, Swing, JavaFX & SWT 7
Timo_neu_in_java Buttons Erstellen AWT, Swing, JavaFX & SWT 6
H JavaFX TableCell mit Buttons AWT, Swing, JavaFX & SWT 1
kilopack15 Buttons ohne Funktion AWT, Swing, JavaFX & SWT 2
S Keylistener reagiert bei Buttons nicht. AWT, Swing, JavaFX & SWT 8
S ActionListener für alle Buttons AWT, Swing, JavaFX & SWT 26
T Buttons auf Tablet viel kleiner als am PC AWT, Swing, JavaFX & SWT 0
S Buttons und TextField automatisch vergrößern AWT, Swing, JavaFX & SWT 8
R 2D-Grafik Buttons mit Slick2D und LWJGL AWT, Swing, JavaFX & SWT 2
J JavaFX Buttons mit Array erzeugen AWT, Swing, JavaFX & SWT 1
JG12111989 Buttons funktionieren nicht AWT, Swing, JavaFX & SWT 4
M Buttons in JSplitPane hinzufügen AWT, Swing, JavaFX & SWT 6
X Swing Anwendung regaiert auf keine Buttons mehr wärend while(scanner.hasNextLine()) ausgeführt wird. AWT, Swing, JavaFX & SWT 4
T Durch klicken eines Buttons Klasse wechseln AWT, Swing, JavaFX & SWT 2
A Swing JPanel zeigt Buttons nicht an AWT, Swing, JavaFX & SWT 4
V Tastatur KeyListener für mehrere Buttons AWT, Swing, JavaFX & SWT 1
I JavaFX Langes drücken eines Buttons AWT, Swing, JavaFX & SWT 4
I JavaFX Buttons und TableView AWT, Swing, JavaFX & SWT 2
K Swing Durch Methode erzeugte Buttons ansteuern AWT, Swing, JavaFX & SWT 5
J Java -8 Action Listener für mehrere Buttons AWT, Swing, JavaFX & SWT 9
D JavaFX Dynamisch erzeugte Buttons sollen Code ausführen. AWT, Swing, JavaFX & SWT 2
D Buttons erscheinen nicht auf Frame AWT, Swing, JavaFX & SWT 2
M 4-Gewinnt mit Buttons AWT, Swing, JavaFX & SWT 1
Y Kann man Buttons in einem JFrame rund machen ? AWT, Swing, JavaFX & SWT 2
K Swing Keine Reaktion auf Tastatureingaben bei mehreren Buttons??? AWT, Swing, JavaFX & SWT 4
wolfgang63 JavaFX Transparenter Hintergrund aber sichtbare Buttons AWT, Swing, JavaFX & SWT 6
C Im ActionListener Buttons disablen, einen Thread starten, dann Buttons enablen AWT, Swing, JavaFX & SWT 2
gamebreiti auf usereingabe warten mit GUI(nur Labels, Buttons etc. keine Texteingaben) AWT, Swing, JavaFX & SWT 3
W Buttons verschieben AWT, Swing, JavaFX & SWT 3
P Buttons/Labels auf GUI positionieren AWT, Swing, JavaFX & SWT 2
X Swing setContentPane verdeckt mir alle Buttons Labels etc... AWT, Swing, JavaFX & SWT 14
H Taschenrechnerprojekt in Javafx - Frage zu den Buttons in FXML AWT, Swing, JavaFX & SWT 1
U Swing Beim Bedienen eines Buttons JFrame schließen AWT, Swing, JavaFX & SWT 2
A Radio Buttons sollen den Text der text Area bestimmen AWT, Swing, JavaFX & SWT 9
H org.eclipse.swt.Slider ohne Buttons AWT, Swing, JavaFX & SWT 1
U Buttons schräg implementieren AWT, Swing, JavaFX & SWT 4
X buttons aus externe klasse lesen? AWT, Swing, JavaFX & SWT 3
V Buttons sehen immer "active" aus AWT, Swing, JavaFX & SWT 6
K Event Handling 2 Buttons und Thread stop AWT, Swing, JavaFX & SWT 3
D Buttons erscheinen nicht auf dem zweiten Frame AWT, Swing, JavaFX & SWT 4
D Wie kann ich Buttons und Labels besser anordnen AWT, Swing, JavaFX & SWT 4
C Probleme mit Buttons und einem ActionListener AWT, Swing, JavaFX & SWT 2
A Swing bei Auswahl und klick eines JComboBox buttons die Klasse eines anderen Projekts aufrufen AWT, Swing, JavaFX & SWT 3
M Menü mit Buttons AWT, Swing, JavaFX & SWT 8
H Swing JTabbedPane: Zusätzliche Buttons neben den Tabs AWT, Swing, JavaFX & SWT 7
A Swing Focus der Radio Buttons + text bleibt gleich und gleichzeitige ausgabe zweier Objekte in 1. Fenster AWT, Swing, JavaFX & SWT 3
U Swing Buttons generieren AWT, Swing, JavaFX & SWT 19
G Swing Buttons in Layouts frei platzieren AWT, Swing, JavaFX & SWT 7
S Layouts, mehrere Buttons nebeneinander AWT, Swing, JavaFX & SWT 2
B Buttons auf JLabel? AWT, Swing, JavaFX & SWT 4
J ActionListener für Buttons AWT, Swing, JavaFX & SWT 3
1 Buttons in Kombination mit Linien AWT, Swing, JavaFX & SWT 3
K Aussehen des Buttons resetten AWT, Swing, JavaFX & SWT 4
C Verschiebbare "Buttons" in einer Tabelle AWT, Swing, JavaFX & SWT 3
A JButton - Klicks zählen auf mehreren Buttons AWT, Swing, JavaFX & SWT 2
H Swing Button Klick soll "Untermenü-Buttons" erzeugen AWT, Swing, JavaFX & SWT 2
dzim Toolbar - Problem bei enable/disable von Buttons AWT, Swing, JavaFX & SWT 6
E Netbeans: Buttons mit Label bzw. Rahmen unterlegen AWT, Swing, JavaFX & SWT 8
F Grafik mit Buttons versehen AWT, Swing, JavaFX & SWT 8
J JOptionPane mit zwei Buttons?! AWT, Swing, JavaFX & SWT 3
K Schachbrett mit buttons AWT, Swing, JavaFX & SWT 2
B Buttons entfernen / hinzufügen AWT, Swing, JavaFX & SWT 5
TheWhiteShadow Swing Buttons in Liste AWT, Swing, JavaFX & SWT 7
C AWT Buttons verschwinden, wenn Fenster Vollbild gesetzt wird AWT, Swing, JavaFX & SWT 38
C AWT Verwendung von Buttons in Spielen AWT, Swing, JavaFX & SWT 8

Ähnliche Java Themen

Neue Themen


Oben