java - 为什么我的 GUI 没有显示任何内容?

标签 java swing

我试图显示一个带有按钮的计算器,但唯一显示的是一个空的 JFrame。

我唯一能想到的是因为我正在构造函数中完成所有工作,而我的 main 只创建对象而不执行其他任何操作。但是,如果是这样的话,为什么它仍然显示一个空的 GUI,而不是什么都不显示?或者我只是这样做完全错误?

    import java.awt.GridLayout;
import java.awt.TextField;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JButton;

public class MyFrame extends JFrame{

    private GridLayout grid;
    private final String ADD = "+";
    private final String SUB = "-";
    private final String MULT = "*";
    private final String DIV = "/";
    private final String CLR = "C";
    private final String EQ = "=";

    private TextField textOnScreen;

    private final String[] buttonValues= {
            "7", "8", "9", ADD, 
            "4", "5", "6", SUB, 
            "1", "2", "3", MULT,
            "0", CLR, EQ, DIV
    };

    MyFrame(){

        super("Calculator");
        JPanel p = new JPanel();
        grid = new GridLayout(4, 4, 3, 3);//row, col, hor gap, vert gap
        p.setLayout(grid);
        setSize(400, 500);
        setResizable(true);
        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        //create buttons
        for(int i = 0; i < buttonValues.length; i++){
            p.add(new JButton(buttonValues[i]));
        }
        add(p);
    }

    public static void main(String[] args){

        MyFrame f = new MyFrame();

    }
}

最佳答案

添加所有组件之后调用setVisible(true)

MyFrame(){

    super("Calculator");
    JPanel p = new JPanel();
    grid = new GridLayout(4, 4, 3, 3);//row, col, hor gap, vert gap
    p.setLayout(grid);
    setSize(400, 500);
    setResizable(true);
    setDefaultCloseOperation(EXIT_ON_CLOSE);

    //create buttons
    for(int i = 0; i < buttonValues.length; i++){
        p.add(new JButton(buttonValues[i]));
    }
    add(p);

    setVisible(true);

}

为了进一步理解,如果您想在 ActionListener 中添加组件,例如在 ActionListener 中,您可以在添加组件后调用 revalidate()repaint(),这将还更新了 GUI。 (不要再次调用setVisible(true))

关于java - 为什么我的 GUI 没有显示任何内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32445462/

相关文章:

java - 如何在文本字段中隐藏密码字符

java - Android 2.3.3,在 View 中创建一行

java - Java 中受密码保护的记事本问题

java - 如何使用 JTree Listener 动态更改带有 CardLayout 的 JPanel?

java - 如何更新 JLabel 中的 ImageIcon?

java - 管道分离的多行非结构化数据的Map Reduce代码

java - 哈希集如何避免重复

java - 我应该在 netbeans 中使用什么类型的表单?

java - 使用 JButtons 的战舰

java - 管理 JDialog 关闭行为