2016-03-20 18 views
0

içinde hizalama nasıl bırakılır Aşağıdaki döndürme bileşenine sahibim. Lütfen resme bakın. Burada etiket ve açılan kutu ve etiket ve metin alanı düzgün şekilde hizalanmamış. Bu soruna neden olan herhangi bir fikrin var mı?Salınım bileşenlerini JPanel

The category Label and combo box are not aligned properly

Bir panelde GridBagLayout kullanıyorum. Ardından panele etiket ve combobox ve textfield gibi bileşenlerin eklenmesi.

Kullandığım kod aşağıdadır. Eğer alanlardan birini seçtiğinizde

srchCategoryLbl = new JLabel("Category"); 
    categoryCmb = new JComboBox<>(); 
    categoryCmb.setPreferredSize(dimensionTxt); 
    categoryCmb.setBounds(0, 0, 0, 0); 

    srchProductCodeLbl = new JLabel("Product Code"); 
    productCodeTxt = new JTextField(); 
    productCodeTxt.setPreferredSize(dimensionTxt); 

    srchProductDescLbl = new JLabel("Product Desc"); 
    productDescTxt = new JTextField(); 
    productDescTxt.setPreferredSize(dimensionTxt); 

    searchBtn = new JButton("Search"); 

    GridBagConstraints gbc = new GridBagConstraints(); 
    gbc.gridx = 0; 
    gbc.gridy = 0; 
    gbc.anchor = GridBagConstraints.WEST; 
    searchPanel.add(srchCategoryLbl, gbc); 

    gbc.gridx = 0; 
    gbc.gridy = 1; 
    searchPanel.add(categoryCmb, gbc); 

    gbc.gridx = 1; 
    gbc.gridy = 0; 
    searchPanel.add(srchProductCodeLbl, gbc); 

    gbc.gridx = 1; 
    gbc.gridy = 1; 
    searchPanel.add(productCodeTxt, gbc); 

    gbc.gridx = 2; 
    gbc.gridy = 0; 
    searchPanel.add(srchProductDescLbl, gbc); 

    gbc.gridx = 2; 
    gbc.gridy = 1; 
    searchPanel.add(productDescTxt, gbc); 

    gbc.gridx = 3; 
    gbc.gridy = 1; 
    searchPanel.add(searchBtn, gbc); 
+1

Sorununuzu çözmeyeceğini düşünüyorum, ancak genellikle setBounds ve setPreferrededSize kullanımı önerilmez. LayOut Manager'ın –

+0

@ FranciscoPuga bileşenlerinin konumunu ve boyutunu işlemesine izin verin. Bu durumda, bileşenin boyutunu nasıl ayarlayabilirim? – Mayuran

+0

Mac kullanıyor musunuz? Metin alanları etrafında, bunları gösterebilen özel bir "odak" kenarlığı yerleştirir. Etiketleri – MadProgrammer

cevap

2

, bu tür özel bir Border kullanımı yoluyla elde edilir, MacOS alanına etrafında bir "odak" dikdörtgen yerleştirir olduğunu görebilirsiniz.

Fields

Sen null (veya başka bir şey) için sınırlarını belirleyebilirsiniz ancak bu diğer Look etkileyebilir ve beklenmedik şekillerde duygular ve onlar

takdir edemeyeceğiniz şekillerde kullanıcı deneyimini değiştirecek olabilir daha iyi bir çözüm ... biraz etiketler yastığa GridBagConstraints#insets özelliklerini kullanmaktır

Some Padding

JLabel srchCategoryLbl = new JLabel("Category"); 
JComboBox<Object> categoryCmb = new JComboBox<>(); 
categoryCmb.setPrototypeDisplayValue("This is a really long test string"); 

JLabel srchProductCodeLbl = new JLabel("Product Code"); 
JTextField productCodeTxt = new JTextField(20); 

JLabel srchProductDescLbl = new JLabel("Product Desc"); 
JTextField productDescTxt = new JTextField(20); 

JButton searchBtn = new JButton("Search"); 

setLayout(new GridBagLayout()); 
GridBagConstraints gbc = new GridBagConstraints(); 
Insets labelInsets = new Insets(0, 4, 0, 4); 
Insets fieldInsets = new Insets(0, 0, 0, 0); 
gbc.gridx = 0; 
gbc.gridy = 0; 
gbc.anchor = GridBagConstraints.WEST; 
gbc.insets = labelInsets; 
add(srchCategoryLbl, gbc); 

gbc.gridx = 0; 
gbc.gridy = 1; 
gbc.insets = fieldInsets; 
add(categoryCmb, gbc); 

gbc.gridx = 1; 
gbc.gridy = 0; 
gbc.insets = labelInsets; 
add(srchProductCodeLbl, gbc); 

gbc.gridx = 1; 
gbc.gridy = 1; 
gbc.insets = fieldInsets; 
add(productCodeTxt, gbc); 

gbc.gridx = 2; 
gbc.gridy = 0; 
gbc.insets = labelInsets; 
add(srchProductDescLbl, gbc); 

gbc.gridx = 2; 
gbc.gridy = 1; 
gbc.insets = fieldInsets; 
add(productDescTxt, gbc); 

gbc.gridx = 3; 
gbc.gridy = 1; 
add(searchBtn, gbc); 

Yine bu, çapraz platform kullanıcı arabirimleriyle ilgili bu talihsiz sorunlardan biridir, çünkü geçerli platforma dayalı olarak ne kadar içeriğe ihtiyacınız olduğunu belirleyebileceğiniz bir yöntem tasarlamanız gerekecektir.

ederim yerine bileşenler için uygun boyut hesaplama gider ve bir çok şey var gibi setPreferredSize kullanmaktan kaçınmak (setColumnsJTextField üzerine ler gibi) zaten mevcuttur işlevselliği yararlanmak olması da tavsiye ederim, bkz Bazı örnekler için yukarıdaki kod