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 ...
随机推荐
- spring boot缓存excel临时文件后再操作
1. 引入poi的两个依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi ...
- DF1协议简述
DF1协议 1. 概述 可编程控制器(PLC)因编程方便,抗干扰能力强,被广泛应用于各种领域.DF1协议是AB公司可编程控制器系统广泛支持的数据链路层通信协议,各系列可编程控制器及装有RSLin ...
- Flask拾遗总汇1
目录 1.flask的路由分发方式 2.请求响应相关 3.flask配置文件拾遗(config) 4.路由系统参数配置 4.1 可传入参数: 4.2 常用路由系统有以上五 5.反向生成URL: url ...
- properties文件属性值通过xml文件为 java entity属性赋值
一.通过xml配置文件进行赋值: 举个栗子,一目了然: 1.1 properties文件: 1.2 xml配置文件,将properties属性与java entity属性相关联:(这是一个新建的xml ...
- git常用命令(测试必备)
什么是git 百度百科:Git(读音为/gɪt/)是一个开源的分布式版本控制系统,可以有效.高速地处理从很小到非常大的项目版本管理. git相对svn,有很多优势,这里就不再赘述,大家网上搜索吧. g ...
- JSOI 2010 连通数
洛谷 P4306 [JSOI2010]连通数 洛谷传送门 题目描述 度量一个有向图联通情况的一个指标是连通数,指图中可达顶点对个的个数. 如图 顶点 11 可达 1,~2,~3,~4,~51, 2, ...
- LA 4998简单加密游戏 —— 自相似性质&&不动点迭代
题意 输入正整数 $K_1$($K_1 \leq 50000$),找一个12为正整数 $K_2$(不能含有前导0)使得 ${K_1}^{K_2} \equiv K_2(mod \ {10}^{12}) ...
- Asp.Net报https请求报传输流收到意外的 EOF 或 0 个字节
网上搜索,都说是.net framework版本太低,改为.net 4.5以上版本即可.于是使用vs2017环境测试了下,使用.net framework4.5版本确实可以正常返回结果,低于这个版本就 ...
- Qt常用类——QFrame类与QWidge类
QFrame与QWidget的区别: QFrame是基本控件的基类,QWidget是QFrame基类. QWidget类是所有用户界面对象的基类. Widget是用户界面的基本单元:它从窗口系统接收鼠 ...
- CSS3实现PS中的蚁行线动画以及画布的马赛克背景图
话不多说,先看例子,外链 效果截图如下: 蚁行线 马赛克背景 代码: 蚁行线代码如下: /* <!-- HTML代码 --> <div class="ant"&g ...