java - 尝试在 GridBagLayout 中对齐 JcheckBox

标签 java swing layout-manager gridbaglayout jcheckbox

我正在与 GridBagLayout 合作我不明白为什么 JCheckBox不要对齐。我尝试将对齐设置为 JCheckBox参数(即 checkBox.setAlignementX(LEFT_ALIGNEMENT) )。它没有起作用。

我首先尝试使用BorderLayout ,但结果更糟

我想要实现的是这个enter image description here

我希望将三个主要类别( body 、心理和社交)设置在完整的左侧,并且我希望将子类别设置为稍微偏移一点。这样你就会知道它是一个子类别(根据我画的线)。

有三个 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

最佳答案

老实说,setAlignmentX可能不会为您做太多事情,setHorizo​​ntalAlignment将是一个更好的选择,但话虽如此,您还可以做其他事情使用 GridBagConstraints

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

phyConstraint.anchor = GridBagConstraints.WEST;
phyConstraint.weightx = 1;

anchor 将确定组件想要对齐的给定单元格内的位置,默认为CENTERweightx 属性描述了根据计算布局后剩余的剩余空间所分配的空间量,在本例中,我们要求所有剩余空间。

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

phyConstraint.insets = new Insets(0, 20, 0, 0);

最后,对于 optionConstraint,我们还可以使用 fill 属性,该属性将根据单元格内的可用空间量确定组件的大小,在这种情况下,您将希望组件扩展以填充所有可用空间,例如...

optionConstraint.weightx = 1;
optionConstraint.fill = GridBagConstraints.HORIZONTAL;

Layout

看看How to Use GridBagLayout了解更多详情。

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

关于java - 尝试在 GridBagLayout 中对齐 JcheckBox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26578325/

相关文章:

java - 如何为 Android 中最后插入的记录设置颜色?

java - 如何在netbeans平台中制作 "Open File..."窗口?

java - 在 JPanel 中对齐 JTextArea

JavaScript/Backbone.js 布局管理器

java - 如何阻止 JTextArea 和 JTextField 拉伸(stretch)?

java - deploymentURL 未注入(inject)到与 Arquillian Drone 的集成测试中

java - 如何处理未使用的@Override方法?

java - 通过菜单使用 JApplet

java - 不同(不相同)的副本集是从单例对象返回的

java - JDialog 在其 JFrame 父级前面