我在Java中遇到一些布局问题,下面的图片代表了我想要完成的任务。目前我正在使用;
Box vBox = Box.createVerticalBox();
垂直分隔项目,但它们倾向于分组在中心而不是 拥抱左边缘。实现这个目标的最佳方法是什么?
编辑:设置对齐方式;
JComboBox combo = new JComboBox<Integer>(numPlayers);
combo.setMaximumSize(new Dimension(100, 30));
combo.setAlignmentX(JComponent.RIGHT_ALIGNMENT );
vBox.add(combo);
似乎没有正确对齐组件,而是将组件左边缘与面板的中心线对齐。
答案 0 :(得分:0)
您可以使用垂直框。现在,您需要设置添加到框中的组件的对齐方式:
component.setAlignmentX( JComponent.LEFT_ALIGNMENT );
box.add( component );
...
编辑:
您可以使用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();
}
});
}
}