实验四 GUI实验
一、实验目的
练习面向对象的图形用户界面设计、界面布局、事件设计方法。
二、实验内容
Eclipse安装Windowsbuilder,创建图形用户界面设计的窗口以及设计框,通过在design窗口拖动按钮组件,source中自动生成相应代码,以此达成图形用户界面设计,以及通过不同模板,然后自己拖动进行界面布局,设计自己想要的计算器样式,最后对于每一个事件都可以设计方法来实现事件,完成实验目的。
三、实验设计
设计原理:采用Java Application方式建立应用程序框架,然后在框架中拖动组件直接生成图形用户界面代码,最后设计事件,完成计算器简单运算。
设计方法:在窗体上添加组件,直接生成代码,以此实现用户界面与布局,然后设置事件方法,来实现计算器的基本运算。
设计过程:建立窗口后,设计图形用户界面,然后修改界面布局,最后设计事件的实现方法。
设计结果:设计出基本的计算器的界面并且能进行连续整数的加、减、乘和除。
四、实验过程
1:通过Windowsbuilder能够创建图形用户界面的窗口,可以在源代码中更改窗口像素。
2:首先根据计算器的特点往窗口上添加一个文本框用来显示输入与输出。
3:再建立面板和面板1,面板用来放置功能(清空,减一位)按钮,面板1用来放置数字按钮以及计算符号。
4:接下来一一写出相关按钮的时间,直接在design界面双击按钮即可进入相应按钮的代码段,写出相关事件(方法)。
5:最后写出方法,总结一下,方法分为判断是否按压,符号选择执行加减运算,输入数字的显示以及结果的输出。
问题:最先写的时候,对于文本框添加了监听器,导致无法执行文本框的正常功能,输入的时候无法显示输入内容,对于实现数字运算的方法可能有问题,在最后进行计算的时候也显示输入的内容
解决方法:删除文本框的监听器,对于每一种事件重写代码,重新分析,发现在get的时候没有指定对于文本框,所以导致结果出错,无法显示。
五、实验结果
测试数据:(100+20-20)/5*3
实验的现象:
1:首先在窗口中输入100,在输入1的时候,1这个按钮的监听器监听到信号以后就会执行change(1)事件,在判断没有小数点的时候,直接将数字作为字符加在一起,接着执行change(0),change(0),这样就可以完成100的输入与显示。
2:接下来输入符号,应该是加号,直接按压加号按钮,加号按钮的监听器接收到信号会直接执行符号(+)方法,这里调用fuhao(+)函数,将输入的符号定义为oper,并且将前面的字符转换成数字num1,并且标记为按压了,那么接下来就可以执行后面的计算了。
3:同样的方法输入20,先按压2,执行change函数,再按压0,执行change函数。
4:按压=按钮,调用cal方法,标记按压了,并且把刚才按压的数字20转换成数字,在之前输入符号的时候,将符号定义为oper,这里通过Switch来选择执行相应的运算方法,并直接输出这部分运算的结果。
5:接下来同样的方法实现减法乘法,除法,直到完成计算,输出最后结果。这样就实现了计算器的简单实现
6:其他按钮,这里设置了两个按钮,一个是清空(CE),一个是删除一位(AC)。如果按压了CE,CE按钮的监听器检测到,就会执行相应事件,这里的事件就是直接将所有的字符转换成0。
7:AC按钮,定义ch为输入的字符,通过一个函数的方法直接减去字符的一位,然后在文本框中输出这个字符。
六、讨论与分析,
知识点理解:在图形用户界面最基础的就是建立界面,也就是简单地设计计算机显示界面以及设计功能按钮及数字按钮,这些直接拖动可后台生成代码,然后再做调整,完成页面布局,接着对于每个按钮设置监听器和事件来完成计算,并输出显示在文本框上面。
实验结果分析:首先输入的是符号之前的单个字符,直接针对每一个按钮调用change方法合在一起(100),然后转换成数字num1并显示在文本框。,然后输入符号,监听器监听到符号,就调用fuhao方法,标记输入的符号(+);接下来又按压按钮,调用change方法,输入一个字符串(20);然后按压=,调用Cal方法,将字符串(20)转换成数字num2,再switch选择实现加法,进行计算并将结果显示在文本框上面,然后继续进行下面的计算,知道计算出最后结果。
实验总结:本实验主要是按钮事件的事件委托模型及执行过程,设计调用事件来完成对每个按钮的设计,最后能够完成实验,计算出结果。
七、附录:关键代码(给出适当注释,可读性高)
package test;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.JPanel;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.SwingConstants;
public class Calculator {
private JFrame frame;
private JTextField txt;
double num1,num2;
char oper;
boolean isOperPressed=false;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Calculator window = new Calculator();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public Calculator() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
txt = new JTextField();
txt = new JTextField();
txt.setHorizontalAlignment(SwingConstants.LEFT);
txt.setBounds(28, 0, 372, 27);
frame.getContentPane().add(txt);
txt.setColumns(10);
JPanel panel = new JPanel();
panel.setBounds(25, 29, 67, 215);
frame.getContentPane().add(panel);
panel.setLayout(null);
JButton btnAc = new JButton("AC");
btnAc.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String ch=txt.getText();//定义ch为输入的字符
ch=ch.substring(0, ch.length()-1);//通过一个函数的方法直接减去字符的一位
txt.setText(ch);//然后在文本框中输出这个字符
}
});
btnAc.setBounds(0, 44, 67, 29);
panel.add(btnAc);
JButton btnNo = new JButton("CE");
btnNo.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
txt.setText("0");
}
});
btnNo.setBounds(0, 90, 67, 29);
panel.add(btnNo);
JButton btnNewButton_1 = new JButton("NO");
btnNewButton_1.setBounds(0, 134, 67, 29);
panel.add(btnNewButton_1);
JButton btnNewButton_2 = new JButton("NO");
btnNewButton_2.setBounds(0, 178, 67, 29);
panel.add(btnNewButton_2);
JPanel panel_1 = new JPanel();
panel_1.setBounds(131, 29, 282, 215);
frame.getContentPane().add(panel_1);
panel_1.setLayout(null);
JButton btnNewButton_3 = new JButton("*");
btnNewButton_3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
fuhao('*');
}
});
btnNewButton_3.setBounds(220, 136, 47, 29);
panel_1.add(btnNewButton_3);
JButton btnNewButton_4 = new JButton("/");
btnNewButton_4.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
fuhao('/');
}
});
btnNewButton_4.setBounds(220, 92, 47, 29);
panel_1.add(btnNewButton_4);
JButton btnNewButton_5 = new JButton("=");
btnNewButton_5.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
cal();
}
});
btnNewButton_5.setBounds(220, 44, 47, 29);
panel_1.add(btnNewButton_5);
JButton btnNewButton_6 = new JButton("+");//在窗口中建立加号按钮
btnNewButton_6.addActionListener(new ActionListener() {//加号按钮的监听器
public void actionPerformed(ActionEvent e) {
fuhao('+');//执行对应的事件方法
}
});
btnNewButton_6.setBounds(147, 180, 47, 29);
panel_1.add(btnNewButton_6);
JButton btnNewButton_7 = new JButton("-");
btnNewButton_7.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
fuhao('-');
}
});
btnNewButton_7.setBounds(220, 180, 47, 29);
panel_1.add(btnNewButton_7);
JButton btnNewButton_8 = new JButton("0");
btnNewButton_8.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
change("0");
}
});
btnNewButton_8.setBounds(0, 180, 47, 29);
panel_1.add(btnNewButton_8);
JButton btnNewButton_9 = new JButton("7");
btnNewButton_9.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
change("7");
}
});
btnNewButton_9.setBounds(0, 44, 47, 29);
panel_1.add(btnNewButton_9);
JButton btnNewButton_10 = new JButton("4");
btnNewButton_10.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
change("4");
}
});
btnNewButton_10.setBounds(0, 92, 47, 29);
panel_1.add(btnNewButton_10);
JButton btnNewButton_11 = new JButton("1");
btnNewButton_11.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
change("1");
}
});
btnNewButton_11.setBounds(0, 136, 47, 29);
panel_1.add(btnNewButton_11);
JButton btnNewButton_12 = new JButton("8");
btnNewButton_12.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
change("8");
}
});
btnNewButton_12.setBounds(72, 44, 47, 29);
panel_1.add(btnNewButton_12);
JButton btnNewButton_13 = new JButton("5");
btnNewButton_13.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
change("5");
}
});
btnNewButton_13.setBounds(72, 92, 47, 29);
panel_1.add(btnNewButton_13);
JButton btnNewButton_14 = new JButton("2");
btnNewButton_14.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
change("2");
}
});
btnNewButton_14.setBounds(72, 136, 47, 29);
panel_1.add(btnNewButton_14);
JButton btnNewButton_15 = new JButton("9");
btnNewButton_15.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
change("9");
}
});
btnNewButton_15.setBounds(147, 44, 47, 29);
panel_1.add(btnNewButton_15);
JButton btnNewButton_16 = new JButton("6");
btnNewButton_16.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
change("6");
}
});
btnNewButton_16.setBounds(147, 92, 47, 29);
panel_1.add(btnNewButton_16);
JButton btnNewButton_17 = new JButton("3");
btnNewButton_17.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
change("3");
}
});
btnNewButton_17.setBounds(147, 136, 47, 29);
panel_1.add(btnNewButton_17);
JButton button_1 = new JButton(".");
button_1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
change(".");
}
});
button_1.setBounds(72, 180, 47, 29);
panel_1.add(button_1);
}
private void change(String key) //声明一个方法,定义为private型,方法中定义一个字符串
{
if(isOperPressed)//如果按压按钮的话
{
txt.setText(key);//在文本框中显示按压的按钮key
isOperPressed = false;//输入按钮后就回复不按压的模式
}
else {//如果没有按压的话
String s= txt.getText();//将输入的字符串定义为s
if(s.equals("0")) //如果输入的字符是0
{
if(key.equals(".")) //并且输入一个小数点,
{
txt.setText(s+key);//直接字符串加在一起
}
else
txt.setText(key);//如果不是小数点,就直接显示key
}
else {
txt.setText(s+key);//如果输入的字符不是0也不是小数点,直接字符加在一起
}
}
}
private void cal() {
istrue();//按压了20标记istrue,表示按压了
num2 = Double.parseDouble(txt.getText());//然后把刚才按压的数字20转换成数字
switch(oper) {//在之前输入符号的时候,将符号定义为oper,这里通过Switch来选择执行相应的运算方法
case'+':
txt.setText(String.valueOf(num1+num2));
break;
case'-':
txt.setText(String.valueOf(num1-num2));
break;
case'*':
txt.setText(String.valueOf(num1*num2));
break;
case'/':
txt.setText(String.valueOf(num1/num2));
break;
}
}
private void fuhao(char key) {//定义符号方法为private型,并且定义一个字符key表示输入的符号
oper=key;
num1=Double.parseDouble(txt.getText());//之前输入的字符串(100)通过一个方法强制转换成数字num1
istrue();//表示按压了
}
private void istrue() {
isOperPressed = true;//如果按压了,isOperPressed 就是 true,然后才能执行下一个change
}
}
注:每个部分根据情况可以再分子标题,前提是层次清晰、逻辑性强。
实验四 GUI实验
一、实验目的
练习面向对象的图形用户界面设计、界面布局、事件设计方法。
二、实验内容
Eclipse安装Windowsbuilder,创建图形用户界面设计的窗口以及设计框,通过在design窗口拖动按钮组件,source中自动生成相应代码,以此达成图形用户界面设计,以及通过不同模板,然后自己拖动进行界面布局,设计自己想要的计算器样式,最后对于每一个事件都可以设计方法来实现事件,完成实验目的。
三、实验设计
设计原理:采用Java Application方式建立应用程序框架,然后在框架中拖动组件直接生成图形用户界面代码,最后设计事件,完成计算器简单运算。
设计方法:在窗体上添加组件,直接生成代码,以此实现用户界面与布局,然后设置事件方法,来实现计算器的基本运算。
设计过程:建立窗口后,设计图形用户界面,然后修改界面布局,最后设计事件的实现方法。
设计结果:设计出基本的计算器的界面并且能进行连续整数的加、减、乘和除。
四、实验过程
1:通过Windowsbuilder能够创建图形用户界面的窗口,可以在源代码中更改窗口像素。
2:首先根据计算器的特点往窗口上添加一个文本框用来显示输入与输出。
3:再建立面板和面板1,面板用来放置功能(清空,减一位)按钮,面板1用来放置数字按钮以及计算符号。
4:接下来一一写出相关按钮的时间,直接在design界面双击按钮即可进入相应按钮的代码段,写出相关事件(方法)。
5:最后写出方法,总结一下,方法分为判断是否按压,符号选择执行加减运算,输入数字的显示以及结果的输出。
问题:最先写的时候,对于文本框添加了监听器,导致无法执行文本框的正常功能,输入的时候无法显示输入内容,对于实现数字运算的方法可能有问题,在最后进行计算的时候也显示输入的内容
解决方法:删除文本框的监听器,对于每一种事件重写代码,重新分析,发现在get的时候没有指定对于文本框,所以导致结果出错,无法显示。
五、实验结果
测试数据:(100+20-20)/5*3
实验的现象:
1:首先在窗口中输入100,在输入1的时候,1这个按钮的监听器监听到信号以后就会执行change(1)事件,在判断没有小数点的时候,直接将数字作为字符加在一起,接着执行change(0),change(0),这样就可以完成100的输入与显示。
2:接下来输入符号,应该是加号,直接按压加号按钮,加号按钮的监听器接收到信号会直接执行符号(+)方法,这里调用fuhao(+)函数,将输入的符号定义为oper,并且将前面的字符转换成数字num1,并且标记为按压了,那么接下来就可以执行后面的计算了。
3:同样的方法输入20,先按压2,执行change函数,再按压0,执行change函数。
4:按压=按钮,调用cal方法,标记按压了,并且把刚才按压的数字20转换成数字,在之前输入符号的时候,将符号定义为oper,这里通过Switch来选择执行相应的运算方法,并直接输出这部分运算的结果。
5:接下来同样的方法实现减法乘法,除法,直到完成计算,输出最后结果。这样就实现了计算器的简单实现
6:其他按钮,这里设置了两个按钮,一个是清空(CE),一个是删除一位(AC)。如果按压了CE,CE按钮的监听器检测到,就会执行相应事件,这里的事件就是直接将所有的字符转换成0。
7:AC按钮,定义ch为输入的字符,通过一个函数的方法直接减去字符的一位,然后在文本框中输出这个字符。
六、讨论与分析,
知识点理解:在图形用户界面最基础的就是建立界面,也就是简单地设计计算机显示界面以及设计功能按钮及数字按钮,这些直接拖动可后台生成代码,然后再做调整,完成页面布局,接着对于每个按钮设置监听器和事件来完成计算,并输出显示在文本框上面。
实验结果分析:首先输入的是符号之前的单个字符,直接针对每一个按钮调用change方法合在一起(100),然后转换成数字num1并显示在文本框。,然后输入符号,监听器监听到符号,就调用fuhao方法,标记输入的符号(+);接下来又按压按钮,调用change方法,输入一个字符串(20);然后按压=,调用Cal方法,将字符串(20)转换成数字num2,再switch选择实现加法,进行计算并将结果显示在文本框上面,然后继续进行下面的计算,知道计算出最后结果。
实验总结:本实验主要是按钮事件的事件委托模型及执行过程,设计调用事件来完成对每个按钮的设计,最后能够完成实验,计算出结果。
七、附录:关键代码(给出适当注释,可读性高)
package test;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.JPanel;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.SwingConstants;
public class Calculator {
private JFrame frame;
private JTextField txt;
double num1,num2;
char oper;
boolean isOperPressed=false;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Calculator window = new Calculator();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public Calculator() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
txt = new JTextField();
txt = new JTextField();
txt.setHorizontalAlignment(SwingConstants.LEFT);
txt.setBounds(28, 0, 372, 27);
frame.getContentPane().add(txt);
txt.setColumns(10);
JPanel panel = new JPanel();
panel.setBounds(25, 29, 67, 215);
frame.getContentPane().add(panel);
panel.setLayout(null);
JButton btnAc = new JButton("AC");
btnAc.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String ch=txt.getText();//定义ch为输入的字符
ch=ch.substring(0, ch.length()-1);//通过一个函数的方法直接减去字符的一位
txt.setText(ch);//然后在文本框中输出这个字符
}
});
btnAc.setBounds(0, 44, 67, 29);
panel.add(btnAc);
JButton btnNo = new JButton("CE");
btnNo.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
txt.setText("0");
}
});
btnNo.setBounds(0, 90, 67, 29);
panel.add(btnNo);
JButton btnNewButton_1 = new JButton("NO");
btnNewButton_1.setBounds(0, 134, 67, 29);
panel.add(btnNewButton_1);
JButton btnNewButton_2 = new JButton("NO");
btnNewButton_2.setBounds(0, 178, 67, 29);
panel.add(btnNewButton_2);
JPanel panel_1 = new JPanel();
panel_1.setBounds(131, 29, 282, 215);
frame.getContentPane().add(panel_1);
panel_1.setLayout(null);
JButton btnNewButton_3 = new JButton("*");
btnNewButton_3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
fuhao('*');
}
});
btnNewButton_3.setBounds(220, 136, 47, 29);
panel_1.add(btnNewButton_3);
JButton btnNewButton_4 = new JButton("/");
btnNewButton_4.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
fuhao('/');
}
});
btnNewButton_4.setBounds(220, 92, 47, 29);
panel_1.add(btnNewButton_4);
JButton btnNewButton_5 = new JButton("=");
btnNewButton_5.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
cal();
}
});
btnNewButton_5.setBounds(220, 44, 47, 29);
panel_1.add(btnNewButton_5);
JButton btnNewButton_6 = new JButton("+");//在窗口中建立加号按钮
btnNewButton_6.addActionListener(new ActionListener() {//加号按钮的监听器
public void actionPerformed(ActionEvent e) {
fuhao('+');//执行对应的事件方法
}
});
btnNewButton_6.setBounds(147, 180, 47, 29);
panel_1.add(btnNewButton_6);
JButton btnNewButton_7 = new JButton("-");
btnNewButton_7.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
fuhao('-');
}
});
btnNewButton_7.setBounds(220, 180, 47, 29);
panel_1.add(btnNewButton_7);
JButton btnNewButton_8 = new JButton("0");
btnNewButton_8.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
change("0");
}
});
btnNewButton_8.setBounds(0, 180, 47, 29);
panel_1.add(btnNewButton_8);
JButton btnNewButton_9 = new JButton("7");
btnNewButton_9.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
change("7");
}
});
btnNewButton_9.setBounds(0, 44, 47, 29);
panel_1.add(btnNewButton_9);
JButton btnNewButton_10 = new JButton("4");
btnNewButton_10.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
change("4");
}
});
btnNewButton_10.setBounds(0, 92, 47, 29);
panel_1.add(btnNewButton_10);
JButton btnNewButton_11 = new JButton("1");
btnNewButton_11.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
change("1");
}
});
btnNewButton_11.setBounds(0, 136, 47, 29);
panel_1.add(btnNewButton_11);
JButton btnNewButton_12 = new JButton("8");
btnNewButton_12.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
change("8");
}
});
btnNewButton_12.setBounds(72, 44, 47, 29);
panel_1.add(btnNewButton_12);
JButton btnNewButton_13 = new JButton("5");
btnNewButton_13.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
change("5");
}
});
btnNewButton_13.setBounds(72, 92, 47, 29);
panel_1.add(btnNewButton_13);
JButton btnNewButton_14 = new JButton("2");
btnNewButton_14.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
change("2");
}
});
btnNewButton_14.setBounds(72, 136, 47, 29);
panel_1.add(btnNewButton_14);
JButton btnNewButton_15 = new JButton("9");
btnNewButton_15.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
change("9");
}
});
btnNewButton_15.setBounds(147, 44, 47, 29);
panel_1.add(btnNewButton_15);
JButton btnNewButton_16 = new JButton("6");
btnNewButton_16.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
change("6");
}
});
btnNewButton_16.setBounds(147, 92, 47, 29);
panel_1.add(btnNewButton_16);
JButton btnNewButton_17 = new JButton("3");
btnNewButton_17.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
change("3");
}
});
btnNewButton_17.setBounds(147, 136, 47, 29);
panel_1.add(btnNewButton_17);
JButton button_1 = new JButton(".");
button_1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
change(".");
}
});
button_1.setBounds(72, 180, 47, 29);
panel_1.add(button_1);
}
private void change(String key) //声明一个方法,定义为private型,方法中定义一个字符串
{
if(isOperPressed)//如果按压按钮的话
{
txt.setText(key);//在文本框中显示按压的按钮key
isOperPressed = false;//输入按钮后就回复不按压的模式
}
else {//如果没有按压的话
String s= txt.getText();//将输入的字符串定义为s
if(s.equals("0")) //如果输入的字符是0
{
if(key.equals(".")) //并且输入一个小数点,
{
txt.setText(s+key);//直接字符串加在一起
}
else
txt.setText(key);//如果不是小数点,就直接显示key
}
else {
txt.setText(s+key);//如果输入的字符不是0也不是小数点,直接字符加在一起
}
}
}
private void cal() {
istrue();//按压了20标记istrue,表示按压了
num2 = Double.parseDouble(txt.getText());//然后把刚才按压的数字20转换成数字
switch(oper) {//在之前输入符号的时候,将符号定义为oper,这里通过Switch来选择执行相应的运算方法
case'+':
txt.setText(String.valueOf(num1+num2));
break;
case'-':
txt.setText(String.valueOf(num1-num2));
break;
case'*':
txt.setText(String.valueOf(num1*num2));
break;
case'/':
txt.setText(String.valueOf(num1/num2));
break;
}
}
private void fuhao(char key) {//定义符号方法为private型,并且定义一个字符key表示输入的符号
oper=key;
num1=Double.parseDouble(txt.getText());//之前输入的字符串(100)通过一个方法强制转换成数字num1
istrue();//表示按压了
}
private void istrue() {
isOperPressed = true;//如果按压了,isOperPressed 就是 true,然后才能执行下一个change
}
}
注:每个部分根据情况可以再分子标题,前提是层次清晰、逻辑性强。
实验四 GUI实验
一、实验目的
练习面向对象的图形用户界面设计、界面布局、事件设计方法。
二、实验内容
Eclipse安装Windowsbuilder,创建图形用户界面设计的窗口以及设计框,通过在design窗口拖动按钮组件,source中自动生成相应代码,以此达成图形用户界面设计,以及通过不同模板,然后自己拖动进行界面布局,设计自己想要的计算器样式,最后对于每一个事件都可以设计方法来实现事件,完成实验目的。
三、实验设计
设计原理:采用Java Application方式建立应用程序框架,然后在框架中拖动组件直接生成图形用户界面代码,最后设计事件,完成计算器简单运算。
设计方法:在窗体上添加组件,直接生成代码,以此实现用户界面与布局,然后设置事件方法,来实现计算器的基本运算。
设计过程:建立窗口后,设计图形用户界面,然后修改界面布局,最后设计事件的实现方法。
设计结果:设计出基本的计算器的界面并且能进行连续整数的加、减、乘和除。
四、实验过程
1:通过Windowsbuilder能够创建图形用户界面的窗口,可以在源代码中更改窗口像素。
2:首先根据计算器的特点往窗口上添加一个文本框用来显示输入与输出。
3:再建立面板和面板1,面板用来放置功能(清空,减一位)按钮,面板1用来放置数字按钮以及计算符号。
4:接下来一一写出相关按钮的时间,直接在design界面双击按钮即可进入相应按钮的代码段,写出相关事件(方法)。
5:最后写出方法,总结一下,方法分为判断是否按压,符号选择执行加减运算,输入数字的显示以及结果的输出。
问题:最先写的时候,对于文本框添加了监听器,导致无法执行文本框的正常功能,输入的时候无法显示输入内容,对于实现数字运算的方法可能有问题,在最后进行计算的时候也显示输入的内容
解决方法:删除文本框的监听器,对于每一种事件重写代码,重新分析,发现在get的时候没有指定对于文本框,所以导致结果出错,无法显示。
五、实验结果
测试数据:(100+20-20)/5*3
实验的现象:
1:首先在窗口中输入100,在输入1的时候,1这个按钮的监听器监听到信号以后就会执行change(1)事件,在判断没有小数点的时候,直接将数字作为字符加在一起,接着执行change(0),change(0),这样就可以完成100的输入与显示。
2:接下来输入符号,应该是加号,直接按压加号按钮,加号按钮的监听器接收到信号会直接执行符号(+)方法,这里调用fuhao(+)函数,将输入的符号定义为oper,并且将前面的字符转换成数字num1,并且标记为按压了,那么接下来就可以执行后面的计算了。
3:同样的方法输入20,先按压2,执行change函数,再按压0,执行change函数。
4:按压=按钮,调用cal方法,标记按压了,并且把刚才按压的数字20转换成数字,在之前输入符号的时候,将符号定义为oper,这里通过Switch来选择执行相应的运算方法,并直接输出这部分运算的结果。
5:接下来同样的方法实现减法乘法,除法,直到完成计算,输出最后结果。这样就实现了计算器的简单实现
6:其他按钮,这里设置了两个按钮,一个是清空(CE),一个是删除一位(AC)。如果按压了CE,CE按钮的监听器检测到,就会执行相应事件,这里的事件就是直接将所有的字符转换成0。
7:AC按钮,定义ch为输入的字符,通过一个函数的方法直接减去字符的一位,然后在文本框中输出这个字符。
六、讨论与分析,
知识点理解:在图形用户界面最基础的就是建立界面,也就是简单地设计计算机显示界面以及设计功能按钮及数字按钮,这些直接拖动可后台生成代码,然后再做调整,完成页面布局,接着对于每个按钮设置监听器和事件来完成计算,并输出显示在文本框上面。
实验结果分析:首先输入的是符号之前的单个字符,直接针对每一个按钮调用change方法合在一起(100),然后转换成数字num1并显示在文本框。,然后输入符号,监听器监听到符号,就调用fuhao方法,标记输入的符号(+);接下来又按压按钮,调用change方法,输入一个字符串(20);然后按压=,调用Cal方法,将字符串(20)转换成数字num2,再switch选择实现加法,进行计算并将结果显示在文本框上面,然后继续进行下面的计算,知道计算出最后结果。
实验总结:本实验主要是按钮事件的事件委托模型及执行过程,设计调用事件来完成对每个按钮的设计,最后能够完成实验,计算出结果。
七、附录:关键代码(给出适当注释,可读性高)
package test;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.JPanel;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.SwingConstants;
public class Calculator {
private JFrame frame;
private JTextField txt;
double num1,num2;
char oper;
boolean isOperPressed=false;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Calculator window = new Calculator();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public Calculator() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
txt = new JTextField();
txt = new JTextField();
txt.setHorizontalAlignment(SwingConstants.LEFT);
txt.setBounds(28, 0, 372, 27);
frame.getContentPane().add(txt);
txt.setColumns(10);
JPanel panel = new JPanel();
panel.setBounds(25, 29, 67, 215);
frame.getContentPane().add(panel);
panel.setLayout(null);
JButton btnAc = new JButton("AC");
btnAc.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String ch=txt.getText();//定义ch为输入的字符
ch=ch.substring(0, ch.length()-1);//通过一个函数的方法直接减去字符的一位
txt.setText(ch);//然后在文本框中输出这个字符
}
});
btnAc.setBounds(0, 44, 67, 29);
panel.add(btnAc);
JButton btnNo = new JButton("CE");
btnNo.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
txt.setText("0");
}
});
btnNo.setBounds(0, 90, 67, 29);
panel.add(btnNo);
JButton btnNewButton_1 = new JButton("NO");
btnNewButton_1.setBounds(0, 134, 67, 29);
panel.add(btnNewButton_1);
JButton btnNewButton_2 = new JButton("NO");
btnNewButton_2.setBounds(0, 178, 67, 29);
panel.add(btnNewButton_2);
JPanel panel_1 = new JPanel();
panel_1.setBounds(131, 29, 282, 215);
frame.getContentPane().add(panel_1);
panel_1.setLayout(null);
JButton btnNewButton_3 = new JButton("*");
btnNewButton_3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
fuhao('*');
}
});
btnNewButton_3.setBounds(220, 136, 47, 29);
panel_1.add(btnNewButton_3);
JButton btnNewButton_4 = new JButton("/");
btnNewButton_4.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
fuhao('/');
}
});
btnNewButton_4.setBounds(220, 92, 47, 29);
panel_1.add(btnNewButton_4);
JButton btnNewButton_5 = new JButton("=");
btnNewButton_5.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
cal();
}
});
btnNewButton_5.setBounds(220, 44, 47, 29);
panel_1.add(btnNewButton_5);
JButton btnNewButton_6 = new JButton("+");//在窗口中建立加号按钮
btnNewButton_6.addActionListener(new ActionListener() {//加号按钮的监听器
public void actionPerformed(ActionEvent e) {
fuhao('+');//执行对应的事件方法
}
});
btnNewButton_6.setBounds(147, 180, 47, 29);
panel_1.add(btnNewButton_6);
JButton btnNewButton_7 = new JButton("-");
btnNewButton_7.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
fuhao('-');
}
});
btnNewButton_7.setBounds(220, 180, 47, 29);
panel_1.add(btnNewButton_7);
JButton btnNewButton_8 = new JButton("0");
btnNewButton_8.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
change("0");
}
});
btnNewButton_8.setBounds(0, 180, 47, 29);
panel_1.add(btnNewButton_8);
JButton btnNewButton_9 = new JButton("7");
btnNewButton_9.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
change("7");
}
});
btnNewButton_9.setBounds(0, 44, 47, 29);
panel_1.add(btnNewButton_9);
JButton btnNewButton_10 = new JButton("4");
btnNewButton_10.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
change("4");
}
});
btnNewButton_10.setBounds(0, 92, 47, 29);
panel_1.add(btnNewButton_10);
JButton btnNewButton_11 = new JButton("1");
btnNewButton_11.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
change("1");
}
});
btnNewButton_11.setBounds(0, 136, 47, 29);
panel_1.add(btnNewButton_11);
JButton btnNewButton_12 = new JButton("8");
btnNewButton_12.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
change("8");
}
});
btnNewButton_12.setBounds(72, 44, 47, 29);
panel_1.add(btnNewButton_12);
JButton btnNewButton_13 = new JButton("5");
btnNewButton_13.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
change("5");
}
});
btnNewButton_13.setBounds(72, 92, 47, 29);
panel_1.add(btnNewButton_13);
JButton btnNewButton_14 = new JButton("2");
btnNewButton_14.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
change("2");
}
});
btnNewButton_14.setBounds(72, 136, 47, 29);
panel_1.add(btnNewButton_14);
JButton btnNewButton_15 = new JButton("9");
btnNewButton_15.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
change("9");
}
});
btnNewButton_15.setBounds(147, 44, 47, 29);
panel_1.add(btnNewButton_15);
JButton btnNewButton_16 = new JButton("6");
btnNewButton_16.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
change("6");
}
});
btnNewButton_16.setBounds(147, 92, 47, 29);
panel_1.add(btnNewButton_16);
JButton btnNewButton_17 = new JButton("3");
btnNewButton_17.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
change("3");
}
});
btnNewButton_17.setBounds(147, 136, 47, 29);
panel_1.add(btnNewButton_17);
JButton button_1 = new JButton(".");
button_1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
change(".");
}
});
button_1.setBounds(72, 180, 47, 29);
panel_1.add(button_1);
}
private void change(String key) //声明一个方法,定义为private型,方法中定义一个字符串
{
if(isOperPressed)//如果按压按钮的话
{
txt.setText(key);//在文本框中显示按压的按钮key
isOperPressed = false;//输入按钮后就回复不按压的模式
}
else {//如果没有按压的话
String s= txt.getText();//将输入的字符串定义为s
if(s.equals("0")) //如果输入的字符是0
{
if(key.equals(".")) //并且输入一个小数点,
{
txt.setText(s+key);//直接字符串加在一起
}
else
txt.setText(key);//如果不是小数点,就直接显示key
}
else {
txt.setText(s+key);//如果输入的字符不是0也不是小数点,直接字符加在一起
}
}
}
private void cal() {
istrue();//按压了20标记istrue,表示按压了
num2 = Double.parseDouble(txt.getText());//然后把刚才按压的数字20转换成数字
switch(oper) {//在之前输入符号的时候,将符号定义为oper,这里通过Switch来选择执行相应的运算方法
case'+':
txt.setText(String.valueOf(num1+num2));
break;
case'-':
txt.setText(String.valueOf(num1-num2));
break;
case'*':
txt.setText(String.valueOf(num1*num2));
break;
case'/':
txt.setText(String.valueOf(num1/num2));
break;
}
}
private void fuhao(char key) {//定义符号方法为private型,并且定义一个字符key表示输入的符号
oper=key;
num1=Double.parseDouble(txt.getText());//之前输入的字符串(100)通过一个方法强制转换成数字num1
istrue();//表示按压了
}
private void istrue() {
isOperPressed = true;//如果按压了,isOperPressed 就是 true,然后才能执行下一个change
}
}
注:每个部分根据情况可以再分子标题,前提是层次清晰、逻辑性强。
实验四 GUI实验
一、实验目的
练习面向对象的图形用户界面设计、界面布局、事件设计方法。
二、实验内容
Eclipse安装Windowsbuilder,创建图形用户界面设计的窗口以及设计框,通过在design窗口拖动按钮组件,source中自动生成相应代码,以此达成图形用户界面设计,以及通过不同模板,然后自己拖动进行界面布局,设计自己想要的计算器样式,最后对于每一个事件都可以设计方法来实现事件,完成实验目的。
三、实验设计
设计原理:采用Java Application方式建立应用程序框架,然后在框架中拖动组件直接生成图形用户界面代码,最后设计事件,完成计算器简单运算。
设计方法:在窗体上添加组件,直接生成代码,以此实现用户界面与布局,然后设置事件方法,来实现计算器的基本运算。
设计过程:建立窗口后,设计图形用户界面,然后修改界面布局,最后设计事件的实现方法。
设计结果:设计出基本的计算器的界面并且能进行连续整数的加、减、乘和除。
四、实验过程
1:通过Windowsbuilder能够创建图形用户界面的窗口,可以在源代码中更改窗口像素。
2:首先根据计算器的特点往窗口上添加一个文本框用来显示输入与输出。
3:再建立面板和面板1,面板用来放置功能(清空,减一位)按钮,面板1用来放置数字按钮以及计算符号。
4:接下来一一写出相关按钮的时间,直接在design界面双击按钮即可进入相应按钮的代码段,写出相关事件(方法)。
5:最后写出方法,总结一下,方法分为判断是否按压,符号选择执行加减运算,输入数字的显示以及结果的输出。
问题:最先写的时候,对于文本框添加了监听器,导致无法执行文本框的正常功能,输入的时候无法显示输入内容,对于实现数字运算的方法可能有问题,在最后进行计算的时候也显示输入的内容
解决方法:删除文本框的监听器,对于每一种事件重写代码,重新分析,发现在get的时候没有指定对于文本框,所以导致结果出错,无法显示。
五、实验结果
测试数据:(100+20-20)/5*3
实验的现象:
1:首先在窗口中输入100,在输入1的时候,1这个按钮的监听器监听到信号以后就会执行change(1)事件,在判断没有小数点的时候,直接将数字作为字符加在一起,接着执行change(0),change(0),这样就可以完成100的输入与显示。
2:接下来输入符号,应该是加号,直接按压加号按钮,加号按钮的监听器接收到信号会直接执行符号(+)方法,这里调用fuhao(+)函数,将输入的符号定义为oper,并且将前面的字符转换成数字num1,并且标记为按压了,那么接下来就可以执行后面的计算了。
3:同样的方法输入20,先按压2,执行change函数,再按压0,执行change函数。
4:按压=按钮,调用cal方法,标记按压了,并且把刚才按压的数字20转换成数字,在之前输入符号的时候,将符号定义为oper,这里通过Switch来选择执行相应的运算方法,并直接输出这部分运算的结果。
5:接下来同样的方法实现减法乘法,除法,直到完成计算,输出最后结果。这样就实现了计算器的简单实现
6:其他按钮,这里设置了两个按钮,一个是清空(CE),一个是删除一位(AC)。如果按压了CE,CE按钮的监听器检测到,就会执行相应事件,这里的事件就是直接将所有的字符转换成0。
7:AC按钮,定义ch为输入的字符,通过一个函数的方法直接减去字符的一位,然后在文本框中输出这个字符。
六、讨论与分析,
知识点理解:在图形用户界面最基础的就是建立界面,也就是简单地设计计算机显示界面以及设计功能按钮及数字按钮,这些直接拖动可后台生成代码,然后再做调整,完成页面布局,接着对于每个按钮设置监听器和事件来完成计算,并输出显示在文本框上面。
实验结果分析:首先输入的是符号之前的单个字符,直接针对每一个按钮调用change方法合在一起(100),然后转换成数字num1并显示在文本框。,然后输入符号,监听器监听到符号,就调用fuhao方法,标记输入的符号(+);接下来又按压按钮,调用change方法,输入一个字符串(20);然后按压=,调用Cal方法,将字符串(20)转换成数字num2,再switch选择实现加法,进行计算并将结果显示在文本框上面,然后继续进行下面的计算,知道计算出最后结果。
实验总结:本实验主要是按钮事件的事件委托模型及执行过程,设计调用事件来完成对每个按钮的设计,最后能够完成实验,计算出结果。
七、附录:关键代码(给出适当注释,可读性高)
package test;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.JPanel;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.SwingConstants;
public class Calculator {
private JFrame frame;
private JTextField txt;
double num1,num2;
char oper;
boolean isOperPressed=false;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Calculator window = new Calculator();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public Calculator() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
txt = new JTextField();
txt = new JTextField();
txt.setHorizontalAlignment(SwingConstants.LEFT);
txt.setBounds(28, 0, 372, 27);
frame.getContentPane().add(txt);
txt.setColumns(10);
JPanel panel = new JPanel();
panel.setBounds(25, 29, 67, 215);
frame.getContentPane().add(panel);
panel.setLayout(null);
JButton btnAc = new JButton("AC");
btnAc.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String ch=txt.getText();//定义ch为输入的字符
ch=ch.substring(0, ch.length()-1);//通过一个函数的方法直接减去字符的一位
txt.setText(ch);//然后在文本框中输出这个字符
}
});
btnAc.setBounds(0, 44, 67, 29);
panel.add(btnAc);
JButton btnNo = new JButton("CE");
btnNo.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
txt.setText("0");
}
});
btnNo.setBounds(0, 90, 67, 29);
panel.add(btnNo);
JButton btnNewButton_1 = new JButton("NO");
btnNewButton_1.setBounds(0, 134, 67, 29);
panel.add(btnNewButton_1);
JButton btnNewButton_2 = new JButton("NO");
btnNewButton_2.setBounds(0, 178, 67, 29);
panel.add(btnNewButton_2);
JPanel panel_1 = new JPanel();
panel_1.setBounds(131, 29, 282, 215);
frame.getContentPane().add(panel_1);
panel_1.setLayout(null);
JButton btnNewButton_3 = new JButton("*");
btnNewButton_3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
fuhao('*');
}
});
btnNewButton_3.setBounds(220, 136, 47, 29);
panel_1.add(btnNewButton_3);
JButton btnNewButton_4 = new JButton("/");
btnNewButton_4.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
fuhao('/');
}
});
btnNewButton_4.setBounds(220, 92, 47, 29);
panel_1.add(btnNewButton_4);
JButton btnNewButton_5 = new JButton("=");
btnNewButton_5.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
cal();
}
});
btnNewButton_5.setBounds(220, 44, 47, 29);
panel_1.add(btnNewButton_5);
JButton btnNewButton_6 = new JButton("+");//在窗口中建立加号按钮
btnNewButton_6.addActionListener(new ActionListener() {//加号按钮的监听器
public void actionPerformed(ActionEvent e) {
fuhao('+');//执行对应的事件方法
}
});
btnNewButton_6.setBounds(147, 180, 47, 29);
panel_1.add(btnNewButton_6);
JButton btnNewButton_7 = new JButton("-");
btnNewButton_7.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
fuhao('-');
}
});
btnNewButton_7.setBounds(220, 180, 47, 29);
panel_1.add(btnNewButton_7);
JButton btnNewButton_8 = new JButton("0");
btnNewButton_8.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
change("0");
}
});
btnNewButton_8.setBounds(0, 180, 47, 29);
panel_1.add(btnNewButton_8);
JButton btnNewButton_9 = new JButton("7");
btnNewButton_9.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
change("7");
}
});
btnNewButton_9.setBounds(0, 44, 47, 29);
panel_1.add(btnNewButton_9);
JButton btnNewButton_10 = new JButton("4");
btnNewButton_10.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
change("4");
}
});
btnNewButton_10.setBounds(0, 92, 47, 29);
panel_1.add(btnNewButton_10);
JButton btnNewButton_11 = new JButton("1");
btnNewButton_11.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
change("1");
}
});
btnNewButton_11.setBounds(0, 136, 47, 29);
panel_1.add(btnNewButton_11);
JButton btnNewButton_12 = new JButton("8");
btnNewButton_12.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
change("8");
}
});
btnNewButton_12.setBounds(72, 44, 47, 29);
panel_1.add(btnNewButton_12);
JButton btnNewButton_13 = new JButton("5");
btnNewButton_13.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
change("5");
}
});
btnNewButton_13.setBounds(72, 92, 47, 29);
panel_1.add(btnNewButton_13);
JButton btnNewButton_14 = new JButton("2");
btnNewButton_14.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
change("2");
}
});
btnNewButton_14.setBounds(72, 136, 47, 29);
panel_1.add(btnNewButton_14);
JButton btnNewButton_15 = new JButton("9");
btnNewButton_15.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
change("9");
}
});
btnNewButton_15.setBounds(147, 44, 47, 29);
panel_1.add(btnNewButton_15);
JButton btnNewButton_16 = new JButton("6");
btnNewButton_16.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
change("6");
}
});
btnNewButton_16.setBounds(147, 92, 47, 29);
panel_1.add(btnNewButton_16);
JButton btnNewButton_17 = new JButton("3");
btnNewButton_17.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
change("3");
}
});
btnNewButton_17.setBounds(147, 136, 47, 29);
panel_1.add(btnNewButton_17);
JButton button_1 = new JButton(".");
button_1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
change(".");
}
});
button_1.setBounds(72, 180, 47, 29);
panel_1.add(button_1);
}
private void change(String key) //声明一个方法,定义为private型,方法中定义一个字符串
{
if(isOperPressed)//如果按压按钮的话
{
txt.setText(key);//在文本框中显示按压的按钮key
isOperPressed = false;//输入按钮后就回复不按压的模式
}
else {//如果没有按压的话
String s= txt.getText();//将输入的字符串定义为s
if(s.equals("0")) //如果输入的字符是0
{
if(key.equals(".")) //并且输入一个小数点,
{
txt.setText(s+key);//直接字符串加在一起
}
else
txt.setText(key);//如果不是小数点,就直接显示key
}
else {
txt.setText(s+key);//如果输入的字符不是0也不是小数点,直接字符加在一起
}
}
}
private void cal() {
istrue();//按压了20标记istrue,表示按压了
num2 = Double.parseDouble(txt.getText());//然后把刚才按压的数字20转换成数字
switch(oper) {//在之前输入符号的时候,将符号定义为oper,这里通过Switch来选择执行相应的运算方法
case'+':
txt.setText(String.valueOf(num1+num2));
break;
case'-':
txt.setText(String.valueOf(num1-num2));
break;
case'*':
txt.setText(String.valueOf(num1*num2));
break;
case'/':
txt.setText(String.valueOf(num1/num2));
break;
}
}
private void fuhao(char key) {//定义符号方法为private型,并且定义一个字符key表示输入的符号
oper=key;
num1=Double.parseDouble(txt.getText());//之前输入的字符串(100)通过一个方法强制转换成数字num1
istrue();//表示按压了
}
private void istrue() {
isOperPressed = true;//如果按压了,isOperPressed 就是 true,然后才能执行下一个change
}
}
注:每个部分根据情况可以再分子标题,前提是层次清晰、逻辑性强。