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,从而覆盖了之前添加的所有组件。


好的解决方案:学习和使用布局管理器,包括使用嵌套的JPanels,每个都使用自己的布局管理器和组件。
错误的解决方案:将空布局用于绝对定位。尽管对于新手来说,这似乎是创建复杂GUI的最佳方法,但您对Swing GUI的创建工作越多,您就会发现,这样做越会使您的GUI变得直截了当,将其绘画在一个非常狭窄的角落,并制作出很难扩展或增强。只是不要这样做。

关于java - 为什么我声明的最后一个GUI元素填充整个面板?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21764546/

10-11 22:27
查看更多