2015-03-19 3 views
0

У меня возникли проблемы с компоновкой на Java, нижнее изображение представляет собой то, что я пытаюсь выполнить. В настоящее время я использую;Вертикальная вертикальная привязка Java к левому краю

Box vBox = Box.createVerticalBox(); 

вертикально отделить элементы, но они имеют тенденцию группироваться в центре, а не объятия левого края. Каков наилучший способ сделать это?

Layout

EDIT: Установка выравнивания как таковой;

JComboBox combo = new JComboBox<Integer>(numPlayers); 
combo.setMaximumSize(new Dimension(100, 30)); 
combo.setAlignmentX(JComponent.RIGHT_ALIGNMENT); 
vBox.add(combo); 

Не похоже, чтобы выравнивать компонент правильно, вместо этого он выравнивает левый край компонентов до центральной линии панели.

enter image description here

ответ

0

Вы можете использовать вертикальную форму. Теперь вам нужно установить выравнивание компонентов, добавляемых в коробке:

component.setAlignmentX(JComponent.LEFT_ALIGNMENT); 
box.add(component); 
... 

Edit:

Вы можете использовать GridBagLayout. При увеличении пространства компоненты останутся там предпочтительными. Но если вы уменьшите фрейм слишком мал, компоненты вернутся к (0, 0), который является минимальным. Если вам не нравится это поведение, вам необходимо установить минимальный размер для всех компонентов:

import java.awt.*; 
import java.awt.event.*; 
import java.util.*; 
import javax.swing.*; 

public class SSCCE extends JPanel 
{ 
    public SSCCE() 
    { 
     setLayout(new BorderLayout()); 
     JComponent component; 

     JPanel vBox = new JPanel(new GridBagLayout()); 
     GridBagConstraints gbc = new GridBagConstraints(); 
     gbc.gridx = GridBagConstraints.REMAINDER; 

     component = new JTextField(10); 
     gbc.anchor = GridBagConstraints.LINE_START; 
     vBox.add(component, gbc); 

     component = new JTextField(10); 
     gbc.anchor = GridBagConstraints.LINE_END; 
     vBox.add(component, gbc); 

     component = new JTextField(30); 
     gbc.anchor = GridBagConstraints.CENTER; 
     vBox.add(component, gbc); 
    } 

    private static void createAndShowGUI() 
    { 
     JFrame frame = new JFrame("SSCCE"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.add(new SSCCE()); 
     frame.setLocationByPlatform(true); 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) 
    { 
     EventQueue.invokeLater(new Runnable() 
     { 
      public void run() 
      { 
       createAndShowGUI(); 
      } 
     }); 
    } 
} 
+0

Это не работает, см. Мое редактирование. – BenJacob

+0

@BenJacob, 'Кажется, это не работает,', а затем опубликуйте 'SSCCE', который демонстрирует проблему, а не изображение. См. Edit для другого подхода. – camickr

Смежные вопросы