BoxLayout(Y_Axis) ignoriert preferedSize von Buttons

Rudi100

Neues Mitglied
Hallo,
laut Beschreibung der BoxLayout werden Komponenten nach ihrer preferredSize dargestellt. Das funktioniert bei mir nur, wenn der Button-Text gleich lang ist. Andernfalls erhalte ich verschieden breite Buttons.



Mein Quellcode lautet:
Java:
public class TestBoxLayout extends JFrame {
  private JPanel jContentPane = null;
  private JButton btnKurz = null;
  private JButton btnLang = null;

  public static void main(String[] args){
    new TestBoxLayout();
  }
   
  /**
   * This is the default constructor
   */
  public TestBoxLayout() {
    super();
    initialize();
  }

  /**
   * This method initializes this
   * 
   * @return void
   */
  private void initialize() {
    this.setSize(300, 200);
    this.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
    this.setContentPane(getJContentPane());
    this.setTitle("JFrame");
    this.setVisible(true);
  }

  /**
   * This method initializes jContentPane
   * 
   * @return javax.swing.JPanel
   */
  private JPanel getJContentPane() {
    if (jContentPane == null) {
      jContentPane = new JPanel();
      jContentPane.setLayout(new BoxLayout(getJContentPane(), BoxLayout.Y_AXIS));
      jContentPane.add(getBtnKurz(), null);
      jContentPane.add(getBtnLang(), null);
    }
    return jContentPane;
  }

  /**
   * This method initializes btnButton1	
   * 	
   * @return javax.swing.JButton	
   */
  private JButton getBtnKurz() {
    if (btnKurz == null) {
      btnKurz = new JButton();
      btnKurz.setText("kurz");
      btnKurz.setPreferredSize(new java.awt.Dimension(150,26));
    }
    return btnKurz;
  }

  /**
   * This method initializes btnLang	
   * 	
   * @return javax.swing.JButton	
   */
  private JButton getBtnLang() {
    if (btnLang == null) {
      btnLang = new JButton();
      btnLang.setText("LangLangLang");
      btnLang.setPreferredSize(new java.awt.Dimension(150,26));
    }
    return btnLang;
  }
}

Wie kann ich die Buttons mit gleicher Breite darstellen (bei unterschiedlicher Textbreite)?
Für einen Tipp danke ich ganz herzlich.

Rudi100
 
G

Gelöschtes Mitglied 20545

Gast
Hallo,

habe rumprobiert und es funktioniert, wenn du bei den JButtons setMaximumSize(Dimension) einstellst. Warum, kann ich dir leider nicht sagen, auch nicht, wie du das hättest wissen können.

Gruß n.

edit: nun habe ich erfahren, dass es zum BoxLayout eine Art bedienungsanleitung namens "How To Use BoxLayout" gibt ^^
 
Zuletzt bearbeitet von einem Moderator:

kceenav

Mitglied
Hallo --

Ja nach verwendetem Layout-Manager werden Size-Zuweisungen beachtet oder eben ignoriert. Also kann es durchaus sein, dass die "preferredSize" einmal berücksichtigt wird, ein anderes Mal nicht. Wenn ich mich nicht täusche, werden hingegen "minimum" und "maximum" Size öfter berücksichtigt -- was auch plausibel ist.
Grundsätzlich wird dieses für den grafikunerfahrenen Programmierer eher unberechenbar erscheinende Verhalten sicher seinen "tieferen" Sinn haben, schließlich soll durch den Einsatz der Manager ja eine Flexibilität im Falle eines Fenster-Resizings gewährleistet werden. Bzw. soll durch geschickte Wahl und Schachtelung von Layout-Managern in vielen Fällen quasi "von selbst" ein praxistaugliches Layout der Fensterelemente zustandekommen, ohne dass der Programmierer sich bei jedem einzelnen davon auf eine Größe festlegen muss.

Mir gelingt dies allerdings auch bislang nur selten zufriedenstellend. Insbesondere die Option, für genau EINE -- und NUR EINE -- Dimension (Höhe/Breite) eine Größe festlegen zu können, vermisse ich doch schmerzlich ...
 

kceenav

Mitglied
So wie ich die Frage verstanden habe, geht's hier zunächst mal "nur" darum, warum die Buttons unterschiedlich breit sind, obwohl per "preferredSize" dieselbe Breite zugewiesen worden ist.
Inwieweit dabei auch eine Rolle spielt, dass die Buttons eine gesetzte "maximum"/"minimum width" haben, obwohl das nicht explizit im Code steht, überblicke ich gerade nicht ganz. (Haben sie denn allein schon durch den Beschriftungstext gesetzte Breiten?)

Das verlinkte Tutorial ist aber sicher sehr hilfreich, wenn einem die Arbeitsweise von BoxLayout nicht sofort einleuchtet (und wem tut sie das schon ...).
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I BoxLayout zentriert Label nicht AWT, Swing, JavaFX & SWT 7
Z BoxLayout funktioniert nicht und Buttongröße AWT, Swing, JavaFX & SWT 18
R Swing panels nebeneinander mit BoxLayout.X_AXIS AWT, Swing, JavaFX & SWT 4
M BoxLayout AWT, Swing, JavaFX & SWT 6
T Swing Größe einer Komponente in einem BoxLayout / FlowLayout festlegen AWT, Swing, JavaFX & SWT 7
I BoxLayout, FlowLayout und Komponentengrößen AWT, Swing, JavaFX & SWT 1
S BoxLayout: Anordnung der Komponenten links statt zentriert AWT, Swing, JavaFX & SWT 0
S Bei BoxLayout haben hinzugefügten Jpanels einen Versatz/Space AWT, Swing, JavaFX & SWT 0
K BoxLayout-nicht teilbar AWT, Swing, JavaFX & SWT 6
apple987123 Swing BoxLayout AWT, Swing, JavaFX & SWT 3
G Problem mit Button im Boxlayout... AWT, Swing, JavaFX & SWT 4
F Swing BoxLayout ein JTextfield wird falsch positioniert AWT, Swing, JavaFX & SWT 2
T BoxLayout AWT, Swing, JavaFX & SWT 4
P LayoutManager Komponenten einfügen (FlowLayout, BoxLayout) AWT, Swing, JavaFX & SWT 2
B Probleme mit Layout Manager (BoxLayout) AWT, Swing, JavaFX & SWT 4
C Swing BoxLayout: Buttongröße AWT, Swing, JavaFX & SWT 10
F BoxLayout mit gleicher größe AWT, Swing, JavaFX & SWT 2
D Swing [BoxLayout] Nur TextArea und nicht TextField vergroessen AWT, Swing, JavaFX & SWT 2
G BoxLayout: Ausrichtung der Komponenten AWT, Swing, JavaFX & SWT 2
K BoxLayout skaliert die "falschen" Elemente AWT, Swing, JavaFX & SWT 5
hdi BoxLayout mit Abstand? AWT, Swing, JavaFX & SWT 5
G BoxLayout? AWT, Swing, JavaFX & SWT 2
spacegaier BoxLayout: Buttons auf gleiche Größe bringen AWT, Swing, JavaFX & SWT 4
J Wie kann man beim BoxLayout scrollen? Keine Scrollleiste!:-( AWT, Swing, JavaFX & SWT 7
H AWTError: BoxLayout can't be shared AWT, Swing, JavaFX & SWT 1
A Probleme mit JPanel und BoxLayout AWT, Swing, JavaFX & SWT 5
J JComboBox und BoxLayout AWT, Swing, JavaFX & SWT 2
D BoxLayout in GridBagLayout AWT, Swing, JavaFX & SWT 7
O BoxLayout AWT, Swing, JavaFX & SWT 3
G BoxLayout: Abstand zwischen vertikalen Komponenten! AWT, Swing, JavaFX & SWT 4
M JavaFX StackedBarChart y-Axis soll nur Integerwerte anzeigen AWT, Swing, JavaFX & SWT 1
H setToolTipText ignoriert HTML-Formatierung des anzuzeigenden Strings AWT, Swing, JavaFX & SWT 4
kodela getSubimage() ignoriert Startposition AWT, Swing, JavaFX & SWT 4
T JTextPane ignoriert HTML Zeilenumbruch <br> tag wegen eigenem HTMLEditorKit AWT, Swing, JavaFX & SWT 5
X Button ignoriert disable? AWT, Swing, JavaFX & SWT 7
M Horizontal Scrollbar wird ignoriert AWT, Swing, JavaFX & SWT 10
D JList ignoriert Einstellungen AWT, Swing, JavaFX & SWT 4
E JTextPane setText ignoriert \n AWT, Swing, JavaFX & SWT 6
M SWT java.util.Locale wird ignoriert ? AWT, Swing, JavaFX & SWT 5
B AWT FileDialog Filter wird ignoriert AWT, Swing, JavaFX & SWT 7
W Swing Problem: setLocation und setBounds werden ignoriert... AWT, Swing, JavaFX & SWT 3
J JscrollPane ignoriert ComponentOrientation AWT, Swing, JavaFX & SWT 5
C JScrollPane ignoriert JPanel mit überschriebener pai.nt() AWT, Swing, JavaFX & SWT 11
P Ignoriert mein setSize()? AWT, Swing, JavaFX & SWT 2
J KeyListener wird ignoriert AWT, Swing, JavaFX & SWT 18

Ähnliche Java Themen


Oben