为什么这个GridBagLayout有未使用的空白空间,我怎么能摆脱它呢?

时间:2016-09-24 02:49:36

标签: java swing layout-manager gridbaglayout

所以我有一个JPanel被分成另外两个JPanel(虽然这几乎是不相关的)。在左侧,我有一个GridBagLayout我已经组织在顶部有一个JLabel,下面有一个JTextArea,但JTextArea不是直接JLabel下方。相反,有这个空的空间,我无法弄清楚它为什么存在或如何解决它。我对Java很新,GridBagLayout所以我可能会遗漏一些东西,但我已经尝试了几件事来让它发挥作用。我有下面的代码以及它正在做什么的直观表示。任何帮助表示赞赏。

CODE

    //LEFT SIDE
    GridBagConstraints leftGBC = new GridBagConstraints();
    JPanel leftSide = new JPanel(new GridBagLayout());
    leftSide.setBorder(new EmptyBorder(inset, inset, inset, inset));
    Font titleFont = bb5.comfortaa.deriveFont(Font.PLAIN, 16f);
    leftGBC.gridx = 0;
    leftGBC.gridy = 0;
    leftGBC.weightx = 1;
    leftGBC.weighty = 1;
    leftGBC.anchor = GridBagConstraints.NORTH;

    JLabel leftTitle = new JLabel("Objective");
    leftTitle.setFont(titleFont);
    leftTitle.setBorder(BorderFactory.createMatteBorder(0, 0, 2, 0, Color.BLACK));
    leftGBC.fill = GridBagConstraints.HORIZONTAL;
    leftSide.add(leftTitle, leftGBC);
    leftGBC.gridy = 1;
    leftGBC.anchor = GridBagConstraints.NORTH;
    JTextArea objectiveArea = new JTextArea(objectiveText);
    objectiveArea.setBackground(leftTitle.getBackground());
    objectiveArea.setEditable(false);
    objectiveArea.setFocusable(false);
    objectiveArea.setFont(bb5.samsung1.deriveFont(16f));
    objectiveArea.setLineWrap(true);
    objectiveArea.setWrapStyleWord(true);
    leftSide.add(objectiveArea, leftGBC);

VISUAL

enter image description here

1 个答案:

答案 0 :(得分:3)

leftGBC.weightx = 1;
leftGBC.weighty = 1;

阅读Swing教程How to use GridBagLayout中的部分。该教程解释了weightx / weighty约束如何工作。这些值表明如何分配"额外空间"到每个细胞。因此看起来标签和文本区域都有额外的空间。我猜你想要标签为0。

如果这没有帮助(将来当您提出问题时),请发布展示问题的正确SSCCE