为什么我声明的最后一个GUI元素正在填充整个面板?

时间:2014-02-13 20:14:11

标签: java swing layout

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。 我能做什么才能让它正常运作?

1 个答案:

答案 0 :(得分:1)

您正在将组件添加到容器中,JFrame的contentPane使用BorderLayout作为其默认布局管理器。执行此操作但未指定常量时,组件将添加BorderLayout.CENTER,以覆盖之前添加的任何组件。

  • 良好解决方案:学习和使用布局管理器,包括使用嵌套的JPanel,每个都使用自己的布局管理器和组件。
  • 错误解决方案:使用具有绝对定位的空布局。对于新手而言,这似乎是创建复杂GUI的最佳方式,您处理Swing GUI创建的越多,您会发现越多这样做会将您的GUI设置为直接夹克,将其绘制在一个非常紧凑的角落并制作它很难扩展或增强。只是不要这样做。