Probleme mit der GUI

Denke auch, dass sich für dein Vorhaben nur ein Frame besser eigenen würde und dann die verschiedenen Optionskategorien (Lauflicht, Dimmer, Sonderfunktionen) in verschiedene Panels und die wiederum in ein passendes Layout

nein

Ich habe jetzt versucht ein wenig mit JPanels weiterzumachen und bin auf ein weiteres Problem gestoßen. Wie kann ich in den JPanels die Anordnung der Objekte ansteuern? Ich wollte zur Übung ein Label und ein Button einfügen, aber die haben sich immer einfach nebeneinander angeordnet. Habe irgendwo gelesen, man soll es mit setLayout(null) versuchen, aber dann wird gar nichts mehr im Panel angezeigt. Außerdem die Frage, ob ich nun einfach “add(newPanel);” oder doch “getContentPane().add(newPanel);” das kommt bei mir aufs selbe hinaus, wo ist der Unterschied?

Hier der betroffene Code:

   private JPanel newPanel;
   private JButton LED1, LED2, LED3, LED4;
   public void actionPerformed(ActionEvent e) {
      
      
      newPanel = new JPanel();
      newPanel.setBounds(200,1,200,250);
      newPanel.setLayout(null);
      
      
      JLabel newLabel = new JLabel("LED-Dimmung");
      newLabel.setBounds(200,20,200,15);
      newPanel.add(newLabel);
      
      LED1 = new JButton("LED1");
      LED1.setBounds(200,50,200,20);
      newPanel.add(LED1);
      //add(newPanel);
      getContentPane().add(newPanel);
      setVisible(true);
   }
}```

Dafür gibt es in Java verschieden LayoutManager
http://openbook.galileocomputing.de/javainsel9/javainsel_19_011.htm#mj3bf712331be49e8cbc1dae33786af8ac

Besser und wenn nicht nötig kein Null Layout. Das mag am Anfang recht einfach und verlockend wirken, wenn man aber nicht weiß was man da tut kann man sich bei komplexeren Layouts einige Probleme einfangen.
u.a. http://www.leepoint.net/notes-java/GUI/layouts/nulllayout.html
Falls man mit den Standard LayoutManagern nicht zurecht kommt, gibt es noch externe wie FormsLayout, MigLayout, TableLayout…

Gilt ja nur für JFrame. Seit Java 1.5 gibt es da keinen Unterschied mehr. auch ein schlichtes add() fügt die Komponente auf der ContentPane des Frames ein.

Am besten du entfernst ganz schnell das setLayout(null); und die setBounds().
Wenn du bei deinem Frame pack() aufrufst, werden die einzelnen Componenten so vergrößert, dass es optimal passt.
Am Anfang ist z.B. das GridLayout sehr einfach:

setLayout(new GridLayout(ZEILEN, SPALTEN));
add(...);//Zeile 1 Zelle 1
add(...);//nächste Zelle
...```

LG

Okay, also muss man da vorgefertigte Sortiermethoden nehmen. Kann man das nicht per Hand machen, wenn man das jetzt nicht alles symmetrisch anordnen wollen würde?

Und um meinen Frame zu erstellen hatte ich auch das setLayout(null) benutzt. Wenn ich das dort auch wegnehme, wird aber das Layout des Frames ganz anders und die Buttons werden auch gar nicht mehr angezeigt. Hatte das bisher nur so verstanden, dass dieses setlayout(null) dazu da ist, dass man die Elemente selbst anordnen kann. Ist das also beim Frame in Ordnung und nur beim Panel nicht?

Danke für eure Hilfe!

Nein es gilt grundsätzlich Null-Layout möglichst zu meiden (ist meine Meinung)
JFrame besitzt im Standard BorderLayout, wenn man da einfach (ohne Bereichsangabe NORTH, EAST, SOUTH, WEST …) per add eine Komponete hinzufügt wird diese in den CENTER Bereich gesetzt. (vgl. Link in meinem vorherigen Post). Wenn man nun die nächste Komponente per add hinzufügt ersetzt diese die zuerst gesetzte.

LayoutManager kann man durch Verschachteln von JPanels „kombinieren“.

Du kannst LayoutManager auch ineinander schachteln. Mit etwas Übung geht das dann eigentlich recht gut von der Hand.

Ich habe neulich mal in diesem Thema ein Beispielprogramm mit verschiedenen LayoutManagern in geschachtelten Panels gepostet. Der TO hatte “NullLayout” verwendet und sich damit einiges verbaut. Das “NullLayout” ist immer ein Risiko, sobald das Programm plattformübergreifend eingesetzt wird. Dann kann es passieren, dass in der GUI gar nichts mehr stimmt.

Jedenfalls kann sich der TO das mal ansehen, vielleicht kann er ja etwas für sein Programm “herausziehen”.
Im Wiki gibt es auch einige Themen zu verschiedenen LayoutManagern.