Code-Beispiele mit LayoutManager-Kombinationen: Unterschied zwischen den Versionen

Aus Byte-Welt Wiki
Zur Navigation springenZur Suche springen
K (Fenster mit BorderLayout und Buttons)
K
 
(16 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
 
[[Kategorie:Java-Codeschnipsel]]
 
[[Kategorie:Java-Codeschnipsel]]
 
[[Kategorie:Swing]]
 
[[Kategorie:Swing]]
[[Kategorie:Tutorials]]
+
[[Kategorie:Tutorials (Java)]]
 +
Dieser Artikel zeigt anhand von Code und vielen Bildern, Schritt für Schritt, wie man durch Kombination von [[LayoutManager|LayoutManagern]] mit Java komplexe Benutzeroberflächen mit [[Swing]] erzeugt.
  
=Fenster mit BorderLayout und Buttons=
+
=Ausgangspunkt - ein einfaches Fenster=
Sehr oft braucht man Fenster für bspw. benutzerdefinierte Dialoge.  
+
Sehr oft braucht man Fenster für bspw. benutzerdefinierte Dialoge. {{JAPI|JFrame}} und {{JAPI|JDialog}} haben bereits von Hause aus ein [[BorderLayout]]. Wir brauchen also nicht explizit noch einen [[LayoutManager]] setzen.
  
 
Hier mal ein JFrame (kein Dialog):
 
Hier mal ein JFrame (kein Dialog):
[[Datei:Standard-Frame.png]]
+
 
 +
[[Datei:Standard-Frame.png|500px]]
  
 
Sehen wir uns an, wie man derartige Dialoge aufbauen kann.
 
Sehen wir uns an, wie man derartige Dialoge aufbauen kann.
 
==Ein einfaches Fenster==
 
 
<syntaxhighlight lang=java>
 
<syntaxhighlight lang=java>
 
import java.awt.*;
 
import java.awt.*;
Zeile 41: Zeile 41:
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
==Fenster mit [[BorderLayout]] und Buttons==
 +
 +
Nun möchten wir am unteren Fensterrand ein paar Standard-[[JButton|Buttons]] unterbringen. Dazu schreiben wir uns eine private [[Methode]], die wir in unsere Klasse ''StandardFrame'' einfügen.
 +
 +
<syntaxhighlight lang=java>
 +
private JPanel createButtonPanel() {
 +
  JPanel panel = new JPanel();
 +
  panel.add(new JButton("Abbrechen"));
 +
  panel.add(new JButton("OK"));
 +
  return panel;
 +
}
 +
</syntaxhighlight>
 +
 +
Wenn wir das nun kompilieren und ausführen, werden wir an unserem Fenster keine Veränderung feststellen.
 +
 +
Damit die Buttons auch noch dargestellt werden, fügen wir der Konstruktor-Methode noch den passenden Aufruf nach dem Initialisieren des JFrame und vor der ''setVisible()''-Methode hinzu.
 +
 +
<syntaxhighlight lang=java>
 +
  frame.add(createButtonPanel(), BorderLayout.SOUTH);
 +
</syntaxhighlight>
 +
 +
Damit setzen wir unser Panel mit den Buttons und den unteren Bereich des JFrames.
 +
 +
Das Ergebnis sieht dann so aus:
 +
 +
[[Datei:Standard-Frame_mit_Buttons.png|500px]]
 +
 +
Wer nun möchte, dass die Buttons nach rechts ausgerichtet werden, braucht nur die Initialisierung des JPanels in der '''createButtonPanel()'''-Methode zu ändern:
 +
 +
<syntaxhighlight lang=java>
 +
  JPanel panel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
 +
</syntaxhighlight>
 +
 +
Die Ausgabe ändert sich dann wie folgt:
 +
 +
[[Datei:Standard-Frame_mit_Buttons_rechts.png|500px]]
 +
 +
Das sieht schon ganz gut aus. Allerdings haben die Buttons aufgrund des [[FlowLayout|FlowLayouts]], in dem sie liegen, nicht die gleiche Breite. Wem das also nicht gefällt, baut ein weiteres JPanel mit einem [[GridLayout]] und setzt es ins Layout.
 +
 +
Wir verändern den Code der '''createButtonPanel()'''-Methode:
 +
 +
<syntaxhighlight lang=java>
 +
  private JPanel createButtonPanel() {
 +
      JPanel panel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
 +
      JPanel gridPanel = new JPanel(new GridLayout(1, 0, 3, 0));
 +
      gridPanel.add(new JButton("Abbrechen"));
 +
      gridPanel.add(new JButton("OK"));
 +
      panel.add(gridPanel);
 +
      return panel;
 +
  }
 +
</syntaxhighlight>
 +
 +
Das Ergebnis sieht dann so aus:
 +
 +
[[Datei:Standard-Frame_mit_Buttons_rechts_gleiche_Breite.png|500px]]
 +
 +
{{Fragen stellen}}
 +
 +
=Weiterführende Artikel=
 +
*[[Warum man nicht von JFrame/JDialog erben sollte]]

Aktuelle Version vom 22. Dezember 2018, 10:58 Uhr

Dieser Artikel zeigt anhand von Code und vielen Bildern, Schritt für Schritt, wie man durch Kombination von LayoutManagern mit Java komplexe Benutzeroberflächen mit Swing erzeugt.

Ausgangspunkt - ein einfaches Fenster

Sehr oft braucht man Fenster für bspw. benutzerdefinierte Dialoge. JFrame und JDialog haben bereits von Hause aus ein BorderLayout. Wir brauchen also nicht explizit noch einen LayoutManager setzen.

Hier mal ein JFrame (kein Dialog):

Standard-Frame.png

Sehen wir uns an, wie man derartige Dialoge aufbauen kann.

import java.awt.*;
import javax.swing.*;

public class StandardFrame {
   public StandardFrame() {
      Dimension size = Toolkit.getDefaultToolkit().getScreenSize();
      JFrame frame = new JFrame("Standard-Hauptfenster");
      frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
      frame.setSize(size.width * 50 / 100, size.height * 50 / 100);
      frame.setLocationRelativeTo(null);
      frame.setVisible(true);
   }

   public static void main(String[] args) {
      try {
         UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
      } catch(Exception e) {
         System.err.println(e);
      }

      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            new StandardFrame();
         }
      });
   }
}

Fenster mit BorderLayout und Buttons

Nun möchten wir am unteren Fensterrand ein paar Standard-Buttons unterbringen. Dazu schreiben wir uns eine private Methode, die wir in unsere Klasse StandardFrame einfügen.

private JPanel createButtonPanel() {
   JPanel panel = new JPanel();
   panel.add(new JButton("Abbrechen"));
   panel.add(new JButton("OK"));
   return panel;
}

Wenn wir das nun kompilieren und ausführen, werden wir an unserem Fenster keine Veränderung feststellen.

Damit die Buttons auch noch dargestellt werden, fügen wir der Konstruktor-Methode noch den passenden Aufruf nach dem Initialisieren des JFrame und vor der setVisible()-Methode hinzu.

   frame.add(createButtonPanel(), BorderLayout.SOUTH);

Damit setzen wir unser Panel mit den Buttons und den unteren Bereich des JFrames.

Das Ergebnis sieht dann so aus:

Standard-Frame mit Buttons.png

Wer nun möchte, dass die Buttons nach rechts ausgerichtet werden, braucht nur die Initialisierung des JPanels in der createButtonPanel()-Methode zu ändern:

   JPanel panel = new JPanel(new FlowLayout(FlowLayout.RIGHT));

Die Ausgabe ändert sich dann wie folgt:

Standard-Frame mit Buttons rechts.png

Das sieht schon ganz gut aus. Allerdings haben die Buttons aufgrund des FlowLayouts, in dem sie liegen, nicht die gleiche Breite. Wem das also nicht gefällt, baut ein weiteres JPanel mit einem GridLayout und setzt es ins Layout.

Wir verändern den Code der createButtonPanel()-Methode:

   private JPanel createButtonPanel() {
      JPanel panel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
      JPanel gridPanel = new JPanel(new GridLayout(1, 0, 3, 0));
      gridPanel.add(new JButton("Abbrechen"));
      gridPanel.add(new JButton("OK"));
      panel.add(gridPanel);
      return panel;
   }

Das Ergebnis sieht dann so aus:

Standard-Frame mit Buttons rechts gleiche Breite.png


Fragen

Das Thema wurde nicht ausreichend behandelt? Du hast Fragen dazu und brauchst weitere Informationen? Lass Dir von uns helfen!

Wir helfen dir gerne!


Dir hat dieser Artikel gefallen? Oder Du hast Fehler entdeckt und möchtest zur Berichtigung beitragen? Prima! Schreibe einen Kommentar!

Du musst angemeldet sein, um einen Kommentar abzugeben.


Weiterführende Artikel