我正在制作一个程序,其中JPanel
有两个组件JTextField
和JLabel
。而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);
}