【问题标题】:trying to align JcheckBox in a GridBagLayout [closed]试图在 GridBagLayout 中对齐 JcheckBox [关闭]
【发布时间】:2014-10-26 21:44:54
【问题描述】:

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

我第一次尝试使用BorderLayout,但结果更糟

我想要实现的是这个

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

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

【问题讨论】:

  • 我不确定您发布的代码和文本是否足以让我们充分理解您的问题来回答它。如果您没有很快得到合适的答案,请考虑创建并发布Minimal, Complete, and Verifiable Example Program
  • 感谢您的评论,我会尝试更好地解释我想要实现的目标。
  • @HovercraftFullOfEels 你去。解释得更好吗?
  • Chax,请查看我在第一条评论中提供的链接。请回复我,如果您发布您的MCVE,请告诉我,我会看一下。请记住,这个程序需要很短、非常短、可编译、可运行,不需要外部资源(除非它们很容易从互联网上获得)并向我们展示您的问题。祝你好运。
  • @HovercraftFullOfEels 你去。一个简化的代码,其中有我的问题。另外它是可编译的。

标签: java swing layout-manager gridbaglayout jcheckbox


【解决方案1】:

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

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

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

锚点将确定组件在给定单元格中要对齐的位置,默认为CENTERweightx 属性描述了将分配的空间量,基于计算布局后剩余的空间,在这种情况下,我们要求所有剩余空间。

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

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

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

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

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

我也会考虑看看How to Use Trees,这可能会为您省点麻烦...

【讨论】:

  • GridBagLayoutTrees 的最大区别是什么?
  • @Chax A JTree 旨在做你想做的事,它更容易更新和修改(添加新元素),甚至允许你折叠和展开分支
  • @HovercraftFullOfEels 在顶部,冗长的,几乎没有相关性的咆哮,直到你到达最后的示例代码;)
  • @MadProgrammer:是的,这是事实,但我不忍心当着你的面说。对不起。
  • @HovercraftFullOfEels 是的,我就像那个你不得不坐下来听几个小时的祖父母,只是因为你知道最后你会从他们那里得到一些钱或糖果; )
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-05
  • 2014-06-04
  • 2013-01-23
  • 2012-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多