【java图形计算器】 java awt swing组件应用
package package1;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import java.util.LinkedList;
import java.text.NumberFormat;
public class Computer extends Frame implements ActionListener{
NumberButton numberButton[];
OperationButton operationButton[];
Button 小数点按钮 , 正负号按钮 , 退格按钮 , 求倒数按钮 , 等号按钮 , 清零按钮 ;
Panel panel;
JTextField resultShow;
String 运算符号[]={"+","-","*","/"};
LinkedList linklist;
boolean 是否按下等号=false;
public Computer(){
super("科学计算器");
linklist=new LinkedList();
numberButton=new NumberButton[10];
for(int i=0;i<=9;i++){
numberButton[i]=new NumberButton(i);
numberButton[i].addActionListener(this);
}
operationButton=new OperationButton[4];
for(int i=0;i<=3;i++){
operationButton[i]=new OperationButton(运算符号[i]);
operationButton[i].addActionListener(this);
}
退格按钮=new Button("back");
清零按钮=new Button("C");
等号按钮=new Button("=");
小数点按钮=new Button(".");
正负号按钮=new Button("+/-");
求倒数按钮=new Button("1/x");
退格按钮.setForeground(Color.red);
清零按钮.setForeground(Color.red);
等号按钮.setForeground(Color.red);
小数点按钮.setForeground(Color.blue);
正负号按钮.setForeground(Color.blue);
求倒数按钮.setForeground(Color.blue);
退格按钮.addActionListener(this);
清零按钮.addActionListener(this);
等号按钮.addActionListener(this);
小数点按钮.addActionListener(this);
正负号按钮.addActionListener(this);
求倒数按钮.addActionListener(this);
resultShow=new JTextField(10);
resultShow.setHorizontalAlignment(JTextField.RIGHT);
resultShow.setForeground(Color.blue);
resultShow.setFont(new Font("TimeRoman",Font.PLAIN,14));
resultShow.setBorder(new SoftBevelBorder(BevelBorder.LOWERED));
resultShow.setBackground(Color.white);
resultShow.setEditable(false);
panel=new Panel();
panel.setLayout(new GridLayout(4,5));
panel.add(numberButton[1]);
panel.add(numberButton[2]);
panel.add(numberButton[3]);
panel.add(operationButton[0]);
panel.add(清零按钮);
panel.add(numberButton[4]);
panel.add(numberButton[5]);
panel.add(numberButton[6]);
panel.add(operationButton[1]);
panel.add(退格按钮);
panel.add(numberButton[7]);
panel.add(numberButton[8]);
panel.add(numberButton[9]);
panel.add(operationButton[2]);
panel.add(求倒数按钮);
panel.add(numberButton[0]);
panel.add(正负号按钮);
panel.add(小数点按钮);
panel.add(operationButton[3]);
panel.add(等号按钮);
add(panel,BorderLayout.CENTER);
add(resultShow,BorderLayout.NORTH);
setBounds(100,50,300,240);
setVisible(true);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
public void actionPerformed(ActionEvent e){
if(e.getSource() instanceof NumberButton){
NumberButton b=(NumberButton)e.getSource();
if(linklist.size()==0){
int number=b.getNumber();
linklist.add(""+number);
resultShow.setText(""+number);
是否按下等号=false;
}
else if(linklist.size()==1 && 是否按下等号==false){
int number=b.getNumber();
String num=(String)linklist.getFirst();
String s=num.concat(""+number);
// E set(int index, E element) 将此列表中指定位置的元素替换为指定的元素。
linklist.set(0,s);
resultShow.setText(s);
}
else if(linklist.size()==1 && 是否按下等号==true){
int number=b.getNumber();
linklist.removeFirst();
linklist.add(""+number);
是否按下等号=false;
resultShow.setText(""+number);
}
else if(linklist.size()==2){
int number=b.getNumber();
linklist.add(""+number);
resultShow.setText(""+number);
}
else if(linklist.size()==3){
int number=b.getNumber();
String num=(String)linklist.getLast();
String s=num.concat(""+number);
linklist.set(2,s);
resultShow.setText(s);
}
}
else if(e.getSource() instanceof OperationButton){
OperationButton b=(OperationButton)e.getSource();
if(linklist.size()==1){
String mark=b.getOperator();
linklist.add(mark);
}
else if(linklist.size()==2){
String mark=b.getOperator();
linklist.set(1,mark);
}
else if(linklist.size()==3){
String mark=b.getOperator();
String num1=(String)linklist.getFirst();
String num2=(String)linklist.getLast();
String 运算符号=(String)linklist.get(1);
double n1=Double.parseDouble(num1);
double n2=Double.parseDouble(num2);
double n=0;
if(运算符号.equals("+"))n=n1+n2;
else if(运算符号.equals("-"))n=n1-n2;
else if(运算符号.equals("*"))n=n1*n2;
else if(运算符号.equals("/"))n=n1/n2;
linklist.clear();
linklist.add(""+n);
linklist.add(mark);
resultShow.setText(""+n);
}
}
else if(e.getSource()==等号按钮){
是否按下等号=true;
if(linklist.size()==1 || linklist.size()==2){
String num=(String)linklist.getFirst();
resultShow.setText(""+num);
}
else if(linklist.size()==3){
String num1=(String)linklist.getFirst();
String num2=(String)linklist.getLast();
String 运算符号=(String)linklist.get(1);
double n1=Double.parseDouble(num1);
double n2=Double.parseDouble(num2);
double n=0;
if(运算符号.equals("+"))n=n1+n2;
else if(运算符号.equals("-"))n=n1-n2;
else if(运算符号.equals("*"))n=n1*n2;
else if(运算符号.equals("/"))n=n1/n2;
linklist.clear();
linklist.add(""+n);
resultShow.setText(""+n);
}
}
else if(e.getSource()==小数点按钮){
// if(linklist.size()==0){
// 是否按下等号=false;
// }
if(linklist.size()==1){
String dot=小数点按钮.getLabel();
String num=(String) linklist.getFirst();
String s=null;
if(num.indexOf(dot)==-1){
s=num.concat(dot);
linklist.set(0,s);
}
else s=num;
linklist.set(0,s);
resultShow.setText(s);
}
else if(linklist.size()==3){
String dot=小数点按钮.getLabel();
String num=(String) linklist.getLast();
String s=null;
if(num.indexOf(dot)==-1){
s=num.concat(dot);
linklist.set(2,s);
}
else s=num;
linklist.set(2,s);
resultShow.setText(s);
}
}
else if(e.getSource()==退格按钮){
if(linklist.size()==1){
String num=(String) linklist.getFirst();
if(num.length()>=1){
num=num.substring(0,num.length()-1);
linklist.set(0,num);
resultShow.setText(num);
}
else{
linklist.removeLast();
resultShow.setText("0");
}
}
if(linklist.size()==3){
String num=(String) linklist.getLast();
if(num.length()>=1){
num=num.substring(0,num.length()-1);
linklist.set(2,num);
resultShow.setText(num);
}
else{
linklist.removeLast();
resultShow.setText("0");
}
}
}
else if(e.getSource()==正负号按钮){
if(linklist.size()==1){
String num=(String) linklist.getFirst();
double d=Double.parseDouble(num);
d=-1*d;
String str=String.valueOf(d);
linklist.set(0,str);
resultShow.setText(str);
}
else if(linklist.size()==3){
String num=(String) linklist.getLast();
double d=Double.parseDouble(num);
d=-1*d;
String str=String.valueOf(d);
linklist.set(2,str);
resultShow.setText(str);
}
}
else if(e.getSource()==求倒数按钮){
if(linklist.size()==1 || linklist.size()==2){
String num=(String) linklist.getFirst();
double d=Double.parseDouble(num);
d=1.0/d;
String str=String.valueOf(d);
linklist.set(0,str);
resultShow.setText(str);
}
else if(linklist.size()==3){
String num=(String) linklist.getLast();
double d=Double.parseDouble(num);
d=1.0/d;
String str=String.valueOf(d);
linklist.set(2,str);
resultShow.setText(str);
}
}
else if(e.getSource()==清零按钮){
是否按下等号=false;
resultShow.setText("0");
linklist.clear();
}
}
public static void main(String[] args)
{
new Computer();
}
}
class NumberButton extends Button{
int number;
public NumberButton(int number){
super(""+number);
this.number=number;
setForeground(Color.blue);
}
public int getNumber(){
return number;
}
}
class OperationButton extends Button{
String operator;
public OperationButton(String operator){
super(operator);
this.operator=operator;
setForeground(Color.red);
}
public String getOperator(){
return operator;
}
}
运行结果:

【java图形计算器】 java awt swing组件应用的更多相关文章
- java中经常使用的Swing组件总结
1.按钮(Jbutton) Swing中的按钮是Jbutton,它是javax.swing.AbstracButton类的子类,swing中的按钮可以显示图像,并且可以将按钮设置为窗口的默认图标,而且 ...
- Java GUI编程中AWT/swing/SWT的优缺点
http://www.cnblogs.com/dugang/archive/2010/10/22/1858478.html AWT AWT是Abstract Window Toolkit(抽象窗口工具 ...
- java 图形界面
1.创建一个窗口框架 /** * java 用户界面框架 * 2016/5/10 */ package org.windows; import javax.swing.*; public class ...
- AWT提供了Java Applet 和Java Application中可用的用户图形界面 GUI 中的基本组件
AWT提供了Java Applet 和Java Application中可用的用户图形界面 GUI 中的基本组件( component s). 由于Java是一种独立于平台的 程序设计语言 ,但GUI ...
- JAVA 图形开发中组件对齐方法及界面开发
/*文章中用到的代码只是一部分,需要源码的可通过邮箱联系我 1978702969@qq.com*/ 在上篇博客中提到了JAVA图形界面开发时的两种布局,流式布局和边框布局. 在实际使用中可能会发现,往 ...
- 【转】java图形界面设计(AWT)
[转自]http://blog.sina.com.cn/s/blog_616e189f0100ne1t.html 1. 基本的java Frame操作. Java的图形界面的类主要包括AW ...
- JAVA Swing 组件演示***
下面是Swing组件的演示: package a_swing; import java.awt.BorderLayout; import java.awt.Color; import java.awt ...
- Java可视化计算器
利用java中的AWT和SWING包来做可视化界面. 首先来简单了解一下这两个包: AWT和Swing都是Java中用来做可视化界面的.AWT(Abstract Window Toolkit):抽象窗 ...
- Java图形界面学习---------简易登录界面
/** * @author Administrator * Java图形界面学习---------简易登录界面 * date:2015/10/31 */ import java.awt.BorderL ...
随机推荐
- javascript基础(三)运算
原文http://pij.robinqu.me/ 递增递减操作符(包括前置和后置).一元正负符号操作符 这些操作符适用于任何数据类型的值,针对不同类型的值,该操作符遵循以下规则(经过对比发现,其规则与 ...
- OMCS ——卓尔不群的网络语音视频框架
作为.NET平台上的开发人员,要开发出一个像样视频聊天系统或视频会议系统,非常艰难,这不仅仅是因为.NET对多媒体的支持比较有限,还因为网络语音视频这块涉及到了很多专业方面的技术,而.NET在这些方面 ...
- 不完善的css怦然心动,有待改进...
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- PHP ajax 限制 API 来源限制
if(isset($_SERVER["HTTP_X_REQUESTED_WITH"]) && strtolower($_SERVER["HTTP_X_RE ...
- ecos 问题答疑(转)
1.为什么我购买的是源码版,但是我的base/ego.php(或者base/ego/目录下文件)却是加密的? 答:ego 源码商业授权文件仅用于和商派软件签订源码协议的商业用户按照甲乙的源码保护约定 ...
- NYOJ-1036 非洲小孩(贪心)
非洲小孩 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 家住非洲的小孩,都很黑.为什么呢?第一,他们地处热带,太阳辐射严重.第二,他们不经常洗澡.(常年缺水,怎么洗 ...
- AltiumDesigner14绘制四层板设置
1,快捷键(O+K)进入板层设置界面: 2,选择AddLayer,里边有两个选项(add layer(添加信号层)||add internal plane(增加平面)) 四层板的话一般层次的划分是t ...
- JIRA搭建
请参考下面的文章 http://www.linuxidc.com/Linux/2014-09/106995.htm 所需下载的文件 链接: http://pan.baidu.com/s/1c0wad3 ...
- ios 测试工程是否内存泄漏
转自http://www.cocoachina.com/ios/20141203/10519.html 虽然iOS 5.0版本之后加入了ARC机制,由于相互引用关系比较复杂时,内存泄露还是可能存在.所 ...
- Android获取网络数据进行GZIP解压
说明:现在很多网站都会在回传数据的时候进行GZIP压缩,我们可以在请求头中申明支持GZIP压缩.可以减轻网络传输压力,Xutils中已经实现. 下面是一个DEMO,便于理解. private void ...