# Button(s) vertikal mittig in JPanel ausrichten



## data89 (7. Apr 2009)

Guten Morgen,

ich habe eine ganz kurze Frage, auf welche ich auch mit Google keine Antwort finden konnte:

Ich habe ein JPanel (ca. 500px x 500px) und möchte mehrere bzw. einen Button(s) vertikal mittig ausrichten, d.h. der Button soll vertikal in der Mitte des Panels sein und hoizontal z.B. rechts - obwohl sich letzteres durch ein "FlowLayout" realisieren lässt.

Vielen Dank vorab, 
data89


----------



## diggaa1984 (7. Apr 2009)

> vertikal in der Mitte des Panels sein und horizontal z.B. rechts


???:L

vertikal mittig und horizontal rechts?! soll das n kreuz werden oder wie hä? 
*EDIT:* glaube vertikal mittig am rechten Rand!? 

kannst eventuell BoxLayout und FlowLayout kombinieren!?


----------



## L-ectron-X (7. Apr 2009)

???:L

Kannst du mal eine Zeichnung/Screenshot machen, wie es aussehen soll?
Klingt nach einem Fall für BoxLayout, GridBagLayout oder ExtendedFlowLayout.


----------



## Ebenius (7. Apr 2009)

Das klingt mir einfach nur nach BoxLayout: How to Use BoxLayout (The Java™ Tutorials > Creating a GUI with JFC/Swing > Laying Out Components Within a Container)

Ebenius


----------



## data89 (7. Apr 2009)

Ja, vielleicht habe ich mich da etwas umständlich ausgedrückt!
Also, es geht mir um die horizontale (links, mitte, rechts) und die vertikale (oben, mitte, unten) Ausrichtung, wobei ich die letztere nicht hin bekomme!

Ich habe ein JPanel (500 x 500) und möchte, dass der Button vertikal in der Mitte und horizontal rechts angezeigt wird. Wenn der Button also 30px hoch ist, sollen oben und unten 235px "Platz" sein.

Ist das besser verständlich?

------
Edit: Wichtig ist noch folgende Tatsache: Der Button darf nicht verzerrt werden! Wenn ich dem JPanel ein BorderLayout verpasse, und den Button in Center setze, wird er ja über den gesamten Bereich "aufgespannt". Dies soll nicht so sein - er soll seine normale Größe behalten!


----------



## L-ectron-X (7. Apr 2009)

Das geht schon mit dem FlowLayout. Dazu musst du deinem Container das FlowLayout auf folgende Weise zuweisen:
[HIGHLIGHT="Java"]JPanel panel = new JPanel(new FlowLayout(FlowLayout.RIGHT));[/HIGHLIGHT]


----------



## Ebenius (7. Apr 2009)

FlowLayout kann zwar verschiedene horizontale Ausrichtungen, aber nur eine vertikale: Alle Komponenten werden im Norden angezeigt; bei unterschiedlicher Lieblingshöhe an deren Mittellinie gegeneinander ausgerichtet. Die höchste Komponente ist aber immer am oberen Rand des Parents ausgerichtet.

So geht's mit dem BoxLayout. Die beiden Kommentare am Zeilenende nicht überlesen. So wie der Quelltext da steht ist es auf der X-Achse zentriert: [Highlight=Java]public static void main(String[] args) throws IOException {
  final JPanel contentPane = new JPanel(null);
  contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.X_AXIS));
  contentPane.add(Box.createHorizontalGlue()); // remove for alignment left (actually line start, depending on component orientation)
  contentPane.add(new JButton("A"));
  contentPane.add(Box.createHorizontalStrut(6));
  contentPane.add(new JButton("B"));
  contentPane.add(Box.createHorizontalGlue()); // remove for alignment right (actually line end, depending on component orientation)

  final JFrame f = new JFrame("Test Frame: B");
  f.setContentPane(contentPane);
  f.pack();
  f.setLocationRelativeTo(null);
  f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  f.setVisible(true);
}[/Highlight]
Natürlich muss man hier aufpassen, dass die hinzugefügten Komponenten den richtigen Wert für Vertikales Alignment (0.5f) haben.

Ebenius


----------



## data89 (8. Apr 2009)

Wunderbar! 
Vielen Dank - es hat funktioniert!


data89


----------

