JPanel 不添加按钮和文本字段

JPanel doesn't add button and text field

我不明白为什么panel.add(txtnum1)panel.add(button2)在我编译程序时没有出现。 panel.add(button) 工作正常,我的编译器没有抛出任何警告或错误,我错过了什么吗?

package gui;

import javax.swing.*;
import java.awt.*;

public class GUI {
 public static void main(String[] args) {
    JFrame frame = new JFrame();
    frame.setVisible(true);
    frame.setSize(new Dimension(300, 500));
    frame.setLocationRelativeTo(null);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JPanel panel = new JPanel();
    panel.setBackground(Color.GRAY);
    frame.getContentPane().add(panel);
    JButton button = new JButton("Submit");
    panel.add(button);

    JTextField txtnum1 = new JTextField();
    txtnum1.setPreferredSize(new Dimension(30, 50));
    panel.add(txtnum1);

    JButton button2 = new JButton("Clear");
    panel.add(button2);
 }

}

在使用 Swing 实现 GUI 应用程序时,我喜欢在构建 JFrame 的代码中使用这种方法(我们假设一个简单的 GUI 在 JPanel 容器和类似的东西):

  1. 创建JFrame并初始化
  2. 创建JPanel
  3. 为该面板创建 GUI 组件并添加它们
  4. 将面板添加到 JFrame(从 2 开始重复) JFrame 中的每个 JPanel)
  5. 使 JFrame 在屏幕上可见

因此,您的代码将如下所示:

package gui;

import javax.swing.*;
import java.awt.*;

public class GUI {
 public static void main(String[] args) {
    /* step 1 */
    JFrame frame = new JFrame();
    frame.setSize(new Dimension(300, 500));
    frame.setLocationRelativeTo(null);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    /* step 2 */
    JPanel panel = new JPanel();
    panel.setBackground(Color.GRAY);

    /* step 3 */
    JButton button = new JButton("Submit");
    panel.add(button);

    JTextField txtnum1 = new JTextField();
    txtnum1.setPreferredSize(new Dimension(30, 50));
    panel.add(txtnum1);

    JButton button2 = new JButton("Clear");
    panel.add(button2);

    /* step 4 */
    frame.getContentPane().add(panel);
    /* step 5 */
    frame.setVisible(true);
 }

}

经过测试,它可以在 Eclipse 中运行。

您应该在最后调用 setVisible(true),在所有组件都已添加之后。

frame.setVisible(true);放在末尾,它将按预期工作。