Недопустимое статическое объявление во внутреннем классе при использовании ActionListener - PullRequest
1 голос
/ 30 апреля 2019

Я пытаюсь написать базовую программу с графическим интерфейсом для домашнего задания. Я пытаюсь определить переменную для каждой кнопки, нажатой на калькуляторе, и сделать расчет, когда все переменные объявлены. Прямо сейчас, он может только добавлять / вычитать / делить / умножать два числа 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();
   }



}
}

1 Ответ

0 голосов
/ 30 апреля 2019

Мне интересно, как мне пройти эту ошибку.

Вы можете начать с определения характера ошибки.Он жалуется на статическое объявление, так о каком объявлении может идти речь?Это не должно быть сложно.Компилятор дал бы вам номер строки для ошибки, но даже без этого во всей программе есть только одно статическое объявление:

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

Это в классе Calculator.sign?Почему да, если вы посмотрите внимательно, вы увидите, что это так.Это где это должно быть?Я склонен думать не так, но если это действительно было вашим намерением, вам придется подумать еще раз, потому что внутренний класс (в отличие от статического вложенного класса) может не иметь никаких статических членов.

Вы также можете посмотреть, есть ли что-то еще внутри класса Calculator.sign, которого на самом деле не должно быть.

...