2012-02-10 12 views
5

को अनदेखा करके नीचे दिए गए कोड में को Component.LEFT_ALIGNMENT के साथ कॉल करके मुझे एक केंद्रित स्लाइडर पर बाएं संरेखित लेबल प्राप्त होने की उम्मीद है। कुछ कारणों से लेबल भी केंद्रित है, प्रतीत होता है कि सेट एलाइनमेंटएक्स को कौन सा मान पास किया गया है।जावा स्विंग बॉक्स AloutmentX

इसे सेट करने के लिए सेट एलाइनमेंटएक्स को किस मूल्य को पास करना होगा?

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); 
      } 
     }); 
    } 
} 

उत्तर

8

मूल रूप से, आप BoxLayout में विभिन्न संरेखण नहीं हो सकता, से How To Use BoxLayout

सामान्य तौर पर, सभी घटकों को एक शीर्ष से नीचे BoxLayout वस्तु द्वारा नियंत्रित एक ही एक्स संरेखण होना चाहिए ।

संपादित

आमतौर पर, यह दर्ज नहीं किया है जो कि डिफ़ॉल्ट संरेखण एक घटक प्रकार है (JSlider डिफ़ॉल्ट रूप से केंद्रित है, मुझे गलत तरीके से सोचा था कि एक JLabel जबकि यह बाईं ओर संरेखित ;-) एक है केंद्रित थे विकल्प कहीं भी एक सूची रखना है (dooooh ...), दूसरा यह है कि उन्हें जोड़ने के लिए सभी को उसी संरेखण पर मजबूर करना है।

या किसी तृतीय-पक्ष लेआउट प्रबंधक का उपयोग करें, जिसमें लेआउट और संरेखण के मिश्रण-इन के बजाय यह अनजान (मेरे लिए) नहीं है।

+0

मुझे लगता है कि पृष्ठ को पढ़ने, लेकिन मैंने सोचा कि स्लाइडर "नहीं था" एक संरेखण। सभी घटकों पर समान संरेखण को लागू करने का सबसे अच्छा तरीका क्या है? – Mizipzor

+0

अनजान दिन की कमी होगी। लेकिन कम से कम मुझे अब यह काम मिल गया। धन्यवाद! :) – Mizipzor

0

बॉक्सलेआउट में अजीब व्यवहार है। बजाय GridBagLayout उपयोग करने के लिए प्रयास करें:

https://docs.oracle.com/javase/tutorial/uiswing/layout/gridbag.html

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); 
    } 
} 
संबंधित मुद्दे