Java可视化计算器
利用java中的AWT和SWING包来做可视化界面。
首先来简单了解一下这两个包:
AWT和Swing都是Java中用来做可视化界面的。AWT(Abstract Window Toolkit):抽象窗口工具包,早期编写图形界面应用程序的包。Swing :为解决 AWT 存在的问题而新开发的图形界面包。Swing是对AWT的改良和扩展。
实现原理
AWT :是通过调用操作系统的native方法实现的,所以在Windows系统上的AWT窗口就是Windows的风格,而在Unix系统上的则是XWindow风格。 AWT 中的图形函数与 操作系统 所提供的图形函数之间有着一一对应的关系,我们把它称为peers。 也就是说,当我们利用 AWT 来构件图形用户界面的时候,我们实际上是在利用 操作系统 所提供的图形库。由于不同 操作系统 的图形库所提供的功能是不一样的,在一个平台上存在的功能在另外一个平台上则可能不存在。为了实现Java语言所宣称的”一次编译,到处运行”的概念,AWT 不得不通过牺牲功能来实现其平台无关性,也就是说,AWT 所提供的图形功能是各种通用型操作系统所提供的图形功能的交集。由于AWT 是依靠本地方法来实现其功能的,我们通常把AWT控件称为重量级控件。
Swing :是所谓的Lightweight组件,不是通过native方法来实现的,所以Swing的窗口风格更多样化。但是,Swing里面也有heaveyweight组件。比如JWindow,Dialog,JFrame。Swing由纯Java写成,可移植性好,外观在不同平台上相同。所以Swing部件称为轻量级组件( Swing是由纯JAVA CODE所写的,因此SWING解决了JAVA因窗口类而无法跨平台的问题,使窗口功能也具有跨平台与延展性的特性,而且SWING不需占有太多系统资源,因此称为轻量级组件!!!)
区别:
- AWT 是基于本地方法的C/C++程序,其运行速度比较快;Swing是基于AWT的Java程序,其运行速度比较慢。
- AWT的控件在不同的平台可能表现不同,而Swing在所有平台表现一致。
如何选择:
在实际应用中,应该使用AWT还是Swing取决于应用程序所部署的平台类型。例如:
- 对于一个嵌入式应用,目标平台的硬件资源往往非常有限,而应用程序的运行速度又是项目中至关重要的因素。在这种矛盾的情况下,简单而高效的AWT当然成了嵌入式Java的第一选择。
- 在普通的基于PC或者是工作站的标准Java应用中,硬件资源对应用程序所造成的限制往往不是项目中的关键因素。所以在标准版的Java中则提倡使用Swing,也就是通过牺牲速度来实现应用程序的功能。
在了解了这两个包之后我们开始上主菜,我们今天的写的简易计算器的实现:
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Stack;
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
class Main extends JApplet implements ActionListener {
private JTextField textField = new JTextField("请输入", 12);
String operator = ""; //操作
String input = ""; //输入的 式子
boolean flag = true; public void init() //重写Applet里边的init方法
{
textField.setFont(new Font("宋体", Font.PLAIN, 50));//设置字体格式
textField.setEditable(false); //设置文本框不可更改
Container C = getContentPane();
JButton b[] = new JButton[17];
JPanel panel = new JPanel();
JPanel panel1 = new JPanel();
panel1.add(textField);
panel.setLayout(new GridLayout(4, 4, 5, 5));
panel1.setLayout(new FlowLayout(3));
C.add(panel, BorderLayout.CENTER);
C.add(panel1, BorderLayout.NORTH);
String name[] = {"7", "8", "9", "+", "4", "5", "6", "-", "1", "2", "3", "*", ".", "0", "=", "/", "C"};//设置按钮
for (int i = 0; i < 17; i++)//添加按钮
{
b[i] = new JButton(name[i]);
b[i].setBackground(new Color(192, 192, 192));
b[i].setForeground(Color.BLACK); //设置按键颜色
if (i % 4 == 3)
b[i].setForeground(Color.RED);//设置按键颜色
b[i].setFont(new Font("宋体", Font.PLAIN, 16));//设置字体格式
panel.add(b[i]);//将按键添加到界面
b[i].addActionListener(this);
}
panel1.add(b[16]);
b[16].setPreferredSize(new Dimension(65, 65)); b[13].setForeground(Color.RED);
} public void actionPerformed(ActionEvent e) {
int cnt = 0;
String actionCommand = e.getActionCommand();
if (actionCommand.equals("+") || actionCommand.equals("-") || actionCommand.equals("*") || actionCommand.equals("/"))
input += " " + actionCommand + " ";//设置输入,把输入的样式改成 需要的样子
else if (actionCommand.equals("C"))
input = "";
else if (actionCommand.equals("="))//当监听到等号时,则处理 input
{
input += "=" + compute(input);
textField.setText(input);
input = "";
cnt = 1;
} else
input += actionCommand;//数字为了避免多位数的输入 不需要加空格
if (cnt == 0)
textField.setText(input);
} /*使用栈对数据进行计算*/
private String compute(String input)//
{
String str[];
str = input.split(" ");
Stack<Double> s = new Stack<Double>();
double m = Double.parseDouble(str[0]);
s.push(m);
for (int i = 1; i < str.length; i++) {
if (i % 2 == 1) {
if (str[i].compareTo("+") == 0) {
double help = Double.parseDouble(str[i + 1]);
s.push(help);
}
if (str[i].compareTo("-") == 0) {
double help = Double.parseDouble(str[i + 1]);
s.push(-help);
}
if (str[i].compareTo("*") == 0) {
double help = Double.parseDouble(str[i + 1]);
double ans = s.peek();//取出栈顶元素
s.pop();//消栈
ans *= help;
s.push(ans);
}
if (str[i].compareTo("/") == 0) {
double help = Double.parseDouble(str[i + 1]);
double ans = s.peek();
s.pop();
ans /= help;
s.push(ans);
}
}
}
double ans = 0d;
while (!s.isEmpty()) {
ans += s.peek();
s.pop();
}
String result = String.valueOf(ans);
return result;
} public static void main(String args[]) {
JFrame frame = new JFrame("Counter");//创建顶级窗口
frame.setResizable(false);
Main applet = new Main();
frame.getContentPane().add(applet, BorderLayout.CENTER);
applet.init(); //applet的init方法
applet.start(); //线程开始
frame.setSize(400, 450); //设置窗口大小
frame.setVisible(true); //设置窗口可见
}
}
Java可视化计算器的更多相关文章
- JAVA 可视化分析工具 第12节
JAVA 可视化分析工具 第12节 经过前几章对堆内存以及垃圾收集机制的学习,相信小伙伴们已经建立了一套比较完整的理论体系!那么这章我们就根据已有的理论知识,通过可视化工具来实践一番. 我们今天要讲 ...
- 【JAVA】可视化计算器
import java.awt.Color; import java.awt.Font; import java.awt.GridLayout; import java.awt.event.Actio ...
- [java] 可视化日历的实现(基于Calendar类 )
写在前面 博文安排顺序如下 1.写在前面 2.源码 3.思路 4.相关知识 该小程序是对Date类及其相关类的复习 要求如下图:实现可视化日历 实现思路 1.先从键盘输入指定格式的字符串(str)2. ...
- java简单计算器
写的一个小计算器,留着以后看吧. import java.awt.BorderLayout; import java.awt.Button; import java.awt.Color; import ...
- Java可视化AWT
AWT 总体上Swing组件替代了绝大部分AWT组件,对AWT图形用户界面编程有极好的补充和加强. package ch11; import java.awt.*; /** * Created by ...
- java 学习 ——计算器小程序
简易计算器小程序代码: package jisuanqi; //声明须要插入的包 import java.awt.*; import java.lang.Object; import java.lan ...
- 【java图形计算器】 java awt swing组件应用
package package1; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swi ...
- Java可视化日历(Date类、DATe Format类、Calendar类综合运用),开发可视化日历小程序
Java时间日期类综合运用,开发可视化日历小程序 由键盘输入指定格式的日期,打印这个月的日历 1.代码 import java.text.DateFormat; import java.text.Pa ...
- Java可视化编程---SendMail工具的开发
介绍: SendMail是一款简便的163邮箱发件工具 利用了163的SMTP接口来发送邮件 版本号:SendMail v1.0 在编写发送邮件工具之前,还需要安装 JavaMail API 和Jav ...
随机推荐
- MySQL字符集、information_schema元数据(八)
一.SQL字符集 它是一个系统支持的所有抽象字符的集合.字符是各种文字和符号的总称,包括各国家的文字.标点符号.图形符号.数字等 常用的字符集有:utf8.utf8mb4.utf8mb3(8.0),现 ...
- angularjs中设置select的选中项
最近用angularjs比较多,里面有很多自己的方法,都不咋会用,这篇只是个笔记,防止自己忘记 <select style="width:100%" ng-model=&qu ...
- fiddler深入学习
参考:https://www.cnblogs.com/zhizhiyin/p/6807649.html http://blog.chinaunix.net/uid-27105712-id-373882 ...
- OpenCV 学习笔记(13)图像转换成视频
关键 1参数里的分辨率是图像本身的分辨率,而不是指定生成的视频分辨率.如果要修改分辨率,要么后期软件处理,要么读图的时候resize 2要正常退出,不要强制退出. 3生成的只能是avi格式. #inc ...
- epoll及实现http多任务(python)
1.epoll用到了文件描述符的概念: 首先,操作系统中一切皆文件 文件与文件描述符fd 文件是应用程序与系统(包括特定硬件设备)之间的桥梁,而文件描述符就是应用程序使用这个"桥梁" ...
- contest4 CF1091 div2 ooooxx ooooxx ooooox
题意 div2E 一个有\(n+1\)个点的无向图, 给出\(n\)个点的度数, 求出每一种可能的\(n+1\)的度数 (题面附带公式 graph realization problem)
- selenium--页面元素相关的操作
获取元素的标签和元素大小 from selenium import webdriver import unittest class Test_BasicInfo(unittest.TestCase): ...
- Java class 和public class 区别
1.类的访问权限 为了控制某个类的访问权限,修饰词必须出现在关键字class之前.例如:public class Student {} 在编写类的时候可以使用两种方式定义类: (A)pub ...
- node.js HTTP模块、URL 模块
在浏览器输入存在的网址的一个交互过程 1.用户通过浏览器发送一个http的请求到指定的主机 2.服务器接收到该请求,对该请求进行分析和处理 3.服务器处理完成以后,返回对应的数据到用户机器 4.浏览器 ...
- Java 集合系列之六:工具类Collections和Arrays基本操作
1. Collections Collections类主要是完成了两个主要功能 提供了若干简单而又有用的算法,比如排序,二分查找,求最大最小值等等. 提供对集合进行包装的静态方法.比如把指定的集合包装 ...