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 Install--CentOS 7配置MySQL服务和开启启动
创建MySQL服务 编辑文件: vim /usr/lib/systemd/system/mysql.service 录入下面内容: PS: 注意修改ExecStart脚本 [Unit]Descript ...
- MySql || 快速创建100w条记录
平时每个开发者都会讨论数据量大时,sql的优化问题.但是并不是每个人都会有100w的数据量可以用来实战,那么今天我们就自己动手,模拟一个100w数据量的表. 创建原理 其实创建的方法有很多,有快的也有 ...
- 重新编译kubeadm,修改默认证书时间
参考 kubeadm alpha certs renew Kubeadm1.14 证书调整 kubeadm 部署的 kubernetes 集群,默认的证书有效时间是1年,需要每年手工更新. 1. 重新 ...
- dapi 基于Django的轻量级测试平台六 怎样使用压测功能
QQ群: GitHub:https://github.com/yjlch1016/dapi JMeter非GUI模式下: jmeter -n -t jmx脚本 -l jtl文件 -e -o 测试报告目 ...
- WTL 9.0的变化 - atlcrack.h
atlcrack.h中是一些对消息映射的简化,9.0版本中只增加了一个WM_MOUSEWHEEL的响应,而且要求windows vista. #if (_WIN32_WINNT >= 0x060 ...
- cordova 一个将web应用程序封装成app的框架
cordova的详细介绍请参考这个链接:http://www.zhoujingen.cn/blog/7034.html 我接下来主要将如何搭建. 1.首先你需要下载几样东西 1.jdk. 2.andr ...
- maven 配置参数详解
引自:搬砖工的奋斗史www.cnblogs.com/laobiao/p/5589025.html <project xmlns="http://maven.apache.org/POM ...
- Java反射之Bean修改更新属性值等工具类
package com.bocean.util; import java.lang.annotation.Annotation; import java.lang.reflect.Field; imp ...
- 面向对象高级A(反射,拦截方法)
一等公民:只要可以把一个东西赋值给一个变量,这个东西就叫一等公民 断点调试 在想要加断点的地方用鼠标点击一下,会看到一个红色圆圈 变红的地方,程序执行到,就会暂停 断点应该加在报错之前,在错误代码上放 ...
- ubuntu下vi/vim 的基本用法
https://blog.csdn.net/weixin_37657720/article/details/80645991 :q! 不保存强制推出. :wq 保存并退出.