Swing: Elemente tabellenförmig anordnen



  • Hi,

    Wie schaffe ich sowas? Also dass Elemente tabellenförmig angeordnet werden, aber mit ungleichen Spaltenbreiten? Da hilft mir GridLayout nicht weiter, oder?

    JLabel    JTextField
    JLabel2   JTextField2
    JLabel3   JTextField3
    

    Ich habe es bisher wie folgt versucht. Ganz merkwürdig ist dabei, dass es mit AWT (also wenn ich die führenden J weglasse) geht, aber mit Swing erscheinen die Texte und Eingabefelder nicht genau nebeneinander. Hier mal Teil einer Klasse, deren Objekt zu einem JFrame hinzugefügt wurde.

    public class InputPanel extends JPanel
    {
    	public InputPanel()
    	{
    		setLayout(new FlowLayout(FlowLayout.LEFT));
    		JPanel labelPanel = new JPanel();
    		labelPanel.setLayout(new GridLayout(3, 1));
    		labelPanel.add(new JLabel("Name", JLabel.LEFT));
    		labelPanel.add(new JLabel("Vorname", JLabel.LEFT));
    		labelPanel.add(new JLabel("Ort", JLabel.LEFT));
    
    		JPanel editPanel = new JPanel();
    		editPanel.setLayout(new GridLayout(3, 1));
    		editPanel.add(new JTextField("Meier"));
    		editPanel.add(new JTextField("Hans"));
    		editPanel.add(new JTextField("Nirgendwo"));
    
    		add(labelPanel);
    		add(editPanel);
    	}
    }
    

    Wie man sieht, habe ich ein FlowLayout, das zwei Panels nebeneinander besitzt. Diese Panels sind wiederum durch ein GridLayout mit 3 Zeilen und einer Spalte charakterisiert. Ich dachte, das sei das Naheliegendste, mit komplexeren Dingen wie GridBag möchte ich mich erst später beschäftigen.

    Was würdet ihr vorschlagen, oder wo liegt mein Fehler, dass Label und Textfeld nicht immer schön auf der gleichen Höhe angezeigt werden?



  • Kennt sich hier niemand mit Swing aus? Eine Antwort würde mich sehr freuen...


  • Mod

    Du kannst ein GridBagLayout nehmen. Ist gar nicht so kompliziert, wenn man es erstmal verstanden hat.



  • Danke für die Antwort! Ja, mit der Zeit werde ich das GridBagLayout sicher noch anschauen. Ich dachte nur, vielleicht gibts da gerade eine sehr einfache Möglichkeit, die ich übersehe. BoxLayout wäre vielleicht auch noch etwas.

    Momentan habe ich die vertikalen Abstände der Komponenten hardcoded, wenn ich dann eine bessere Möglichkeit sehe, werde ich das anpassen. Ich wollte nur nicht zu viele Dinge gleichzeitig versuchen, lieber mal einen Teil richtig lernen... 😉



  • Hi

    Momentan hat dein "haupt" Panel ein Flow Layout. Auf diesem platzierst du jeweils ein Panel mit dem GridLayout das 3 Zeilen und 1 er Spalte besitzt.

    Warum platzierst du nicht ein Panel mit dem GridLayout mit 3 Zeilen und 2 Spalten?

    Dann währe doch alles in Butter oder?



  • Tu dir das mit GridBagLayout nicht an. Benutze lieber gleich TableLayout.



  • @JCoder: Das wäre nicht so angenehm, da dann die JLabels und JTextFields gleich breit sein müssen.

    @DEvent: Danke für den Vorschlag! Aber meinst du wirklich, GridBagLayout hat keinen Wert? Ich möchte wenns geht nicht auf externe Bibliotheken zurückgreifen...


  • Mod

    Schwinger schrieb:

    @DEvent: Danke für den Vorschlag! Aber meinst du wirklich, GridBagLayout hat keinen Wert? Ich möchte wenns geht nicht auf externe Bibliotheken zurückgreifen...

    Das GridBagLayout ist sehr mächtig. Du solltest Dich so schnell wie möglich damit auseinandersetzen. Ich stelle bei mir fest, dass es das Layout ist, was ich am häufigsten einsetze.

    Und da brauchst Du auch keine Berührungsängste zu haben. Sicherlich wird es am Anfang nicht ganz so klappen, wie Du willst, aber das wirst Du ruck-zuck in den Griff kriegen. Einfach mal machen, wenn Du Probleme kriegst, kannst Du ja hier nachfragen. Ich denke, Fragen zur einfachen Benutzung des GridBagLayouts werden hier definitiv geklärt werden können. 😋



  • Gut, vielen Dank an alle für die Hilfe!



  • Gregor schrieb:

    Schwinger schrieb:

    @DEvent: Danke für den Vorschlag! Aber meinst du wirklich, GridBagLayout hat keinen Wert? Ich möchte wenns geht nicht auf externe Bibliotheken zurückgreifen...

    Das GridBagLayout ist sehr mächtig. Du solltest Dich so schnell wie möglich damit auseinandersetzen. Ich stelle bei mir fest, dass es das Layout ist, was ich am häufigsten einsetze.

    Und da brauchst Du auch keine Berührungsängste zu haben. Sicherlich wird es am Anfang nicht ganz so klappen, wie Du willst, aber das wirst Du ruck-zuck in den Griff kriegen. Einfach mal machen, wenn Du Probleme kriegst, kannst Du ja hier nachfragen. Ich denke, Fragen zur einfachen Benutzung des GridBagLayouts werden hier definitiv geklärt werden können. 😋

    Was kannst du mit einem GridBagLayout machen, was du mit einem TableLayout nicht machen kannst? IMHO ist GridBagLayout eine Verschwendung der Zeit, denn mit TableLayout kannst du das gleiche Layout machen mit weniger kompexen Code und schneller. Der einzige Nachteil ist eben die externe Jar, weil aus irgendeinem Grund wird GridBagLayout den JDK-Usern aufgezwungen.



  • Gregor schrieb:

    Schwinger schrieb:

    @DEvent: Danke für den Vorschlag! Aber meinst du wirklich, GridBagLayout hat keinen Wert? Ich möchte wenns geht nicht auf externe Bibliotheken zurückgreifen...

    Das GridBagLayout ist sehr mächtig. Du solltest Dich so schnell wie möglich damit auseinandersetzen. Ich stelle bei mir fest, dass es das Layout ist, was ich am häufigsten einsetze.

    Und da brauchst Du auch keine Berührungsängste zu haben. Sicherlich wird es am Anfang nicht ganz so klappen, wie Du willst, aber das wirst Du ruck-zuck in den Griff kriegen. Einfach mal machen, wenn Du Probleme kriegst, kannst Du ja hier nachfragen. Ich denke, Fragen zur einfachen Benutzung des GridBagLayouts werden hier definitiv geklärt werden können. 😋

    Guck an, bei mir ist das GBL das layout, was ich am seltensten einsetze (= nie). Es gibt keinen Grund das GBL zu verwenden, wenn es ausreichend bessere alternativen gibt (table-, mig-, formlayout) es sei denn man will unbedingt zeit totschlagen (sowohl beim schreiben, beim lesen und beim ändern vom code)...


Anmelden zum Antworten