public class add extends JPanel {
private JPanel add = new JPanel();
JFrame frame;
public add(){
frame = new JFrame("Add");
frame.setBounds(550, 300, 700,500);
frame.setVisible(true);
JLabel nameLabel = new JLabel("Name");
final JTextField nameField = new JTextField();
frame.add(nameLabel);
frame.add(nameField);
nameLabel.setBounds(200, 40, 150, 30);
nameField.setBounds(350, 40, 150, 30);
...
JButton registerButton = new JButton("Salveaza");
frame.add(registerButton);
registerButton.setBounds(200,300,300, 30);
registerButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
}
});
}
}
如果我删除 JButton,那么当我运行程序时,最后一个元素的标签将填充整个 JPanel。 我该怎么做才能使其正常工作?
最佳答案
您正在向容器(JFrame 的 contentPane)添加组件,该容器使用 BorderLayout 作为其默认布局管理器。当您执行此操作并且不指定常量时,组件将添加 BorderLayout.CENTER,覆盖之前添加的所有组件。
- 好的解决方案:学习和使用布局管理器,包括使用嵌套的 JPanel,每个 JPanel 都使用自己的布局管理器和组件。
- 错误的解决方案:使用绝对定位的空布局。虽然对于新手来说,这似乎是创建复杂 GUI 的最佳方式,但您处理 Swing GUI 创建的次数越多,您就越会发现这样做会使您的 GUI 陷入困境,将其绘制在一个非常狭窄的角落,并使很难扩展或增强。只是不要这样做。
关于java - 为什么我声明的最后一个 GUI 元素填充了整个面板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21764546/