0

我已经学习 Java 几天了,我正在尝试构建一个简单的计算器。

当我在 Netbeans 中运行代码时,可能有 30% 的时间它运行良好。窗口弹出我的按钮。其他 70% 的时间只是弹出一个空白的 JFrame。

在这两种情况下,Netbeans 的“输出”选项卡都告诉我 BUILD SUCCESSFUL(总时间:N 秒)

我的代码在下面——我确定它包含无数的问题和错误,但具体来说,我试图理解为什么执行它的结果如此不可靠。

提前致谢,

import java.awt.Color;
import java.awt.PopupMenu;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Try1 extends JFrame {

    public static void main(String[] args) {

//JFrame
JFrame frame = new JFrame();
    frame.setSize(400,600);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setTitle("Ben's Program");
    frame.setVisible(true);
    frame.setLocationRelativeTo(null);
    frame.setResizable ( false );

//JPanel
JPanel panel = new JPanel();
    panel.setSize(360,100);
    panel.setLocation(20, 20);
    panel.setBackground(Color.BLUE);

//JPanel 2
JPanel panel2 = new JPanel();
    panel2.setSize(360,420);
    panel2.setLocation(20, 140);
    panel2.setBackground(Color.RED);

//Button
JButton but1= new JButton("1");
JButton but2= new JButton("2");
JButton but3= new JButton("3");
JButton but4= new JButton("4");
JButton but5= new JButton("5");
JButton but6= new JButton("6");
JButton but7= new JButton("7");
JButton but8= new JButton("8");
JButton but9= new JButton("9");
JButton but0= new JButton("0");
JButton butadd= new JButton("+");
JButton butsub= new JButton("-");
JButton butmulti= new JButton("*"); 
JButton butdiv= new JButton("/");
JButton buteq= new JButton("=");
JButton butclear= new JButton("C");

//Button Layout
    but1.setBounds(10, 81, 89, 23);
    but2.setBounds(126, 81, 89, 23);
    but3.setBounds(225, 81, 89, 23);
    but4.setBounds(10, 115, 89, 23);
    but5.setBounds(126, 115, 89, 23);
    but6.setBounds(225, 115, 89, 23);
    but7.setBounds(10, 149, 89, 23);
    but8.setBounds(126, 149, 89, 23);
    but9.setBounds(225, 149, 89, 23);
    but0.setBounds(126, 183, 89, 23);
    butadd.setBounds(126, 215, 89, 23);
    butsub.setBounds(10, 215, 89, 23);
    butmulti.setBounds(225, 183, 89, 23);
    butdiv.setBounds(225, 149, 89, 23);
    buteq.setBounds(126, 183, 89, 23);
    butclear.setBounds(10, 183, 89, 23);

//Add Panel to Frame
frame.add(panel);
frame.add(panel2);

//Add Buttons to Panel2
panel2.add(but1);
panel2.add(but2);
panel2.add(but3);
panel2.add(but4);
panel2.add(but5);
panel2.add(but6);
panel2.add(but7);
panel2.add(but8);
panel2.add(but9);
panel2.add(butadd);
panel2.add(butsub);
panel2.add(butmulti);
panel2.add(butdiv);
panel2.add(buteq);
panel2.add(butclear);

    }

    }
4

1 回答 1

1

将 JFrame 设置为可调整大小。当它弹出空白时,调整它的大小。内容是不是突然出现了?

如果是这样,您有一个刷新问题。实现组件监听接口,用JFrame.addComponentListener添加,在componentShown()处理函数中调用JFrame.validate()。

更新:

我测试了你的代码。将 setVisible 调用移至调用后添加所有面板和按钮以修复刷新问题。存在布局问题,结合使用 BorderLayout 和 GridBagLayout 来解决。

于 2013-08-19T21:43:31.100 回答