【问题标题】:java beginner calculator not compilingjava初学者计算器不编译
【发布时间】:2013-04-21 18:39:45
【问题描述】:

我是一名 java 初学者,我刚刚制作了我的第一个计算器,但它没有编译。它在编译期间显示了一些问题,在 frame.setPreferredSize(new Dimension(200, 250));frame.setDefaultCloserOperation(JFrame.EXIT_ON_CLOSE): 这些错误显示为<identifier> expectedillegal start of expression。有什么问题?

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


public class Cal extends JFrame implements ActionListener
{

JFrame frame = new JFrame();
    frame.setPreferredSize(new Dimension(200, 250));
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


public Cal(){             

    Button btn_1 = new Button("1");
    btn_1.setSize(5, 5);
    Button btn_2 = new Button("2");
    btn_2.setSize(5, 5);
    Button btn_3 = new Button("3");
    btn_3.setSize(5, 5);
Button btn_4 = new Button("4");
    btn_4.setSize(5, 5);
Button btn_5 = new Button("5");
    btn_5.setSize(5, 5);
    Button btn_6 = new Button("6");
    btn_6.setSize(5, 5);
    Button btn_7 = new Button("7");
    btn_7.setSize(5, 5);
Button btn_8 = new Button("8");
    btn_8.setSize(5, 5);
Button btn_9 = new Button("9");
    btn_9.setSize(5, 5);
Button btn_0 = new Button("0");
    btn_0.setSize(5, 5);
Button btn_dot = new Button(".");
    btn_dot.setSize(5, 5);
Button btn_div = new Button("/");
    btn_div.setSize(5, 5);
Button btn_mult = new Button("*");
    btn_mult.setSize(5, 5);
Button btn_sub = new Button("-");
    btn_sub.setSize(5, 5);
Button btn_addd = new Button("+");
    btn_addd.setSize(5, 5); 
Button btn_equ = new Button("=");
    btn_equ.setSize(5, 5);

JTextField jt = new JTextField();
jt.setHorizontalAlignment(JTextField.RIGHT);
jt.setEditable(false);


double fnum, snum, total;
String op = null;



JPanel players = new JPanel();   

players.setLayout(new GridLayout(1, 1));
players.add(jt, BorderLayout.NORTH);
players.setPreferredSize(new Dimension(10, 50));

JPanel players1 = new JPanel(new GridLayout(4, 3)); // adding buttons  
players1.add(btn_7);
    players1.add(btn_8);
players1.add(btn_9);
players1.add(btn_div);

players1.add(btn_4);
players1.add(btn_5);
    players1.add(btn_6);
players1.add(btn_mult);

    players1.add(btn_1);
players1.add(btn_2);
    players1.add(btn_3);
players1.add(btn_sub);        


players1.add(btn_0);    
players1.add(btn_dot);
players1.add(btn_equ);
players1.add(btn_addd);
    players1.setPreferredSize(new Dimension(150, 150));

//应用actionlistener

btn_1.addActionListener(this);
btn_2.addActionListener(this);
btn_3.addActionListener(this);
btn_4.addActionListener(this);
btn_5.addActionListener(this);
btn_6.addActionListener(this);
btn_7.addActionListener(this);
btn_8.addActionListener(this);
btn_9.addActionListener(this);
btn_0.addActionListener(this);
btn_dot.addActionListener(this);
btn_addd.addActionListener(this);
btn_mult.addActionListener(this);
btn_div.addActionListener(this);
btn_sub.addActionListener(this);
btn_equ.addActionListener(this);

//设置内容可用

JPanel content = new JPanel();
content.setLayout(new BorderLayout());
frame.setContentPane(content);
content.add(players, BorderLayout.NORTH);
content.add(players1, BorderLayout.SOUTH);
frame.setTitle("Calculator");
frame.pack();

frame.setVisible(true);

}

//应用要执行的操作

  public void actionPerformed(ActionListener e){

String input = jt.getText();

if(e.getSource()==btn_1)
    {jt.setText(input + "1");}
else if(e.getSource()==btn_2)
    {jt.setText(input + "2");}
else if(e.getSource()==btn_3)
    {jt.setText(input + "3");}
else if(e.getSource()==btn_4)
    {jt.setText(input + "4");}
else if(e.getSource()==btn_5)
    {jt.setText(input + "5");}
else if(e.getSource()==btn_6)
    {jt.setText(input + "6");}
else if(e.getSource()==btn_7)
    {jt.setText(input + "7");}
else if(e.getSource()==btn_8)
    {jt.setText(input + "8");}
else if(e.getSource()==btn_9)
    {jt.setText(input + "9");}
else if(e.getSource()==btn_0)
    {jt.setText(input + "0");}
else if(e.getSource()==btn_dot)
    {jt.setText(input + ".");}
else if(e.getSource()==btn_addd)
    {
    fnum = Double.parseDouble(jt.getText());
    op = "+";
    jt.setText(" ");
    }
else if(e.getSource()==btn_sub)
    {
    fnum = Double.parseDouble(jt.getText());
    op = "-";
    jt.setText(" ");
    }
else if(e.getSource()==btn_div)
    {
    fnum = Double.parseDouble(jt.getText());
    op = "/";
    jt.setText(" ");
    }
else if(e.getSource()==btn_equ)
    {
    snum = Double.parseDouble(jt.getText());
    if(op.equ("+"))
        {
        total = fnum + snum;
        }
    if(op.equ("-"))
        {
        total = fnum - snum;
        }
    if(op.equ("*"))
        {
        total = fnum * snum;
        }
    if(op.equ("/"))
        {
        total = fnum / snum;
        }

    jt.setText(" " + total);
    }

}
public static void main(String args[]){

Cal obj = new Cal(); }
}

【问题讨论】:

  • 没有编译就说没有运行是没有意义的。

标签: java swing awt calculator mixing


【解决方案1】:

您正试图在可执行上下文的上下文之外进行修改或执行语句。

您只能在方法和构造函数之外进行声明并将默认值分配给变量

移动

frame.setPreferredSize(new Dimension(200, 250));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

在类构造函数的上下文中

public Cal(){   
    frame.setPreferredSize(new Dimension(200, 250));
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

更新

您遇到了许多参考问题。您在构造函数中定义对象,然后您希望在代码中的其他位置访问这些对象。这些变量在构造函数之外没有上下文。相反,您应该在类级别声明它们,以便它们对整个类可见。

public class Cal extends JFrame implements ActionListener
{

    private JFrame frame = new JFrame();

    private Button btn_1 = new Button("1");
    private Button btn_2 = new Button("2");
    private Button btn_3 = new Button("3");
    private Button btn_4 = new Button("4");
    private Button btn_5 = new Button("5");
    private Button btn_6 = new Button("6");
    private Button btn_7 = new Button("7");
    private Button btn_8 = new Button("8");
    private Button btn_9 = new Button("9");
    private Button btn_0 = new Button("0");
    private Button btn_dot = new Button(".");
    private Button btn_div = new Button("/");
    private Button btn_mult = new Button("*");
    private Button btn_sub = new Button("-");
    private Button btn_addd = new Button("+");
    private Button btn_equ = new Button("=");
    private JTextField jt = new JTextField();

    public Cal(){             
        frame.setPreferredSize(new Dimension(200, 250));
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // This is a bad idea, the layout manager will make these calls redudent...
        btn_1.setSize(5, 5);
        btn_2.setSize(5, 5);
        btn_3.setSize(5, 5);
        btn_4.setSize(5, 5);
        btn_5.setSize(5, 5);
        btn_6.setSize(5, 5);
        btn_7.setSize(5, 5);
        btn_8.setSize(5, 5);
        btn_9.setSize(5, 5);
        btn_0.setSize(5, 5);
        btn_dot.setSize(5, 5);
        btn_div.setSize(5, 5);
        btn_mult.setSize(5, 5);
        btn_sub.setSize(5, 5);
        btn_addd.setSize(5, 5); 
        btn_equ.setSize(5, 5);

        jt.setHorizontalAlignment(JTextField.RIGHT);
        jt.setEditable(false);


        double fnum, snum, total;
        String op = null;



        JPanel players = new JPanel();   

        players.setLayout(new GridLayout(1, 1));
        players.add(jt, BorderLayout.NORTH);
        players.setPreferredSize(new Dimension(10, 50));

        JPanel players1 = new JPanel(new GridLayout(4, 3)); // adding buttons  
        players1.add(btn_7);
        players1.add(btn_8);
        players1.add(btn_9);
        players1.add(btn_div);

        players1.add(btn_4);
        players1.add(btn_5);
        players1.add(btn_6);
        players1.add(btn_mult);

        players1.add(btn_1);
        players1.add(btn_2);
        players1.add(btn_3);
        players1.add(btn_sub);        


        players1.add(btn_0);    
        players1.add(btn_dot);
        players1.add(btn_equ);
        players1.add(btn_addd);
        players1.setPreferredSize(new Dimension(150, 150));

您还混合了重型和轻型组件,这绝不是一个好主意。使用JButton 而不是Button

【讨论】:

  • 所有错误都与“找不到变量fnum、snum、jt、getSource()”等有关
  • 那是因为你已经在本地定义了它们在构造函数中。其他方法都看不到它们...
  • 非常感谢。现在它对我更有帮助。我去试试
  • 现在对我更有帮助了。我只是一个在第二学期学习的初学者,在学习了基础知识后刚刚参加了 10 场高级 Java 讲座。你给了我一个更好的描述我的问题。这是我实施 actionListner 的第一次体验,因此我对它的了解有限
  • 您可以查看how to use action listenerscreating an UI with Swing 了解更多详情
【解决方案2】:

我觉得你需要放

frame.setPreferredSize(new Dimension(200, 250));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Cal() 构造函数中


还有关于Button等变量,在构造函数外定义,像这样:

class Cal extends JFrame implements ActionListener {

    JFrame frame = new JFrame();
    JTextField jt = new JTextField();
    Button btn_1 = new Button("1");
    Button btn_2 = new Button("2");
    .....
    JPanel players1 = new JPanel(new GridLayout(4, 3)); // adding buttons 
    ....

而 e 是 ActionEvent 而不是 ActionListener 像这样:

public void actionPerformed(ActionEvent e) {...}

并且String 类中没有equ 方法,它应该是if (op.equals("+")) {}

【讨论】:

  • 我看到了,尝试在类中定义所有JButton而不是在构造函数中,以便可以阅读它
  • 75 将其添加到构造函数后出现错误。所有错误都是“找不到 symbot、jt、getSource 等以及所有与 jt 相关的内容”和“找不到变量 fnum、snum 等”
  • 这是因为 e 是 ActionEvent 而不是 ActionListener
  • 非常感谢 Alya'a,现在它对我更有帮助。我只是一个在第二学期学习的初学者,在学习了基础知识后刚刚参加了 10 场高级 Java 讲座。你给了我一个更好的描述我的问题。这是我实施 actionListner 的第一次体验,因此我对它的了解有限
  • 我非常非常非常高兴看到我的第一个 GUI 计算器功能正常 :)
【解决方案3】:

我认为 frame.setPreferredSize(new Dimension(200, 250));和 frame.setDefaultCloserOperation(JFrame.EXIT_ON_CLOSE): 需要在方法内。命令总是需要在方法内部。

【讨论】:

    猜你喜欢
    • 2016-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多