[英]Illegal static declaration in inner class while using ActionListener
我正在嘗試編寫一個用於家庭作業的基本計算器GUI程序。 我正在嘗試為計算器上按下的每個按鈕定義一個變量,並在聲明所有變量時進行計算。 現在,它只能將兩個數字0-9相加/相減/相除/相乘,但是我想確保在擴展之前可以正常工作。 我的問題是我得到了錯誤代碼“內部類Calculator.sign中的非法靜態聲明”。 我想知道如何克服這個錯誤。
謝謝
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
/*
This program will display a calculator by GUI application. It accepts
floating point numbers.
*/
public class Calculator extends JFrame
{
private final int WINDOW_WIDTH = 350;
private final int WINDOW_HEIGHT = 350;
private double num1 = 0;
private double num2 = 0;
private int sign;
private double answer;
JButton seven = new JButton("7");
JButton eight = new JButton("8");
JButton nine = new JButton("9");
JButton mult = new JButton("x");
JButton four = new JButton("4");
JButton five = new JButton("5");
JButton six = new JButton("6");
JButton min = new JButton("-");
JButton one = new JButton("1");
JButton two = new JButton("2");
JButton three = new JButton("3");
JButton plus = new JButton("+");
JButton zero = new JButton("0");
JButton point = new JButton(".");
JButton equ = new JButton("=");
JButton div = new JButton("/");
//contructor
public Calculator()
{
setTitle("Calculator");
setSize(WINDOW_WIDTH, WINDOW_HEIGHT);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new GridLayout(4,4));
add(seven);
add(eight);
add(nine);
add(mult);
add(four);
add(five);
add(six);
add(min);
add(one);
add(two);
add(three);
add(plus);
add(zero);
add(point);
add(equ);
add(div);
seven.addActionListener(new ButtonListener());
eight.addActionListener(new ButtonListener());
nine.addActionListener(new ButtonListener());
mult.addActionListener(new ButtonListener());
four.addActionListener(new ButtonListener());
five.addActionListener(new ButtonListener());
six.addActionListener(new ButtonListener());
min.addActionListener(new ButtonListener());
one.addActionListener(new ButtonListener());
two.addActionListener(new ButtonListener());
three.addActionListener(new ButtonListener());
plus.addActionListener(new ButtonListener());
zero.addActionListener(new ButtonListener());
point.addActionListener(new ButtonListener());
equ.addActionListener(new ButtonListener());
div.addActionListener(new ButtonListener());
setVisible(true);
}
private class ButtonListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
if(e.getSource() == seven)
{
num1 = 7;
}
else if(e.getSource() == eight)
{
num1 = 8;
}
else if(e.getSource() == nine)
{
num1 = 9;
}
else if(e.getSource() == four)
{
num1 = 4;
}
if(e.getSource() == five)
{
num1 = 5;
}
else if(e.getSource() == six)
{
num1 = 6;
}
else if(e.getSource() == one)
{
num1 = 1;
}
else if(e.getSource() == two)
{
num1 = 2;
}
if(e.getSource() == three)
{
num1 = 3;
}
else if(e.getSource() == zero)
{
num1 = 0;
}
}
}
private class sign implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
if(e.getSource() == mult)
{
sign = 1;
}
else if(e.getSource() == div)
{
sign = 2;
}
else if(e.getSource() == plus)
{
sign = 3;
}
else if(e.getSource() == min)
{
sign = 4;
}
}
private class ButtonListener2 implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
if(e.getSource() == seven)
{
num2 = 7;
}
else if(e.getSource() == eight)
{
num2 = 8;
}
else if(e.getSource() == nine)
{
num2 = 9;
}
else if(e.getSource() == four)
{
num2 = 4;
}
if(e.getSource() == five)
{
num2 = 5;
}
else if(e.getSource() == six)
{
num2 = 6;
}
else if(e.getSource() == one)
{
num2 = 1;
}
else if(e.getSource() == two)
{
num2 = 2;
}
if(e.getSource() == three)
{
num2 = 3;
}
else if(e.getSource() == zero)
{
num2 = 0;
}
}
}
private class equals implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
if(sign == 1)
{
answer = num1*num2;
JOptionPane.showMessageDialog(null, answer);
}
else if(sign == 2)
{
answer = num1/num2;
JOptionPane.showMessageDialog(null, answer);
}
else if(sign == 3)
{
answer = num1 + num2;
JOptionPane.showMessageDialog(null, answer);
}
else if(sign == 4)
{
answer = num1 - num2;
JOptionPane.showMessageDialog(null, answer);
}
}
}
/*
Main Method
*/
public static void main(String[] args)
{
new Calculator();
}
}
}
我想知道如何通過此錯誤。
您可以先確定錯誤的性質。 它抱怨靜態聲明,那么它在說什么聲明? 那不應該很難。 編譯器會為您提供錯誤的行號,但是即使沒有該行號,整個程序中也只有一個靜態聲明:
public static void main(String[] args) { new Calculator(); }
那是在Calculator.sign
類中嗎? 是的,如果仔細看,您會發現事實確實如此。 那是應該在的地方嗎? 我傾向於不考慮,但是如果這確實是您的意圖,那么您將需要再考慮一下,因為內部類(與靜態嵌套類相對)可能沒有任何靜態成員。
您可能還想查看在Calculator.sign
類中是否存在其他實際上不應該存在的內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.