为什么我的GUI不显示?

时间:2017-05-11 04:51:20

标签: java user-interface calculator

我一直在研究GUI计算器,但它无法正常工作。当我运行程序时,框架不会显示。这是我的计划:

package mycalc;

/**
 *
 * @author haysa
 */

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

public class MyCalc {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here

    JFrame f;
    JTextField first, second;
    JButton bdiv,bmul,bsub,badd,beq;


    bdiv=new JButton("/");
    bmul=new JButton("*");
    bsub=new JButton("-");
    badd=new JButton("+");
    beq=new JButton("=");


    bsub.setBounds(250,240,50,40);
    bmul.setBounds(250,170,50,40);
    bdiv.setBounds(250,100,50,40);
    badd.setBounds(250,310,50,40);
    beq.setBounds(180,310,50,40);



    first=new JTextField("");
    second=new JTextField("");

    f=new JFrame("Calculator");

    f.add(bdiv);
    f.add(bmul);
    f.add(bsub);
    f.add(badd);

    }  
}

我不确定我的计划有什么问题。它一直说构建成功但没有出现。我知道我需要添加一些东西,但我不确定要添加什么,或者放在哪里。请帮帮我:D

2 个答案:

答案 0 :(得分:4)

声明框架f后,您必须使用setVisible(true);,否则窗口将不会显示。您可能会注意到桌面上的java图标,因为它确实打开了窗口,但无法单击,移动或(显然)看到它。

//...
f=new JFrame("Calculator");
f.setVisible(true); //added this line
f.add(bdiv);
f.add(bmul);
f.add(bsub);
f.add(badd);
//...

截至目前,您的窗口非常小(使用f.setSize(x, y)设置尺寸),它将显示在屏幕的左上角。要使窗口的左上角显示在屏幕中间,请使用f.setLocationRelativeTo(null);。还有一件事是你必须将布局设置为null(f.setLayout(null)),否则你的setBounds()方法将无效。如果您有任何问题,请在下面发表评论。

答案 1 :(得分:2)

你必须添加f.setVisible(true)函数,如果你使用setBounds(x,y,w,h),那么你需要将JFrame的布局设置为null,就像这样f.setLayout(null); < / p>

class MyCalc{

public static void main(String[] args) {
    // TODO code application logic here

JFrame f=new JFrame("Calculator");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(555,555);
f.setLayout(null);
JTextField first, second;
JButton bdiv,bmul,bsub,badd,beq;


bdiv=new JButton("/");
bmul=new JButton("*");
bsub=new JButton("-");
badd=new JButton("+");
beq=new JButton("=");


bsub.setBounds(250,240,50,40);
bmul.setBounds(250,170,50,40);
bdiv.setBounds(250,100,50,40);
badd.setBounds(250,310,50,40);
beq.setBounds(180,310,50,40);



first=new JTextField("");
second=new JTextField("");



f.add(bdiv);
f.add(bmul);
f.add(bsub);
f.add(badd);
f.setVisible(true);
}  

}