具体代码如下:
import javax.swing.*
import java.awt.event.*
import java.awt.*
public class Calculator extends JFrame implements ActionListener {
private JFrame jf
private JButton[] allButtons
private JButton clearButton
private JTextField jtf
public Calculator() {
//对图形组件实例化
jf=new JFrame("任静的计算器1.0:JAVA版")
jf.addWindowListener(new WindowAdapter(){
public void windowClosing(){
System.exit(0)
}
})
allButtons=new JButton[16]
clearButton=new JButton("清除")
jtf=new JTextField(25)
jtf.setEditable(false)
String str="123+456-789*0.=/"
for(int i=0i<allButtons.lengthi++){
allButtons[i]=new JButton(str.substring(i,i+1))
}
}
public void init(){
//完成布局
jf.setLayout(new BorderLayout())
JPanel northPanel=new JPanel()
JPanel centerPanel=new JPanel()
JPanel southPanel=new JPanel()
northPanel.setLayout(new FlowLayout())
centerPanel.setLayout(new GridLayout(4,4))
southPanel.setLayout(new FlowLayout())
northPanel.add(jtf)
for(int i=0i<16i++){
centerPanel.add(allButtons[i])
}
southPanel.add(clearButton)
jf.add(northPanel,BorderLayout.NORTH)
jf.add(centerPanel,BorderLayout.CENTER)
jf.add(southPanel,BorderLayout.SOUTH)
addEventHandler()
}
//添加事件监听
public void addEventHandler(){
jtf.addActionListener(this)
for(int i=0i<allButtons.lengthi++){
allButtons[i].addActionListener(this)
}
clearButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
Calculator.this.jtf.setText("")
}
})
}
//事件处理
public void actionPerformed(ActionEvent e) {
//在这里完成事件处理 使计算器可以运行
String action=e.getActionCommand()
if(action=="+"||action=="-"||action=="*"||action=="/"){
}
}
public void setFontAndColor(){
Font f=new Font("宋体",Font.BOLD,24)
jtf.setFont(f)
jtf.setBackground(new Color(0x8f,0xa0,0xfb))
for(int i=0i<16i++){
allButtons[i].setFont(f)
allButtons[i].setForeground(Color.RED)
}
}
public void showMe(){
init()
setFontAndColor()
jf.pack()
jf.setVisible(true)
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
}
public static void main(String[] args){
new Calculator().showMe()
}
}
import java.awt.Colorimport java.awt.Font
import java.awt.GridLayout
import java.awt.event.ActionEvent
import java.awt.event.ActionListener
import javax.swing.JButton
import javax.swing.JFrame
import javax.swing.JLabel
import javax.swing.JPanel
import javax.swing.JTextField
import javax.swing.WindowConstants
import javax.swing.border.LineBorder
class Normal{
double i,j
public Normal(double num1,double num2){
i=num1
j=num2
}
public double puls(){
return i+j
}
public double subtract(){
return i-j
}
public double multiply(){
return i*j
}
public double divide(){
return i/j
}
public double surpuls(){
return i%j
}
}
class scientific extends Normal{
public scientific(int num1, int num2) {
super(num1, num2)
}
}
public class calc extends JFrame{
public static void main(String[] args) {
viewNormal VN= new viewNormal("normal")
}
}
class viewNormal extends JFrame implements ActionListener{
JPanel jp1 = new JPanel(new GridLayout(4,3,5,5))
JPanel jp2 = new JPanel(new GridLayout(5,1,5,5))
JLabel jl
JButton[] jb
JButton jbs,jbo,jba,jbb,jbc,jby
StringBuffer sb = new StringBuffer()
Normal normal
int dot=0
double fnum=0
double lnum=0
double result
String sign=null
public viewNormal(String title){
setTitle(title)
setLayout(null)
setVisible(true)
setBounds(200,200,305,350)
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE)
jb= new JButton[12]
for(int i=0i<9i++){
jb[i]=new JButton(""+(i+1))
jp1.add(jb[i])
jb[i].addActionListener(this)
}
jb[9]=new JButton(".")
jb[10]=new JButton("0")
jb[11]=new JButton("=")
jb[9].addActionListener(this)
jb[10].addActionListener(this)
jb[11].addActionListener(this)
jp1.add(jb[9])
jp1.add(jb[10])
jp1.add(jb[11])
jp1.setBounds(10, 100, 200, 200)
jbs= new JButton("+")jbo= new JButton("-")jba= new JButton("*")
jbb= new JButton("/")jby= new JButton("%")jbc= new JButton("C")
jbs.addActionListener(this)jbo.addActionListener(this)jba.addActionListener(this)
jbb.addActionListener(this)jby.addActionListener(this)jbc.addActionListener(this)
//jp2.add(jby)
jp2.add(jbs)jp2.add(jbo)jp2.add(jba)jp2.add(jbb)jp2.add(jbc)
jp2.setBounds(215, 100, 70, 200)
jl= new JLabel("0",JLabel.RIGHT)
jl.setFont(new Font("Batang",Font.BOLD, 20))
jl.setBorder(new LineBorder(Color.black,2))
jl.setBackground(Color.white)
jl.setBounds(10, 40, 275, 50)
jl.setOpaque(true)
add(jl)
add(jp1)
add(jp2)
}
//+
public void sum(){
lnum=Double.parseDouble(sb.toString())
normal=new Normal(fnum,lnum)
fnum=normal.puls()
result=fnum
}
//-
private void sub() {
System.out.println(sb.toString())
lnum=Double.parseDouble(sb.toString())
normal=new Normal(fnum,lnum)
fnum=normal.subtract()
result=fnum
}
//*
private void mul() {
lnum=Double.parseDouble(sb.toString())
normal=new Normal(fnum,lnum)
fnum=normal.multiply()
result=fnum
}
// /
private void div() {
lnum=Double.parseDouble(sb.toString())
normal=new Normal(fnum,lnum)
fnum=normal.divide()
result=fnum
}
//%
private void sur() {
lnum=Double.parseDouble(sb.toString())
normal=new Normal(fnum,lnum)
fnum=normal.surpuls()
result=fnum
}
// =
private void same(){
if(sign.equals("+")){
sum()
}
if(sign.equals("-")){
sub()
}
if(sign.equals("*")){
mul()
}
if(sign.equals("/")){
div()
}
if(sign.equals("%")){
sur()
}
}
//result
public void Result(){
if(result%1!=0)
jl.setText(""+result)
else
{
int i=(int)result
jl.setText(""+i)
}
}
@Override
public void actionPerformed(ActionEvent e) {
//System.out.println(sb.toString())
// 1~9
for(int i=0i<9i++){
if(e.getSource()==jb[i]&&!sb.toString().equals("0")){
sb.append(jb[i].getText())
jl.setText(sb.toString())
}
else if(e.getSource()==jb[i]&&sb.toString().equals("0")){
int d=sb.length()
sb.delete(0, d)
sb.append(jb[i].getText())
jl.setText(sb.toString())
}
}
// 0
if(e.getSource()==jb[10]&&!sb.toString().equals("0")){
sb.append(jb[10].getText())
jl.setText(sb.toString())
}
// .
if(e.getSource()==jb[9]&&dot==0&&!sb.toString().equals("")){
dot++
sb.append(jb[9].getText())
jl.setText(sb.toString())
}
// =
if(e.getSource()==jb[11]&&!sb.toString().equals("")){
same()
Result()
int d=sb.length()
sb.delete(0, d)
dot=0
}
// +
if(e.getSource()==jbs&&!sb.toString().equals("")){
if(sign!="+"&&sign!=null)
same()
else
sum()
sign ="+"
Result()
int d=sb.length()
sb.delete(0, d)
dot=0
}
//-
if(e.getSource()==jbo&&!sb.toString().equals("")){
if(fnum==0)
fnum=2*Double.parseDouble(sb.toString())
if(sign!="-"&&sign!=null)
same()
else
sub()
sign ="-"
Result()
int d=sb.length()
sb.delete(0, d)
dot=0
}
//*
if(e.getSource()==jba&&!sb.toString().equals("")){
if(fnum==0)
fnum=1
if(sign!="*"&&sign!=null)
same()
else
mul()
sign ="*"
Result()
int d=sb.length()
sb.delete(0, d)
dot=0
}
// /
if(e.getSource()==jbb&&!sb.toString().equals("")){
if(fnum==0)
fnum=Math.pow(Double.parseDouble(sb.toString()),2)
if(sign!="/"&&sign!=null)
same()
else
div()
sign ="/"
Result()
int d=sb.length()
sb.delete(0, d)
dot=0
}
//%
// if(e.getSource()==jby&&!sb.toString().equals("")){
// if(fnum==0){
//fnum=Double.parseDouble(sb.toString())
//result=fnum
// }
// else {
//if(sign!="%"&&sign!=null)
// same()
//else{
//lnum=Double.parseDouble(sb.toString())
//normal=new Normal(fnum,lnum)
//fnum=normal.surpuls()
//result=fnum
//}
// }
// sign ="%"
// Result()
// int d=sb.length()
// sb.delete(0, d)
// dot=0
// }
//clear
if(e.getSource()==jbc){
int d=sb.length()
sb.delete(0, d)
jl.setText("0")
dot=0
fnum=0
lnum=0
sign=null
}
}
}
class viewScientific extends viewNormal{
public viewScientific(String title){
super(title)
setBounds(200,200,800,500)
}
}
//等号以后输入符号用不了, String转 double 本来就有错误,你可以用我的扩展成科学型的。