2012-02-10 18 views
5

Aşağıdaki kodda setAlignmentX'u Component.LEFT_ALIGNMENT numaralı telefondan arayarak, ortalanmış bir kaydırıcı üzerinde sola hizalanmış bir etiket almayı bekledim. Herhangi bir nedenden ötürü, etiket aynı zamanda, setAlignmentX'e hangi değerin geçtiğine bakılmaksızın, ortalanmış durumdadır.Java Swing BoxLayout ignoring AlignmentX

Sola hizalamak için setAlignmentX'e hangi değeri iletmeliyim?

package myjava; 

import java.awt.Component; 
import java.awt.Container; 
import javax.swing.BoxLayout; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JSlider; 

public class LayoutTest { 

    public static void main(String[] args) { 
     javax.swing.SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       JFrame frame = new JFrame("BoxLayoutDemo"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

       // create left aligned label over centered column 
       Container contentPane = frame.getContentPane(); 
       contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.Y_AXIS)); 
       JLabel label = new JLabel("test"); 
       label.setAlignmentX(Component.LEFT_ALIGNMENT); 
       contentPane.add(label); 
       contentPane.add(new JSlider()); 

       frame.pack(); 
       frame.setVisible(true); 
      } 
     }); 
    } 
} 

cevap

8

Temel olarak, genel olarak How To Use BoxLayout

gelen BoxLayout farklı hizalamalar olamaz, bir üst-alt BoxLayout nesne tarafından kontrol edilen tüm bileşenler aynı X hizalama sahip olmalıdır .

düzenleme

Tipik olarak, bir bileşen tipi (JSlider varsayılan olarak ortalanır olan varsayılan ayar belgelenmiş değil, beni yanlış sola hizalı ise ;-) biri JLabel merkezli olduğu düşünülmektedir seçenek bir yerde bir liste tutmak (dooooh ...), bir diğeri sadece ekleyerek aynı hizaya hepsini zorlamak için. Ya da bu benim için (benim için) düzen ve hizalama karışımı olmayan üçüncü taraf layoutManager kullanın.

+0

https://docs.oracle.com/javase/tutorial/uiswing/layout/gridbag.html Ben o sayfayı okumak ama kaydırıcı bir hizalama "yoktu" diye düşündü. Tüm bileşenlerde aynı hizalamanın uygulanmasının en iyi yolu nedir? – Mizipzor

+0

Kesintisizdir, günün altını çizmek gerekir. Ama en azından şimdi çalışıyorum. Teşekkürler! :) – Mizipzor

0

BoxLayout garip davranışlara sahiptir. yerine GridBagLayout kullanmayı deneyin:

public class Aligment { 
    public static void main(String[] args) { 

    final JPanel root = new JPanel(new GridBagLayout()); 
    root.setPreferredSize(new Dimension(500, 400)); 

    root.add(new JLabel("LEFT"), new GridBagConstraints() {{ 
     gridx = 0; 
     gridy = 0; 
     anchor = PAGE_START; 
    }}); 
    root.add(new JLabel("CENTER"), new GridBagConstraints() {{ 
     gridx = 1; 
     gridy = 1; 
     anchor = CENTER; 
     weightx = 1.0; // fill Width 
    }}); 
    root.add(new JLabel("RIGHT"), new GridBagConstraints() {{ 
     gridx = 2; 
     gridy = 2; 
     anchor = LINE_END; 
    }}); 
    // hack: Push all rows to Top 
    root.add(Box.createVerticalGlue(), new GridBagConstraints() {{ 
     gridx = 0; 
     gridy = 3; 
     weighty = 1.0; // fill Height 
    }}); 

    new JFrame() { 
     { 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setContentPane(root); 
     pack(); 
     setLocationRelativeTo(null);; 
     } 
    }.setVisible(true); 
    } 
}