我想在这个计算器中添加图形

时间:2015-01-21 13:13:53

标签: java swing

我想用swing添加图形到这个计算器但我无法通过super.paint(g)的错误显示;有人可以通过绕过这个问题告诉我如何使用Swing为这个计算器添加图形。图形已经准备好了。它说错误是它无法解决:paint(java.awt.Grpahics)

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.text.ParseException;
import java.util.Scanner;
import java.awt.Graphics;

public class Calculator_ui implements ActionListener
{
   JFrame frame=new JFrame("Calculator");
   JPanel panel=new JPanel(new FlowLayout());

   JTextArea text=new JTextArea(5,20);

   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");

   Double number1,number2,result;
   int addc=0,subc=0,multic=0,divc=0;

   public void ui()
   {
      frame.setVisible(true);
      frame.setSize(250,200);
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

      frame.add(panel);
      panel.add(text);

      panel.add(but1);
      panel.add(but2);
      panel.add(but3);
      panel.add(but4);
      panel.add(but5);
      panel.add(but6);
      panel.add(but7);
      panel.add(but8);
      panel.add(but9);
      panel.add(but0);

      panel.add(butadd);
      panel.add(butsub);
      panel.add(butmulti);
      panel.add(butdiv);
      panel.add(buteq);
      panel.add(butclear);

      but1.addActionListener(this);
      but2.addActionListener(this);
      but3.addActionListener(this);
      but4.addActionListener(this);
      but5.addActionListener(this);
      but6.addActionListener(this);
      but7.addActionListener(this);
      but8.addActionListener(this);
      but9.addActionListener(this);
      but0.addActionListener(this);
      butadd.addActionListener(this);
      butsub.addActionListener(this);
      butmulti.addActionListener(this);
      butdiv.addActionListener(this);
      buteq.addActionListener(this);
      butclear.addActionListener(this);

   }
   public void paint (Graphics g)
   {

      super.paint(g);//Error sign displayed here

      g.setColor(Color.blue);
      g.fillOval(500,900,20,20);
      g.fillOval(450,850,20,20);
      g.fillOval(500,800,20,20);
      g.fillOval(550,850,20,20);


   }


   public void actionPerformed(ActionEvent e)
   {
      Object source=e.getSource();

      if(source==butclear)
      {
         number1=0.0;
         number2=0.0;
         text.setText("");
      }
      if(source==but1)
      {
         text.append("1");
      }
      if(source==but2)
      {
         text.append("2");
      }
      if(source==but3)
      {
         text.append("3");
      }
      if(source==but4)
      {
         text.append("4");
      }
      if(source==but5)
      {
         text.append("5");
      }
      if(source==but6)
      {
         text.append("6");
      }
      if(source==but7)
      {
         text.append("7");
      }
      if(source==but8)
      {
         text.append("8");
      }
      if(source==but9)
      {
         text.append("9");
      }
      if(source==but0)
      {
         text.append("0");
      }
      if(source==butadd)
      {
         number1=number_reader();
         text.setText("");
         addc=1;
         subc=0;
         multic=0;
         divc=0;
      }
      if(source==butsub)
      {
         number1=number_reader();
         text.setText("");
         addc=0;
         subc=1;
         multic=0;
         divc=0;
      }
      if(source==butmulti)
      {
         number1=number_reader();
         text.setText("");
         addc=0;
         subc=0;
         multic=1;
         divc=0;
      }
      if(source==butdiv)
      {
         number1=number_reader();
         text.setText("");
         addc=0;
         subc=0;
         multic=0;
         divc=1;
      }
      if(source==buteq)
      {
         number2=number_reader();
         if(addc>0)
         {
            result=number1+number2;
            text.setText(Double.toString(result));
         }
         if(subc>0)
         {
            result=number1-number2;
            text.setText(Double.toString(result));
         }
         if(multic>0)
         {
            result=number1*number2;
            text.setText(Double.toString(result));
         }
         if(divc>0)
         {
            result=number1/number2;
            text.setText(Double.toString(result));
         }
      }
   }

   public double number_reader()
   {
      Double num1;
      String s;
      s=text.getText();
      num1=Double.valueOf(s);

      return num1;
   }




   public static void main(String[] args)
   {
      Calculator_ui n=new Calculator_ui();
      n.ui();


   }//main
}//class 

1 个答案:

答案 0 :(得分:4)

没有明确说明问题是什么,只是查看你的代码:

public class Calculator_ui implements ActionListener
{
...
    public void paint (Graphics g)
    {
        //call the paint method of the superclass JFrame
        super.paint(g);
        ...
    }
...
}

你的课程实际上并没有从JFrame延伸,也从未被绘画机制调用过。这就是为什么我们应该总是使用@Override注释:如果你这样做,你会有一个编译错误说明这个事实。实际上你应该有一个编译错误,说像"找不到符号:方法paint()"在super.paint(g)行,因为您的课程不会从JFrame或定义此方法的任何其他Container延伸。

另外:

  1. 不建议在顶级容器中进行自定义绘制。请改用JPanel
  2. 您不应该覆盖paint()方法,而应覆盖paintComponent()。请参阅A Closer Look at the Paint Mechanism