使用提供的构造函数和方法在 main 中仅创建一个 object

Creating just an object in main from using the constructor and method that is provided

这只是计算器的显示。我想做的是将所有主要代码放入计算器方法中。只留下

new calculator(); 

作为主框架中正在创建的框架的object。 我试图将所有内容都向上移动,但我会收到一个我无法从 main 中理解的错误。有人介意帮帮我吗?

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


public class calculator extends JFrame {



 public calculator() {

  super("Calculator");

  setLayout(new BorderLayout());
  setSize(new Dimension(250,250));

 }

 public static void main(String[] args) {


    calculator c = new calculator();
    JPanel panel1 = new JPanel();
    JPanel panel2 = new JPanel();
    GridLayout gl = new GridLayout(4,4,5,5);


    JButton b1 = new JButton("7");
    JButton b2 = new JButton("8");
    JButton b3 = new JButton("9");
    JButton b4 = new JButton("/");

    JButton b5 = new JButton("4");
    JButton b6 = new JButton("5");
    JButton b7 = new JButton("6");
    JButton b8 = new JButton("*");

    JButton b9 = new JButton("1");
    JButton b10 = new JButton("2");
    JButton b11 = new JButton("3");
    JButton b12 = new JButton("-");

    JButton b13 = new JButton("0");
    JButton b14 = new JButton(".");
    JButton b15 = new JButton("=");
    JButton b16 = new JButton("+");


    panel2.add(b1);
    b1.setBackground(Color.white);
    b1.setFont(new Font("Sans Serif", Font.BOLD, 16));
    panel2.add(b2);
    b2.setBackground(Color.BLACK);
    b2.setFont(new Font("Sans Serif", Font.BOLD, 16));
    b2.setForeground(Color.WHITE);
    panel2.add(b3);
    b3.setBackground(Color.white);
    b3.setFont(new Font("Sans Serif", Font.BOLD, 16));
    panel2.add(b4);
    b4.setBackground(Color.BLACK);
    b4.setFont(new Font("Sans Serif", Font.BOLD, 16));
    b4.setForeground(Color.WHITE);


    panel2.add(b5);
    b5.setBackground(Color.BLACK);
    b5.setFont(new Font("Sans Serif", Font.BOLD, 16));
    panel2.add(b6);
    b5.setForeground(Color.WHITE);
    b6.setBackground(Color.white);
    b6.setFont(new Font("Sans Serif", Font.BOLD, 16));
    panel2.add(b7);
    b7.setBackground(Color.BLACK);
    b7.setFont(new Font("Sans Serif", Font.BOLD, 16));
    panel2.add(b8);
    b7.setForeground(Color.WHITE);
    b8.setBackground(Color.white);
    b8.setFont(new Font("Sans Serif", Font.BOLD, 16));

    panel2.add(b9);
    b9.setBackground(Color.white);
    b9.setFont(new Font("Sans Serif", Font.BOLD, 16));
    panel2.add(b10);
    b10.setBackground(Color.BLACK);
    b10.setFont(new Font("Sans Serif", Font.BOLD, 16));     
    b10.setForeground(Color.WHITE);
    panel2.add(b11);
    b11.setBackground(Color.white);
    b11.setFont(new Font("Sans Serif", Font.BOLD, 16));
    panel2.add(b12);
    b12.setBackground(Color.BLACK);
    b12.setFont(new Font("Sans Serif", Font.BOLD, 16));
    b12.setForeground(Color.WHITE);

    panel2.add(b13);
    b13.setBackground(Color.BLACK);
    b13.setFont(new Font("Sans Serif", Font.BOLD, 16));
    b13.setForeground(Color.WHITE);
    panel2.add(b14);
    b14.setBackground(Color.white);
    b14.setFont(new Font("Sans Serif", Font.BOLD, 16));
    panel2.add(b15);
    b15.setBackground(Color.BLACK);
    b15.setFont(new Font("Sans Serif", Font.BOLD, 16));
    b15.setForeground(Color.WHITE);
    panel2.add(b16);
    b16.setBackground(Color.white);
    b16.setFont(new Font("Sans Serif", Font.BOLD, 16));




    panel1.add(new JTextField(20));
    panel2.setLayout(gl);

    c.add(panel1,BorderLayout.NORTH);
    c.add(panel2,BorderLayout.CENTER);
    c. setVisible(true);
 }

 }

编辑:有条件,因为这是我的 java 实验室。

  1. 计算器的尺寸为 250 x 250 像素。
  2. 计算器按钮的背景色和前景色必须以棋盘格图案交替,如上所示。您可以选择任意一对颜色作为前景色和背景色。
  3. 按钮之间应至少有 5 个 space 像素。
  4. 按钮上的文字应为 SanSerif 字号 16 且为粗体。
  5. 您的应用程序应在单个 class 中实现。 class 的主要方法只是创建 class 的 object。 class 的构造函数创建并显示 GUI。如果需要,构造函数可以调用 class 的其他方法。
  6. class 必须从 JFrame 继承,如下所示: public myGUI 扩展 JFrame { ... } extends 关键字指定继承。在 class 中,由于继承,您可以直接访问 JFrame class 的方法,而无需指定 object。所以当你想在框架中添加一些东西时,只需说 添加(一些组件); 您可以在构造函数中指定 window 的标题,只需将以下行添加为构造函数中的第一行即可。 super(“你的标题 window!”);

首先,您 class 的名字应该以大写字母 Calculator 开头,您可以执行以下操作:

Implement the constructor of your class like you did.

Write a method that takes all the code you have on your main and make some changes like in the code below:

public void init() {
 
 //Don't instantiate your class here
 JPanel panel1 = new JPanel();
 JPanel panel2 = new JPanel();
 GridLayout gl = new GridLayout(4,4,5,5);


 JButton b1 = new JButton("7");
 JButton b2 = new JButton("8");
 JButton b3 = new JButton("9");
 JButton b4 = new JButton("/");

 JButton b5 = new JButton("4");
 JButton b6 = new JButton("5");
 JButton b7 = new JButton("6");
 JButton b8 = new JButton("*");

 JButton b9 = new JButton("1");
 JButton b10 = new JButton("2");
 JButton b11 = new JButton("3");
 JButton b12 = new JButton("-");

 JButton b13 = new JButton("0");
 JButton b14 = new JButton(".");
 JButton b15 = new JButton("=");
 JButton b16 = new JButton("+");


 panel2.add(b1);
 b1.setBackground(Color.white);
 b1.setFont(new Font("Sans Serif", Font.BOLD, 16));
 panel2.add(b2);
 b2.setBackground(Color.BLACK);
 b2.setFont(new Font("Sans Serif", Font.BOLD, 16));
 b2.setForeground(Color.WHITE);
 panel2.add(b3);
 b3.setBackground(Color.white);
 b3.setFont(new Font("Sans Serif", Font.BOLD, 16));
 panel2.add(b4);
 b4.setBackground(Color.BLACK);
 b4.setFont(new Font("Sans Serif", Font.BOLD, 16));
 b4.setForeground(Color.WHITE);


 panel2.add(b5);
 b5.setBackground(Color.BLACK);
 b5.setFont(new Font("Sans Serif", Font.BOLD, 16));
 panel2.add(b6);
 b5.setForeground(Color.WHITE);
 b6.setBackground(Color.white);
 b6.setFont(new Font("Sans Serif", Font.BOLD, 16));
 panel2.add(b7);
 b7.setBackground(Color.BLACK);
 b7.setFont(new Font("Sans Serif", Font.BOLD, 16));
 panel2.add(b8);
 b7.setForeground(Color.WHITE);
 b8.setBackground(Color.white);
 b8.setFont(new Font("Sans Serif", Font.BOLD, 16));

 panel2.add(b9);
 b9.setBackground(Color.white);
 b9.setFont(new Font("Sans Serif", Font.BOLD, 16));
 panel2.add(b10);
 b10.setBackground(Color.BLACK);
 b10.setFont(new Font("Sans Serif", Font.BOLD, 16));     
 b10.setForeground(Color.WHITE);
 panel2.add(b11);
 b11.setBackground(Color.white);
 b11.setFont(new Font("Sans Serif", Font.BOLD, 16));
 panel2.add(b12);
 b12.setBackground(Color.BLACK);
 b12.setFont(new Font("Sans Serif", Font.BOLD, 16));
 b12.setForeground(Color.WHITE);

 panel2.add(b13);
 b13.setBackground(Color.BLACK);
 b13.setFont(new Font("Sans Serif", Font.BOLD, 16));
 b13.setForeground(Color.WHITE);
 panel2.add(b14);
 b14.setBackground(Color.white);
 b14.setFont(new Font("Sans Serif", Font.BOLD, 16));
 panel2.add(b15);
 b15.setBackground(Color.BLACK);
 b15.setFont(new Font("Sans Serif", Font.BOLD, 16));
 b15.setForeground(Color.WHITE);
 panel2.add(b16);
 b16.setBackground(Color.white);
 b16.setFont(new Font("Sans Serif", Font.BOLD, 16));

 panel1.add(new JTextField(20));
 panel2.setLayout(gl);

 //Replace the c instance with the keyword this
 this.add(panel1,BorderLayout.NORTH);
 this.add(panel2,BorderLayout.CENTER);
 this. setVisible(true);
 
}

And in your main do the following :

public static void main(String[] args) {
    //Instantiate your class and the constructor code will be executed
       Calculator c=new Calculator();
    //Then call your implemented init() method 
       c.init();

}

它将按预期工作:

编辑:

参考您的编辑,只需将方法 init 的代码放入构造函数中,并在您的 main 中实例化您的 class,它将使用 this关键字。

 public static void main(String[] args) {

    Calculator c=new Calculator();

 }