如何在GridBagLayout中的组件之间放置空格?

时间:2015-02-09 18:58:06

标签: java swing whitespace layout-manager gridbaglayout

在带有BorderLayout的JFrame中,我在窗口底部有一个“控制面板”(带有按钮和东西)。在这个“控制面板”的JPanel中,我想使用GridBagLayout。 这是我现在的结果。

enter image description here

我正在考虑将布局划分为3行x 8列表。 在此配置中,“+”符号应该只占一个方格,所有按钮都应该填充面板。

代码是这样的:

buttonsPanel.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.HORIZONTAL;

removeCost = new JButton("-");
c.gridx = 5;
c.gridy = 0;
buttonsPanel.add(removeCost, c);

addCost = new JButton("+");
c.gridx = 7;
c.gridy = 0;
buttonsPanel.add(addCost, c);

text = new JLabel("Incasso");
c.gridx = 0;
c.gridy = 1;
c.gridwidth = 3;
buttonsPanel.add(text, c);

cost = new JTextArea();
cost.setBorder(BorderFactory.createLineBorder(Color.black, 1, true));
cost.setPreferredSize(new Dimension(80, 18));
c.gridx = 5;
c.gridy = 1;
c.gridwidth = 3;
buttonsPanel.add(cost, c);

cancel = new JButton("Cancella");
c.anchor = GridBagConstraints.LINE_START;
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 0;
c.gridy = 2;
c.gridwidth = 3;
c.insets = new Insets(0, 2, 2, 30);
buttonsPanel.add(cancel, c);

enter = new JButton("Accetta");
c.anchor = GridBagConstraints.LINE_END;
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 5;
c.gridy = 2;
c.gridwidth = 3;
c.insets = new Insets(0, 30, 2, 2);
buttonsPanel.add(enter, c);

我做错了什么?

2 个答案:

答案 0 :(得分:0)

您无法创建GridBagConstrains的新实例。我这样做了。 我执行你的代码。请看截图。 enter image description here

import javax.swing.*;
import java.awt.*;

public class app {
public static void main(String[] args) {
    JFrame frame = new JFrame();
    JPanel buttonsPanel = new JPanel(new GridBagLayout());
    frame.add(buttonsPanel);
    // =====================
    GridBagConstraints c = new GridBagConstraints();
    c.fill = GridBagConstraints.HORIZONTAL;

    JButton removeCost = new JButton("-");
    c.gridx = 5;
    c.gridy = 0;
    buttonsPanel.add(removeCost, c);

    JButton addCost = new JButton("+");
    c.gridx = 7;
    c.gridy = 0;
    buttonsPanel.add(addCost, c);

    JLabel text = new JLabel("Incasso");
    c.gridx = 0;
    c.gridy = 1;
    c.gridwidth = 3;
    buttonsPanel.add(text, c);

    JTextArea cost = new JTextArea();
    cost.setBorder(BorderFactory.createLineBorder(Color.black, 1, true));
    cost.setPreferredSize(new Dimension(80, 18));
    c.gridx = 5;
    c.gridy = 1;
    c.gridwidth = 3;
    buttonsPanel.add(cost, c);

    JButton cancel = new JButton("Cancella");
    c.anchor = GridBagConstraints.LINE_START;
    c.fill = GridBagConstraints.HORIZONTAL;
    c.gridx = 0;
    c.gridy = 2;
    c.gridwidth = 3;
    c.insets = new Insets(0, 2, 2, 30);
    buttonsPanel.add(cancel, c);

    JButton enter = new JButton("Accetta");
    c.anchor = GridBagConstraints.LINE_END;
    c.fill = GridBagConstraints.HORIZONTAL;
    c.gridx = 5;
    c.gridy = 2;
    c.gridwidth = 3;
    c.insets = new Insets(0, 30, 2, 2);
    buttonsPanel.add(enter, c);

    frame.setVisible(true);
    frame.setLocationRelativeTo(null);
    frame.setSize(new Dimension(400, 400));
}
}

你需要有这种行为吗?

答案 1 :(得分:-2)

每次将其用作add方法的参数时,都需要创建GridBagConstraintsc = new GridBagConstraints)的新实例。