我正在使用GridBagLayout
,我无法理解为什么JCheckBox
不对齐。我试图将对齐设置为JCheckBox
参数(即checkBox.setAlignementX(LEFT_ALIGNEMENT)
)。它没有奏效。
我首先尝试使用BorderLayout
,但结果却是最糟糕的
我想要实现的是
我希望将三个主要类别(Physique,Psychologique和Social)设置在完整的左侧,并且我希望子类别设置为稍微偏移。这样你就会知道它是一个子类别(根据我画的线条)。
有三个JPanel
,每个类别一个。
这不是原始代码,但它有点重现了我的问题。
public class Window extends JFrame {
private JButton button = new JButton("Generer");
private JCheckBox physique = new JCheckBox("Traits Physiques");
private JCheckBox psychologic = new JCheckBox("Traits Psychologiques");
private JCheckBox mass = new JCheckBox("Masse");
private JCheckBox quality = new JCheckBox("Qualité");
private JTextArea text = new JTextArea("");
private JScrollPane scroller = new JScrollPane(text);
private JPanel panel = new JPanel();
public Window() {
setLayout(new BorderLayout());
setTitle("Personnage");
setSize(500, 350);
setResizable(false);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setLocationRelativeTo(null);
text.setEditable(false);
arrange();
getContentPane().add(panel, BorderLayout.WEST);
getContentPane().add(scroller, BorderLayout.CENTER);
getContentPane().add(button, BorderLayout.SOUTH);
setVisible(true);
}
/**
* Arrange all the layout
*/
private void arrange() {
JPanel phPanel = new JPanel();
JPanel psPanel = new JPanel();
GridBagConstraints gbcPanel, gbcPh, gbcPs;
gbcPanel = gbcPh = gbcPs = new GridBagConstraints();
panel.setLayout(new GridBagLayout());
gbcPanel.gridx = 0;
gbcPanel.gridy = 0;
gbcPanel.gridheight = 1;
gbcPanel.gridwidth = 1;
panel.add(phPanel, gbcPanel);
gbcPanel.gridy = 1;
panel.add(psPanel, gbcPanel);
//---------------------------
gbcPh.gridx = 0;
gbcPh.gridy = 0;
gbcPh.gridheight = 1;
gbcPh.gridwidth = 2;
phPanel.add(physique, gbcPh);
gbcPh.gridx = 1;
gbcPh.gridy = 1;
gbcPh.gridwidth = 1;
phPanel.add(mass, gbcPh);
//--------------------------
gbcPs.gridx = 0;
gbcPs.gridy = 0;
gbcPs.gridheight = 1;
gbcPs.gridwidth = 2;
psPanel.add(psychologic, gbcPs);
gbcPs.gridx = 1;
gbcPs.gridy = 1;
gbcPs.gridwidth = 1;
psPanel.add(quality, gbcPs);
//------------------------
}
}
我希望主要类别(即体格和心理学)完全对齐,子类别(即质量和质量)有点偏移。我不能那样做,我不知道如何,我已经阅读了多个教程等...
答案 0 :(得分:4)
老实说,setAlignmentX
可能不会为你做多少,setHorizontalAlignment
会是一个更好的选择,但话说回来,你可以用{{{{1}做其他事情。 1}}
首先,您可以使用GridBagConstraints
和anchor
属性...
weightx
锚点将确定组件要对齐的给定单元格中的位置,默认为phyConstraint.anchor = GridBagConstraints.WEST;
phyConstraint.weightx = 1;
。 CENTER
属性根据计算布局后剩余的剩余空间来描述将给出的空间量,在这种情况下,我们要求所有剩余空间。
接下来,您可以使用weightx
属性来确定单元格将具有的内部间距或边距的数量,这将影响组件布局时的位置......
insets
最后,对于phyConstraint.insets = new Insets(0, 20, 0, 0);
,我们还可以使用optionConstraint
属性,该属性将决定组件的大小,具体取决于单元格中的可用空间量,在这种情况下,您和# 39; ll希望组件扩展以填充所有可用空间,例如......
fill
有关详细信息,请查看How to Use GridBagLayout。
我还考虑查看How to Use Trees,这可能会为您省去一些麻烦......