为什么这个 GridBagLayout 有未使用的空 space 我怎样才能摆脱它?
Why does this GridBagLayout have unused empty space and how can I get rid of it?
所以我有一个 JPanel
,它被分成另外 2 个单独的 JPanel
(尽管这在很大程度上是无关紧要的)。在左侧,我有一个 GridBagLayout
,我组织它在顶部有一个 JLabel
,在它下面有一个 JTextArea
,但是 JTextArea
不是 直接在JLabel
下面。取而代之的是这个空的 space,我不知道为什么它在那里或如何修复它。总的来说,我对 Java 和 GridBagLayout
还很陌生,所以我可能会遗漏一些东西,但我已经尝试了几种方法来让它发挥作用。我有下面的代码以及它正在做什么的可视化表示。感谢任何帮助。
代码
//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);
视觉
leftGBC.weightx = 1;
leftGBC.weighty = 1;
阅读 Swing 教程中的部分 How to use GridBagLayout。本教程解释了 weightx/weighty 约束的工作原理。这些值指示如何将 "extra space" 分配给每个单元格。所以看起来标签和文本区域都得到了额外的 space。我猜你想要 0 作为标签。
如果这没有帮助(以及将来您提出问题时),post 一个适当的 SSCCE 来证明问题。
所以我有一个 JPanel
,它被分成另外 2 个单独的 JPanel
(尽管这在很大程度上是无关紧要的)。在左侧,我有一个 GridBagLayout
,我组织它在顶部有一个 JLabel
,在它下面有一个 JTextArea
,但是 JTextArea
不是 直接在JLabel
下面。取而代之的是这个空的 space,我不知道为什么它在那里或如何修复它。总的来说,我对 Java 和 GridBagLayout
还很陌生,所以我可能会遗漏一些东西,但我已经尝试了几种方法来让它发挥作用。我有下面的代码以及它正在做什么的可视化表示。感谢任何帮助。
代码
//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);
视觉
leftGBC.weightx = 1;
leftGBC.weighty = 1;
阅读 Swing 教程中的部分 How to use GridBagLayout。本教程解释了 weightx/weighty 约束的工作原理。这些值指示如何将 "extra space" 分配给每个单元格。所以看起来标签和文本区域都得到了额外的 space。我猜你想要 0 作为标签。
如果这没有帮助(以及将来您提出问题时),post 一个适当的 SSCCE 来证明问题。