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

标签 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。 我该怎么做才能使其正常工作?

最佳答案

您正在向容器(JFrame 的 contentPane)添加组件,该容器使用 BorderLayout 作为其默认布局管理器。当您执行此操作并且不指定常量时,组件将添加 BorderLayout.CENTER,覆盖之前添加的所有组件。

  • 好的解决方案:学习和使用布局管理器,包括使用嵌套的 JPanel,每个 JPanel 都使用自己的布局管理器和组件。
  • 错误的解决方案:使用绝对定位的空布局。虽然对于新手来说,这似乎是创建复杂 GUI 的最佳方式,但您处理 Swing GUI 创建的次数越多,您就越会发现这样做会使您的 GUI 陷入困境,将其绘制在一个非常狭窄的角落,并使很难扩展或增强。只是不要这样做。

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

相关文章:

java - 责任链 : loop or next?

java - 在java中使用图形绘制多个圆

html - 如何在 Dreamweaver 中针对移动设备进行设计,同时在我拥有桌面代码的同一 CSS 中进行编码?

java - JAVA中提取特定字符串

c# - 为什么 Sun 不做 C# 到 Java 字节码编译器?

java - 在 JSP 页面中将值转换为单位前缀

java - JInternalFrame 和 JDesktopPane

java - 用于 append 组合框的 ActionListener

css - 我的博客上的 960gs 和 Internet Explorer 问题

android - adjustResize 和软键盘打开时保留 EditText 比例