试图在GridBagLayout中对齐JcheckBox

时间:2014-10-26 21:44:55

标签: java swing layout-manager gridbaglayout jcheckbox

我正在使用GridBagLayout,我无法理解为什么JCheckBox不对齐。我试图将对齐设置为JCheckBox参数(即checkBox.setAlignementX(LEFT_ALIGNEMENT))。它没有奏效。

我首先尝试使用BorderLayout,但结果却是最糟糕的

我想要实现的是enter image description here

我希望将三个主要类别(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);
    //------------------------

}

}

我希望主要类别(即体格和心理学)完全对齐,子类别(即质量和质量)有点偏移。我不能那样做,我不知道如何,我已经阅读了多个教程等...

The original code

1 个答案:

答案 0 :(得分:4)

老实说,setAlignmentX可能不会为你做多少,setHorizontalAlignment会是一个更好的选择,但话说回来,你可以用{{{{1}做其他事情。 1}}

首先,您可以使用GridBagConstraintsanchor属性...

weightx

锚点将确定组件要对齐的给定单元格中的位置,默认为phyConstraint.anchor = GridBagConstraints.WEST; phyConstraint.weightx = 1; CENTER属性根据计算布局后剩余的剩余空间来描述将给出的空间量,在这种情况下,我们要求所有剩余空间。

接下来,您可以使用weightx属性来确定单元格将具有的内部间距或边距的数量,这将影响组件布局时的位置......

insets

最后,对于phyConstraint.insets = new Insets(0, 20, 0, 0); ,我们还可以使用optionConstraint属性,该属性将决定组件的大小,具体取决于单元格中的可用空间量,在这种情况下,您和# 39; ll希望组件扩展以填充所有可用空间,例如......

fill

Layout

有关详细信息,请查看How to Use GridBagLayout

我还考虑查看How to Use Trees,这可能会为您省去一些麻烦......