我想用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
答案 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延伸。
另外:
JPanel
。 paint()
方法,而应覆盖paintComponent()
。请参阅A Closer Look at the Paint Mechanism