LayoutManager Layout reagiert nicht auf Constraints

Mino1337

Mitglied
Hallo,

Ich habe meinen Hauptframe mit dem GridBagLayout in 4 Fenster unterteilt und wollte nun per Buttonklick eines von diesen Fenstern (Panel b) in der größe ändern.
Das Funktioniert auch Wunderbar.
Wenn man den Button geklickt hat wird das Fenster klein, der Button auf den man geklickt hat wird entfernt und ein neuer Button mit anderer aufschrift wird an seiner stelle angezeigt.

Wenn man nun auf diesen klickt passiert garnichts. Allerdings sollte das Fenster wieder auf seine alte größe wachsen.

Java:
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;

public class Hauptframe implements ActionListener{
   
   
    public static GridBagLayout layout = new GridBagLayout(); //Layout für den gesammten Frame
    public static GridBagConstraints cons;
    public static FlowLayout aLayout = new FlowLayout(FlowLayout.LEFT,5,5);
    public static JFrame f = new JFrame("Sammelfuchs");
   
    public static JPanel a = new JPanel();
    public static JPanel b = new JPanel();
    public static JPanel c = new JPanel();
    public static JPanel d = new JPanel();
   
    public static JButton sammlungenausblenden = new JButton( "Sammlungen ausblenden" );
    public static JButton sammlungeneinblenden = new JButton( "Sammlungen einblenden" );
    public static JButton neuesammlung = new JButton( "Neue Sammlung" );
   
   
   
    public Hauptframe(){
       
        a.setBackground(Color.red);
        b.setBackground(Color.yellow);
        c.setBackground(Color.blue);
        d.setBackground(Color.white);
       
        f.setMinimumSize(new Dimension(800, 600));
        f.setVisible(true);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Toolkit.getDefaultToolkit().setDynamicLayout(true);
        f.setLayout(layout);
        layoutset(0);
        menu();
       
        f.add(a);
        f.add(b);
        a.setLayout(aLayout);
        f.add(c);
        f.add(d);

        sammlungenausblenden.setActionCommand("sammlungenausblenden");
        sammlungenausblenden.addActionListener(this);
        sammlungeneinblenden.setActionCommand("sammlungeneinblenden");
        sammlungenausblenden.addActionListener(this);
       
        buttons(0);
       
        f.validate();
       
   
    }
   
    //Stellt sie Constraints ein
    public static void layerdim(Component a,GridBagLayout c,int gridx, int gridy, int gridwith, int gridheight,int ipadx,int ipady, double weightx, double weighty, int s, int anchor){
        cons = new GridBagConstraints();     //Bereinigung der Constrains (Alles auf Null setzen weil neu)
        cons.gridx = gridx;                 //In welcher Spalte startet das Objekt
        cons.gridy = gridy;                 //in welcher Zeile endet das Objekt
        cons.gridwidth = gridwith;            //Wieviele Spalten nimmt das Objekt ein
        cons.gridheight = gridheight;         //Wieviele Zeilen nimmt das Objekt ein
        cons.ipadx = ipadx;                 //Wie Breit ist das Objekt Mindestens
        cons.ipady = ipady;                 //Wie Hoch ist das Objekt Mindestens
        cons.weightx = weightx;             //Prozentualer Wert der Breite
        cons.weighty = weighty;             //Prozentualer Wert der Höhe
       
        if(s==0){
            cons.fill = GridBagConstraints.NONE;        //Das Objekt wird nur so gross in seinen Bereich angezeigt wie es ist
        }else if(s==1){
            cons.fill = GridBagConstraints.HORIZONTAL;    //Das Objekt füllt den gesammten Raum Horizontal
        }else if(s==2){
            cons.fill = GridBagConstraints.VERTICAL;    //Das Objekt füllt den gesammten Raum Vertikal
        }else if(s==3){
            cons.fill = GridBagConstraints.BOTH;        //Das Objekt füllt den gesammten Raum Horizontal und Vertikal
        }
       
        if(anchor==0){
            cons.anchor = GridBagConstraints.CENTER;
        }else if(anchor==1){
            cons.anchor = GridBagConstraints.NORTH;
        }else if(anchor==2){
            cons.anchor = GridBagConstraints.EAST;
        }else if(anchor==3){
            cons.anchor = GridBagConstraints.WEST;
        }else if(anchor==4){
            cons.anchor = GridBagConstraints.SOUTH;
        }else if(anchor==5){
            cons.anchor = GridBagConstraints.SOUTHEAST;
        }else if(anchor==6){
            cons.anchor = GridBagConstraints.NORTHEAST;
        }else if(anchor==7){
            cons.anchor = GridBagConstraints.SOUTHWEST;
        }else if(anchor==8){
            cons.anchor = GridBagConstraints.NORTHWEST;
        }
       
        c.setConstraints(a,cons);   
    }
   
    public void menu(){
       
        JMenuBar menuBar = new JMenuBar();
       
        JMenu neu = new JMenu( "Neu" );
        menuBar.add( neu );
        neu.add(new JMenuItem("Sammlung"));
        neu.add(new JMenuItem("Eintrag"));
       
        JMenu ansicht = new JMenu( "Ansicht" );
        menuBar.add( ansicht );
        ansicht.add(new JCheckBoxMenuItem("Sammlungen einblenden"));
       
        JMenu hilfe = new JMenu( "Hilfe" );
        menuBar.add( hilfe );
       
        JMenu ueber = new JMenu( "Über" );
        menuBar.add( ueber );
       
        f.setJMenuBar( menuBar );
    }
   
   
    //Korrigiert das Layout nach Buttonklick
    public void layoutset(int x){
        if(x==0){
            layerdim(a,layout,0,0,2,1,1,0,0.0,0.0,3,0);
            layerdim(b,layout,0,1,1,1,200,0,0.0,1.0,3,0);
            layerdim(c,layout,1,1,1,1,1,1,1.0,0.1,3,0);
            layerdim(d,layout,0,3,2,1,1,20,1.0,0.0,3,0);
            f.validate();
            f.repaint();
        }else if(x==1){
            layerdim(b,layout,0,1,1,1,0,0,0.0,1.0,3,0);
            f.validate();
            f.repaint();

        }
    }
   
    //Ordnet nach Buttonklick die Buttons in Panel a neu an und tauscht sie aus
    public void buttons(int x){
        if(x==0){
            a.removeAll();
            a.add(sammlungenausblenden);
            a.add(neuesammlung);
            a.validate();
            f.repaint();
        }else if(x==1){
            a.removeAll();
            a.add(sammlungeneinblenden);
            a.add(neuesammlung);
            a.validate();
            f.repaint();
        }
    }
   
    public void actionPerformed(ActionEvent e) {
        if(e.getActionCommand().equals("sammlungeneinblenden")){
            buttons(0);
            layoutset(0);
        }else if(e.getActionCommand().equals("sammlungenausblenden")){
            buttons(1);
            layoutset(1);
        }

             }
   
}

Das ist bis auf die Main methode der gesammte Code. Die Main Methode erzeugt bisher nur ein Objekt dieser Klasse.

Vielen Dank für eure Hilfe.
 

X5-599

Top Contributor
Zunächstmal ist mir das "Toolkit.getDefaultToolkit().setDynamicLayout(true)" aufgefallen. Das habe ich noch nirgendwo gesehen. Laut API Doku hat das was mit dynamischen Layout Anpassungen bei z.B. Resize von Containern zu tun. Da steht auch, dass man das mit "Toolkit.getDefaultToolkit().getDesktopProperty("awt.dynamicLayoutSupported")" abfragen kann. Hab ich mal gemacht ohne die Zeile "setDynamicLayout(true)". Kommt sowieso "true" zurück. Ist also vermutlich nicht nötig das explizit auf "true" zu setzen... Ich schreibe "vermutlich", da ich nicht genau weiss was das "setDynamicLayout" überhaupt macht. Ich habe es bisher halt nie gebraucht.

Soviel dazu. Hat mit deinem Problem nichts zu tun.

Du hast lediglich hier:

sammlungenausblenden.setActionCommand("sammlungenausblenden");
sammlungenausblenden.addActionListener(this);
sammlungeneinblenden.setActionCommand("sammlungeneinblenden");
sammlungenausblenden.addActionListener(this); <---

sammlungenausblenden statt sammlungeneinblenden geschrieben.
 

Mino1337

Mitglied
OMG Wie Peinlich D= ... Ich hab gestern explizit nach so einem Fehler gesucht aber keinen gefunden XD ...

Vielen Dank das wär mir nich aufgefallen, ich sollte meine Buttons anders benennen.

Ich habe gelesen das manche Layouts bei größenveränderungen des Frames erst mit loslassen der Maustaste refreshen. Dort wo ich das gelesen habe stand aber nicht welche Layoutmanager dies sind. Weswegen ich vorsichtshalber, da ich zu diesem Zeitpunkt das Problem durch einen anderen Fehler hatte, die Toolkit.getDefaultToolkit().setDynamicLayout(true) gesetzt habe =D ...

Ich denke ich nehm sie wieder raus.

Nochmal Dankeschön =)
 

X5-599

Top Contributor
Kein Problem :)

Wie gesagt, ich hab das setDynamicLayout(true) noch nie vorher gesehen. Weiss also nicht, ob man es weglassen sollte oder nicht. Ich weiss nur, dass bisher meine (kleinen) GUIs immer so reagiert haben, wie ich es wollte. Also ohne das setDynamicLayout. Vielleicht weiss ja hier irgendwer mehr über diese mysteriöse Zeile ;)
 

Mino1337

Mitglied
Naja ich weiss schon mehr nur nicht alles darüber =D ... Welcher Layoutmanager das annimmt weiss ich leider nicht. Aber ich weiss das manche Layoutmanager eben nicht Dynamisch bei Framegrößenveränderungen reagieren.

Funktionierte übrigens auch ohne setDynamicLayout(true) ...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Welches Java Layout sollte ich verwenden? AWT, Swing, JavaFX & SWT 3
S Layout - Problem AWT, Swing, JavaFX & SWT 1
D Layout einer scene mit ListView Elementen und Zwei Textfeldern AWT, Swing, JavaFX & SWT 1
H Swing , GridLayout, Größenbestimmung der Komponenten im Layout AWT, Swing, JavaFX & SWT 8
melaniemueller Layout wechseln über RadioButtons AWT, Swing, JavaFX & SWT 4
E LayoutManager Welcher Layout-Mix löst mein Problem? AWT, Swing, JavaFX & SWT 3
J Swing Hilfe bei Layout AWT, Swing, JavaFX & SWT 2
R Layered Layout AWT, Swing, JavaFX & SWT 1
E showAndWait is not allowed during animation or layout processing Memory FX AWT, Swing, JavaFX & SWT 2
newJavaGeek Grid-Layout problem AWT, Swing, JavaFX & SWT 7
E Swing Layout während der Laufzeit anpassen AWT, Swing, JavaFX & SWT 3
P JavaFX Zugriff auf Fenster/Layout-Container in eigenen Klassen AWT, Swing, JavaFX & SWT 5
R Layout Manager null und Component wird nicht hinzugefügt AWT, Swing, JavaFX & SWT 3
S Kann javafx.scene.layout.VBoxBuilder nicht importieren AWT, Swing, JavaFX & SWT 3
OSchriever Layout über Radiobuttons ändern AWT, Swing, JavaFX & SWT 4
B Swing Probleme mit dem Layout AWT, Swing, JavaFX & SWT 1
Hatsi09 JButton text layout AWT, Swing, JavaFX & SWT 9
I JavaFX - festes Layout AWT, Swing, JavaFX & SWT 1
S JavaFX TableView einzelne Zelle Layout zuweisen AWT, Swing, JavaFX & SWT 3
DaCrazyJavaExpert Swing Zwei gleichgroße Panels in einem Scrollpane mit Layout AWT, Swing, JavaFX & SWT 9
Neumi5694 Swing Card-Layout, Fokus AWT, Swing, JavaFX & SWT 2
kilopack15 Interface mit Layout verknüpfen AWT, Swing, JavaFX & SWT 2
Y Layout/Ausrichtungsprobleme AWT, Swing, JavaFX & SWT 4
T JavaFX Custom Layout AWT, Swing, JavaFX & SWT 5
A GUI Layout AWT, Swing, JavaFX & SWT 11
A Layout-Manager, JScrollPane, ... Chaos AWT, Swing, JavaFX & SWT 5
L wie Layout-Grid in JXPanel anzeigen? AWT, Swing, JavaFX & SWT 5
L Eigene Component Layout AWT, Swing, JavaFX & SWT 4
Soloeco LayoutManager Wie und welches Layout nutze ich am Besten? AWT, Swing, JavaFX & SWT 13
M LayoutManager Modalen JDialog ein Layout zuweisen AWT, Swing, JavaFX & SWT 3
IsSchoGuat LayoutManager Layout-Containergrösse AWT, Swing, JavaFX & SWT 4
F GridBag Layout AWT, Swing, JavaFX & SWT 1
Z Absolutes Layout / Kontrolle über Anordnung AWT, Swing, JavaFX & SWT 3
M Mehrere Jpanel in einem JScrollPane (Layout) AWT, Swing, JavaFX & SWT 2
M Layout-Probleme unter Swing AWT, Swing, JavaFX & SWT 5
D LayoutManager GUI skalieren und deren Komponenten mit Grid(Bag)Layout-Manager. AWT, Swing, JavaFX & SWT 5
J ComboBoxModel addElement verändert Layout AWT, Swing, JavaFX & SWT 8
E Probelm mit Layout AWT, Swing, JavaFX & SWT 1
B Hilfe welches Layout brauch ich AWT, Swing, JavaFX & SWT 4
P Tipps für GUI-Layout AWT, Swing, JavaFX & SWT 2
M Passender Layout-Manager AWT, Swing, JavaFX & SWT 3
M LayoutManager Layout zur Laufzeit ändern AWT, Swing, JavaFX & SWT 8
N Swing Zweifarbiges Layout für den Filechooser AWT, Swing, JavaFX & SWT 12
B LayoutManager Card Layout AWT, Swing, JavaFX & SWT 2
E Angehängtes Layout, aber wie? AWT, Swing, JavaFX & SWT 12
1 Eigenes Layout schreiben AWT, Swing, JavaFX & SWT 4
B SWT layout invalidieren in SWT? AWT, Swing, JavaFX & SWT 4
R Welchen Layout Manager/ Wie strukturieren? AWT, Swing, JavaFX & SWT 14
J Layout: oben 20% unten 80% AWT, Swing, JavaFX & SWT 12
T Layout für Listendarstellung AWT, Swing, JavaFX & SWT 3
F LayoutManager Null-Layout unter Linux im TreeCellEditor AWT, Swing, JavaFX & SWT 3
K Eclipse Layout (Gimp Layout, Tiled Layout...) AWT, Swing, JavaFX & SWT 4
C LayoutManager Passendes Layout gesucht AWT, Swing, JavaFX & SWT 2
M Layout funktioniert nicht AWT, Swing, JavaFX & SWT 3
dzim Layout von Panes in JFX2 AWT, Swing, JavaFX & SWT 17
H Layout Idee AWT, Swing, JavaFX & SWT 8
M Swing Dynamisches Layout AWT, Swing, JavaFX & SWT 10
P Swing welchen Layout Manager verwenden AWT, Swing, JavaFX & SWT 9
J LayoutManager Komponentenaustausch zerschießt Layout AWT, Swing, JavaFX & SWT 4
F Layout-Problem AWT, Swing, JavaFX & SWT 2
K Gui Layout Frage AWT, Swing, JavaFX & SWT 5
B Anderen Layout-Manager verwenden AWT, Swing, JavaFX & SWT 17
E Null-Layout - Wie geht es ohne? AWT, Swing, JavaFX & SWT 19
Furtano AWT mehrere Bilder in einen Frame zeichnen + Layout Manager AWT, Swing, JavaFX & SWT 10
L Swing dynamisches Image-Panel in Layout einbinden AWT, Swing, JavaFX & SWT 10
D Bild in JPanel verschiebt Layout. Wie fixieren? AWT, Swing, JavaFX & SWT 9
GUI-Programmer Wieder ne Layout Frage AWT, Swing, JavaFX & SWT 11
GUI-Programmer LayoutManager Kurze Layout Frage - eine komponente mittig? AWT, Swing, JavaFX & SWT 5
D Problem mit 3-Spalten Layout AWT, Swing, JavaFX & SWT 17
ARadauer Wenig Material zum Thema: Design, Layout, Usability von Swing Anwendungen AWT, Swing, JavaFX & SWT 11
S LayoutManager Welcher LayoutManager für dieses zweispaltige Layout? AWT, Swing, JavaFX & SWT 13
G LayoutManager Layout welches von Links nach rechts anordnet mit TOP Alignment! AWT, Swing, JavaFX & SWT 5
A Best practice für konkretes Layout AWT, Swing, JavaFX & SWT 10
G LayoutManager Layout für Spalten AWT, Swing, JavaFX & SWT 8
A Layout/JPanelgröße AWT, Swing, JavaFX & SWT 6
S pack() bei null-Layout AWT, Swing, JavaFX & SWT 10
C SWT Tabellen-Layout in StyledText? AWT, Swing, JavaFX & SWT 6
J LayoutManager Welchen Layout/Design-Manager? AWT, Swing, JavaFX & SWT 4
R Swing Layout setzen AWT, Swing, JavaFX & SWT 3
L Layout automatische Anpassung umgehen? AWT, Swing, JavaFX & SWT 5
A Problem mit Layout-Manager AWT, Swing, JavaFX & SWT 11
J Button Layout anpassen AWT, Swing, JavaFX & SWT 22
H LayoutManager Layout mit GridBagLayout machbar? AWT, Swing, JavaFX & SWT 6
B Buttongröße im Layout AWT, Swing, JavaFX & SWT 4
B LayoutManager Layout Problem AWT, Swing, JavaFX & SWT 14
O LayoutManager Layout entwerfen AWT, Swing, JavaFX & SWT 3
A diverse Layout-Fragen AWT, Swing, JavaFX & SWT 4
F LayoutManager Eigenes Layout die Lösung?! AWT, Swing, JavaFX & SWT 4
dzim SWT Layout mit Sections aus Eclipse Forms AWT, Swing, JavaFX & SWT 17
F JScrollPane verwirft Layout von JPanel AWT, Swing, JavaFX & SWT 2
C LayoutManager Layout und vergrößern des Frames AWT, Swing, JavaFX & SWT 5
E Swing Runde Buttons / Position eines Obj. im Layout AWT, Swing, JavaFX & SWT 7
S Swing UI-Elemente ordnen sich ungewollt in einer Reihe (ohne Layout) AWT, Swing, JavaFX & SWT 5
A Ungewollte Layout änderungen AWT, Swing, JavaFX & SWT 3
A Suche: Eclipse-GUI-Layout AWT, Swing, JavaFX & SWT 5
E JPanel mit Null Layout entfernt Buttons AWT, Swing, JavaFX & SWT 11
N Swing Layout positionieren AWT, Swing, JavaFX & SWT 2
B Methode setzt nicht das Layout in einer if-Abfrage AWT, Swing, JavaFX & SWT 13
H LayoutManager Dynamisches Layout AWT, Swing, JavaFX & SWT 3
M SWT Breite von Textfeld nur ohne Layout änderbar AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben