[java]代码库
1.主程序
package s1125计算器界面;
import java.awt.Dimension;
import java.awt.FlowLayout;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
public class Main1125 extends JFrame {
public static void main(String[] args) {
new Main1125().showjiemian(); // 出现验证界面
}
// ************************************************************************************//
// 计算器主界面
public void showframe() {
this.setTitle("计算器"); // 设置窗体的标题
this.setSize(340, 500);// 设置窗体的大小
this.setDefaultCloseOperation(3);// 设置关闭的方式
this.setLocationRelativeTo(null);// 设置窗体出现在屏幕中间
this.setResizable(false);// 设置窗体不可改变大小
this.setLayout(new FlowLayout());// 设置窗体为空布局
JTextField jtf1 = new JTextField(); // 创建结果文本框对象
jtf1.setPreferredSize(new Dimension(300, 50));// 编辑文本框大小
jtf1.setEditable(false); // 不可调文本框大小
jtf1.setHorizontalAlignment(JTextField.RIGHT);// 文本框向右排序
jtf1.setText("");
JTextField jtf = new JTextField(); // 创建输入的文本框对象
jtf.setPreferredSize(new Dimension(300, 50)); // 编辑文本框大小
jtf.setEditable(false); // 不可调文本框大小
jtf.setHorizontalAlignment(JTextField.RIGHT); // 文本框向右排序
jtf.setText("0");
this.add(jtf1);
this.add(jtf);
// 建一个事件处理类l
CalListener l = new CalListener();
l.setJtf(jtf, jtf1);
// 界面按钮
String[] array = { "←", "ANS", "CE", "C", "7", "8", "9", "+", "4", "5",
"6", "-", "1", "2", "3", "×", "0", ".", "÷", "=" };
// 设置界面按钮的大小,排列顺序,添加按钮到窗体,给按钮添加事件
for (int i = 0; i < array.length; i++) {
JButton jbu = new JButton(array[i]);
jbu.setPreferredSize(new Dimension(70, 55));
this.add(jbu);
jbu.addActionListener(l);
}
this.setVisible(true);
}
// ************************************************************************************//
// ************************************************************************************//
// 添加菜单栏
public void MyMenu() {
JMenuBar menubar = new JMenuBar(); // 创建menubar对象
JMenu file, edit, editSon, about;// 声明JMenu类对象
JMenuItem open, save, line, exit, copy, paste, cut, put, author, help;// 声明menuitem类对象
// 初始菜单项
file = new JMenu("文件(F)"); // 创建JMenu对象
file.setMnemonic('F');
edit = new JMenu("编辑"); // 创建JMenu对象
editSon = new JMenu("二级菜单"); // 创建JMenu对象
about = new JMenu("帮助"); // 创建JMenu对象
open = new JMenuItem("打开", new ImageIcon(
"C:/Users/Administrator/Desktop/images/2.jpg")); // 创建menuItem对象
save = new JMenuItem("保存"); // 创建menuItem对象
exit = new JMenuItem("关闭"); // 创建menuItem对象
copy = new JMenuItem("复制"); // 创建menuItem对象
paste = new JMenuItem("粘贴"); // 创建menuItem对象
author = new JMenuItem("作者"); // 创建menuItem对象
help = new JMenuItem("帮助"); // 创建menuItem对象
cut = new JMenuItem("cut"); // 创建menuItem对象
put = new JMenuItem("put"); // 创建menuItem对象
menubar.add(file); // 将file添加到menubar中
menubar.add(edit); // 将edit添加到menubar中
menubar.add(about); // 将about添加到menubar中
exit.addActionListener(e -> this.dispose());// 关闭按钮
file.add(open); // 将open添加到file中
file.add(save); // 将save添加到file中
file.addSeparator();// 添加菜单栏中的横线 横线位置和添加顺序有关
file.add(exit); // 将exit添加到file中
edit.add(copy); // 将copy添加到edit中
edit.add(paste); // 将paste添加到edit中
edit.add(editSon); // 将editSon添加到edit中
editSon.add(cut); // 将cut添加到edit中
editSon.add(put); // 将put添加到edit中
about.add(author); // 将author添加到about中
about.add(help); // 将help添加到about中
// 设置menuBar
this.setJMenuBar(menubar);
}
// ************************************************************************************//
// ************************************************************************************//
// 验证界面(登陆界面)
public void showjiemian() {
this.setTitle("用户登陆"); // 设置窗体的标题
this.setSize(200, 150); // 设置窗体的大小
this.setDefaultCloseOperation(3); // 设置关闭的方式
this.setLocationRelativeTo(null); // 设置窗体出现在屏幕中间
this.setResizable(false); // 设置窗体不可改变大小
FlowLayout c = new FlowLayout(); // 创建流式布局对象
JLabel a = new JLabel("账号"); // 创建标签对象
JLabel b = new JLabel("密码"); // 创建标签对象
JTextField username = new JTextField(12); // 创建文本框对象
JPasswordField password = new JPasswordField(12);// 创建密码框对象
JButton b12 = new JButton("登陆"); // 创建按钮对象
this.setLayout(c); // 设置布局为流式布局
this.add(a); // 将标签对象添加到窗体
this.add(username); // 将文本框对象添加到窗体
this.add(b); // 将标签对象添加到窗体
this.add(password); // 将密码框对象添加到窗体
this.add(b12); // 将按钮对象添加到窗体
b12.addActionListener(e -> {
this.dispose(); // 关闭验证界面
if (username.getText().equals("1")
&& new String(password.getPassword()).equals("1")) // 验证用户名和密码如果都是1,那么就通过
{
new Main1125() {
{
showframe();
MyMenu();
}
};
}
else {
new Main1125().showfault(); // 显示错误提示框
}
});
this.setVisible(true);// 设置窗体属性为可见
}
// ************************************************************************************//
// ************************************************************************************//
// 错误提示框
public void showfault() {
this.setTitle("错误"); // 设置窗体的标题
this.setSize(200, 150);// 设置窗体的大小
this.setDefaultCloseOperation(3);// 设置关闭的方式
this.setLocationRelativeTo(null);// 设置窗体出现在屏幕中间
this.setResizable(false);// 设置窗体不可改变大小
this.setLocationRelativeTo(null); // 设置窗体出现位置居中
JPanel j1 = new JPanel(); // 创建面板对象
j1.setPreferredSize(new Dimension(0, 100)); // 设置面板大小
JLabel a = new JLabel("账号或者密码错误,请重新输入"); // 创建错误标签对象
JButton b = new JButton("返回登陆界面"); // 创建按钮对象
this.add(j1); // 添加面板到窗体
j1.add(a); // 添加标签组件到窗体
j1.add(b); // 添加按钮组件到窗体
b.addActionListener((e) -> {
this.dispose();
new Main1125().showjiemian();
}); // 关掉错误界面,显示验证界面
this.setVisible(true);// 设置窗体属性为可见
}
// ************************************************************************************//
}
2.ActionListener类
package s1125计算器界面;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JTextField;
public class CalListener implements ActionListener{
String text ; //接受使用者按下的按钮内容
String str = ""; //str是存储运算符
String lastnumber; //存储上一个处理数
String nextnumber; //存储下一个处理数
String result; //存储结果
JTextField jtf,jtf1; //jtf显示输入框,jtf1结果框
double d; //存储运算结果
int n;
public void setJtf(JTextField jtf,JTextField jtf1)
{this.jtf = jtf; //传入输入文本框对象
this.jtf1 = jtf1;} //传入结果文本框对象
public void actionPerformed(ActionEvent e){
text = e.getActionCommand();// e.getActionCommand()得到按钮上的字符串
System.out.println(text);
if(text.equals("←"))
{//如果文本框字符串长度大于1 减掉最后一位 如果长度等于1 文本框置0
String temp = jtf.getText();
if(temp.length()>1)
{ String temp1;
temp1=temp.substring(temp.length()-1,temp.length());//得到最后一位字符传给temp
if(temp1.equals("+")||temp1.equals("-")||temp1.equals("×")||temp1.equals("÷"))
str=""; //如果最后一位字符是符号,那么"←"表示将符号清空,那么str=""
jtf.setText(temp.substring(0,temp.length()-1));//删去最后一位substring用法是得到从0到temp.length()-1位数据
}
else jtf.setText("0");
}
else if(text.equals("ANS")) //ans 调用上次的结果
{ String k=jtf1.getText();
if(k.equals("")) jtf.setText("0"); //调用结果数据,如果开始没有,则文本框显示0
else
{ if(jtf.getText().equals("0"))
jtf.setText(k); //调用结果数据,如果有上次的结果,则文本框显示已经存在的数据和上次的结果
else jtf.setText(jtf.getText()+k);}
}
else if(text.equals("C"))
{jtf.setText("0");
jtf1.setText("");
lastnumber ="";
nextnumber ="";
str = "";}
else if(text.equals("CE"))
{jtf.setText("0");
lastnumber ="";
nextnumber ="";
str = "";}
//如果输入的是运算符
else if(text.equals("+")||text.equals("-")||text.equals("×")||text.equals("÷")||text.equals("="))
{
if(str.equals("")) //如果是第一次输入运算符
{ if(text.equals("=")) {}
else
{str=text;
result=jtf.getText();
jtf.setText(jtf.getText()+text);}
}
else //如果之前已经输入过运算符
{ String temp1,temp2;
temp1 = jtf.getText();
temp2=temp1.substring(temp1.length()-1,temp1.length());//得到文本输入框最后一位字符传给temp2
//比较这次输入的符号和上次输入的符号是否相同
if(temp2.equals("+")||temp2.equals("-")||temp2.equals("×")||temp2.equals("÷"))
{if (text.equals("=")) {} //如果重复输入=,那么不做任何处理
else {str=text; //如果文本输入框最后一位是运算符号,那么重新传入运算符号(解决运算符重复输入问题)
String text2=temp1.substring(0, temp1.length()-1);
jtf.setText(text2+str);} //重复输入运算符,以最后一次的为准
}
else
{
nextnumber=temp1.substring(result.length()+1, temp1.length()); //得到第二个运算数给nextnumber
double d1 = Double.parseDouble(result); //定义一个双精度数
double d2 = Double.parseDouble(nextnumber); //定义一个双精度数
if(str.equals("+")) {d = d1 + d2;} //加法运算
if(str.equals("-")) {d = d1 - d2;} //减法运算
if(str.equals("×")) {d = d1 * d2;} //乘法运算
if(str.equals("÷")) {d = d1 / d2;} //除法运算
result=d+""; //运算结果放入result中,用了自动转换格式
str = text; //将本次运算符放入str中
if(text.equals("=")) {str="";} //如果这次按下的是"="键,那么清空str中存储的运算符
jtf1.setText(result); //在结果显示框显示结果
if(text.equals("=")) //如果这次按下了"="键
{jtf.setText("0");} //输入文本框变成初始"0"状态
else
{jtf.setText(result+str);} //输入文本框变成 结果加上符号
}
}
}
else //数字键和.键的事件响应
{ if(jtf.getText().equals("0")) //如果输入文本框显示"0",那么直接置换
jtf.setText(text);
else //如果输入文本框已经有数据,那么添加新数据
jtf.setText(jtf.getText()+text);
}
}
}