文章目录
- 计算器的创建
- 1.可视化界面开发流程
- 2.创建一个计算器界面
- (1)布局
- (2)组件
- 3.添加监听
- 基本思想补充:
- 其余补充
计算器的创建
1.可视化界面开发流程
(1)开发流程:想要用java开发一个可视化界面的窗口,首先我们得知道一个基本的开发流程
//1.创建一个窗体对象
//窗体就是可视化的窗口,必须要有才可以显示
//JPanel是一个面板,上面可以放组价,需要放在窗体上。当布局时可看做一个组件
//2.设置窗体对象的属性
//设置窗口的标题
//设置窗口的大小(宽,高)
//设置窗口的默认关闭形式
//设置窗口可视(如果有组件,最好放到添加玩组件之后,要不然初次刷新出不来组件)
//*设置窗口布局
//3.创建组件添加到窗口中
//创建组件
//设置组件属性
//将组件添加到窗口
(2)所需要的包和其中的内容
java.awt — java早期界面开发工具 包括一些规则性的类:颜色,字体,大小,布局
javax.swing — 升级之后的工具包 包括基本的组件类
2.创建一个计算器界面
按照上面的开发流程,创建一个计算器的界面
public static void main(String[] args){
//1.创建一个窗体对象
JFrame jf = new JFrame();
//2.设置窗体对象的属性
//设置窗口的标题
jf.setTitle("computer");
//设置窗口的大小
jf.setSize(860,960);
//设置窗口的默认关闭形式
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//*设置窗口布局
FlowLayout fl = new FlowLayout();
jf.setLayout(fl);
//3.创建组件添加到窗口中(此处以btn1为例,其余类此)
//创建组件
String result = "";
JLabel lab = new JLabel(result);
//设置组件属性
Font f=new Font(Font.DIALOG,Font.BOLD,40);
Dimension d = new Dimension(800,80);
//组件大小设置
lab.setPreferredSize(d);
//设置字体
lab.setFont(f);
//添加边框
lab.setBorder(BorderFactory.createLineBorder(new Color(0, 0, 0)));
//调整底色
lab.setOpaque(true);
lab.setBackground(Color.white);
//将组件添加到窗口
jf.add(lab);
//按钮添加
String btn_name = "123+456-789*0C=/";
JButton[] btn = new JButton[16];
Dimension btnd = new Dimension(200,200);
for(int i=0;i<16;i++)
{
char x = btn_name.charAt(i);
//x必须是String类型,不能是char
btn[i]=new JButton(x+"");
btn[i].setName(x+"");
btn[i].setPreferredSize(btnd);
btn[i].setFont(f);
jf.add(btn[i]);
}
//设置窗口可视
jf.setVisible(true);
}
到此处位置,整个界面的布局完成,得到效果图如下:
(1)布局
ps:只对这次计算器用到的布局作解释,其余更多需继续查找资料
整个界面采用的流式布局
//*设置窗口布局
FlowLayout fl = new FlowLayout();
jf.setLayout(fl);
该布局根据界面和组件的大小自动从左到右,从上到下布局。使用该布局时需要自己主要界面和组件的大小,据此调整位置
(2)组件
ps:只对这次计算器用到的组件作解释,其余更多需继续查找资料
- JLabel标签
JLabel lab = new JLabel(x);
x为一个字符串或者字符串变量,显示在标签中
- JButton
JButton btn1 = new JButton("");
" "内为按钮中显示的内容
- 设置属性(以JLabel标签为例)
//组件大小设置
Dimension btnd = new Dimension(200,200);
lab.setPreferredSize(d);
//设置字体
Font f=new Font(Font.DIALOG,Font.BOLD,40);
lab.setFont(f);
//添加边框
lab.setBorder(BorderFactory.createLineBorder(new Color(0, 0, 0)));
//调整底色
lab.setOpaque(true);
lab.setBackground(Color.white);
3.添加监听
(1)创建监听类实现接口
实现接口需重写接口中的所有类
public class ComputerLisener implements ActionListener{
public void actionPerformed(ActionEvent e){
System.out.print("正在计算中");
}
}
(2)创建监听类对象
//创建监听器
ComputerLisener ul = new ComputerLisener();
(3)监听
//组件加入监听
for(int i=0;i<16;i++)
{
btn[i].addActionListener(ul);
}
//设置一个储存数字的数组和一个储存符号的数组(全局变量)
ArrayList<String> num = new ArrayList<String>();
int count_num = 0;
ArrayList<String> sym = new ArrayList<String>();
int count_sym = 0;
//获取组件,得到组件设置的name
JButton tf = (JButton)e.getSource();
String name = tf.getName();
//进行逻辑判断
//归零
if(name.equals("C"))
{
show="";
count_num = 0;
count_sym = 0;
num.clear();
sym.clear();
}
//输入的是数字,将其加入数字数组
else if (name.equals("1")||name.equals("2")||name.equals("3")||name.equals("4")||name.equals("5")||name.equals("6")||name.equals("7")||name.equals("8")||name.equals("9")||name.equals("0")){
show+=name;
num.add(name);
count_num++;
}
//输入的是符号,将其加入符号数组
else if(name.equals("+")||name.equals("-")||name.equals("*")||name.equals("/")){
show=show+name;
sym.add(name);
count_sym++;
System.out.println("count_sym:"+count_sym);
}
//按下=时进行计算
else if(name.equals("=")){
//先看有没有乘除(此处只给出了乘法判断,其余计算类似)
for(int i=0;i<count_sym;i++)
{
String temp_sym = sym.get(i);
System.out.println("temp_sym:"+temp_sym);
if(temp_sym.equals("*"))
{
System.out.println("乘法进行中...");
int temp_num1 = Integer.parseInt(num.get(i));
int temp_num2 = Integer.parseInt(num.get(i+1));
System.out.println("1:"+temp_num1);
System.out.println("2:"+temp_num2);
String temp_result = Integer.toString(temp_num1*temp_num2);
num.set(i,temp_result);
System.out.println("结果:"+temp_result);
num.remove(i+1);
sym.remove(i);
i--;
count_sym--;
count_num--;
}
else if(temp_sym.equals("/"))
{
System.out.println("除法进行中...");
if(num.get(i+1).equals("0"))
{
System.out.println("不能除以0");
error = 1;
}
System.out.println("show:"+show);
//将其输出
jl.setText(show);
基本思想补充:
1.类中是用来初始化的,不能有逻辑判断,要放到方法里
其余补充
1.专业名词对于的英文(用于查看报错信息):
项目 project
方法 method
函数 function
属性 文件属性 Attributes 系统属性 Property
类 class
接口 interface
抽象类 abstract
枚举类 Enumeration
调用 invoke/call
递归 recursion
动态规划 dynamic programming
继承 inheritance
实例 instance
迭代器 iterator
监听器 listener