Java : JPanel GridBagLayout issue



我正在制作一个程序,其中JPanel有两个组件JTextFieldJLabel。而JPanel使用GridBadLayout我为GridBagConstraints制作了一个方法,在其中添加组件。但该方法不适用于JPanel实例。但是使用JFrame。我想用JPanel修复这个方法,但不知道怎么做。
代码:

public class A extends JFrame {
    private final GridBagLayout layout;
    private final GridBagConstraints gbc;
    private JPanel p;
    private JLabel label1;
    private JTextField field1;
    public A() {
        super("Frame");
        layout = new GridBagLayout();
        gbc = new GridBagConstraints();
        p = new JPanel();
        p.setLayout(layout);
        gbc.gridy = 0;
        label1 = new JLabel("Enter Name");
        p.addConstraints(label1);
        gbc.gridx = 1;
        field1 = new JTextField(15);
        setSize(300, 200);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setVisible(true);
    }
    // Method for GridBag Component Constraints
    private void addConstraints(Component com) {
        layout.setConstraints(com, gbc);
        add(com);
    }

主要方法

public class MainMethod {
    public static void main(String[] args) {
        A frame = new A();
    }
   }

add(com);将组件添加到"this",即JFrame,而不是JPanel。此外,Java中已经提供了一个addConstraints方法add(Component comp, Object constraints)

不使用addConstraints方法,您可以尝试以下方法:

p.add(label1, gbc);

在那旁边,我错过了一个this.add(p);

编辑:

如果您只想调用addConstraints(Component comp),请将方法更新为:

// Method for GridBag Component Constraints
private void addConstraints(Component com) {
    p.add(com, gbc);
}

这样,构造函数可以如下所示:

public A() {
    super("Frame");
    p = new JPanel();
    this.add(p);
    p.setLayout(new GridBagLayout());
    gbc = new GridBagConstraints();
    gbc.gridy = 0;
    label1 = new JLabel("Enter Name");
    addConstraints(label1);
    gbc.gridx = 1;
    field1 = new JTextField(15);
    addConstraints(field1);
    setSize(300, 200);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLocationRelativeTo(null);
    setVisible(true);
}

最新更新