大学JAVA实验四
这几天一直在重装系统,主要因为SQLSERVER2000安装不成功,直到今天上午才安装成功,最后发现原来一直是瑞星在搞鬼,气死了。
今天下午才开始做实验,由于时间仓促,只是完成实验的要求部分,并没有进行多少代码优化,也没有对界面进行美化,等有空再改善一下吧
10月27日早晨修改加强
实验时发现实验室里的JDK5.0与我的6.0有冲突,所以在实验室不能运行,只要将5.0卸载,安装6.0即可
在实验室补充了记事本的编辑里的清空功能等
11月1号晚上,更改了计算器及记事本窗口左上方的咖啡图标,换成了我喜欢的图片
1、构造简单计算器界面,并实现加、减、乘、除运算。
Calculator.java
//package first;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Calculator extends JFrame {
private static final long serialVersionUID = 1L;// 这个不知道是干什么的
private JPanel optPanel;
private JPanel numPanel;
private Label resultLabel;
private String[] optName = { "Back", "CE", "C" };// 三个操作按钮的名字,退格,清除,清空
private String[] numName = { "7", "8", "9", "+", "4", "5", "6", "-", "1",
"2", "3", "*", "0", ".", "=", "/" };// 数字按钮的名字,包括四个运算符
private JButton[] optButton = new JButton[3];// 三个操作按钮
private JButton[] numButton = new JButton[16];// 数字按钮,包括四个运算符
EventListener eventListener = new EventListener();// 创建事件监听者
public Calculator(String title) {// 创建主窗口,title为窗口名称
super(title);
ImageIcon icon=new ImageIcon("195032.jpg"); //更改了窗口左上方的咖啡图标,换成了我喜欢的图片,图片名为195032.jpg
setIconImage(icon.getImage());
resultLabel = new Label("0.", Label.RIGHT);// 显示器,显示内容靠右,比较符合实际
optPanel = new JPanel();// 放三个操作按钮
numPanel = new JPanel();// 放数字等
optPanel.setLayout(new GridLayout(1, 3, 2, 2));// 一行三列
numPanel.setLayout(new GridLayout(4, 4, 2, 2));// 四行四列,16个位置
super.add(resultLabel, BorderLayout.NORTH);// 显示器在最上面
super.add(optPanel, BorderLayout.CENTER);// 三个操作按钮在中间
super.add(numPanel, BorderLayout.SOUTH);// 数字等在下面
for (int i = 0; i < optName.length; i++) {// 为每个数字按钮等添加事件监听器并加入操作面板中
optButton[i] = new JButton(optName[i]);
optButton[i].addActionListener(eventListener);
optPanel.add(optButton[i]);
}
for (int i = 0; i < numName.length; i++) {// 为每个操作按钮等添加事件监听器并加入操作面板中
numButton[i] = new JButton(numName[i]);
numButton[i].addActionListener(eventListener);
numPanel.add(numButton[i]);
}
super.addWindowListener(new WindowAdapter() {// 关闭主面板
@Override
public void windowClosing(WindowEvent arg0) {
System.exit(0);
}
});
super.setBounds(400, 300, 250, 200);
super.setResizable(false);// 计算机不能改变大小
super.setVisible(true);
}
class EventListener implements ActionListener {// 设计监听者类
double result;// 两个运算数运算完后得到的结果
double firstNum;// 第一个运算数
double secondNum;// 第二个运算数
String showResult = "";// 显示器上显示的结果
String fuhao;// 运算符,+,-,*,/
String caozuo;
String temp;// 每按一个按钮的值
@Override
public void actionPerformed(ActionEvent ae) {// 重写处理方法
for (int i = 0; i < numName.length; i++) {
if (ae.getSource() == numButton[i]) {
String temp = numButton[i].getText();
if (temp.equals("+") || temp.equals("-")
|| temp.equals("*") || temp.equals("/")) {
firstNum = Double.parseDouble(showResult);
fuhao = temp;
resultLabel.setText(fuhao);
showResult = "";
// System.out.println(firstNum*2);//测试
} else if (temp.equals("=")) {
secondNum = Double.parseDouble(showResult);
if (fuhao.equals("+")) {
result = firstNum + secondNum;
resultLabel.setText("" + result);
} else if (fuhao.equals("-")) {
result = firstNum - secondNum;
resultLabel.setText("" + result);
} else if (fuhao.equals("*")) {
result = firstNum * secondNum;
resultLabel.setText("" + result);
} else if (fuhao.equals("/")) {
result = firstNum / secondNum;
resultLabel.setText("" + result);
}
// System.out.println(secondNum*3);//测试
} else {
showResult += temp;
resultLabel.setText(showResult);
}
}
}
if (ae.getSource() == optButton[0]) {// 退格
if (showResult.length() > 0) {
showResult = showResult.substring(0,
showResult.length() - 1);
resultLabel.setText(showResult);
} else {
showResult = "";
resultLabel.setText(showResult);
}
// caozuo = optButton[0].getLabel();
} else if (ae.getSource() == optButton[1]) {// 清除当前的输入数,如之前已存在了第一个运算数,不影响第一个运算数
showResult = "";
resultLabel.setText(showResult);
temp = "";
// caozuo = optButton[1].getLabel();
} else if (ae.getSource() == optButton[2]) {// 清空所有的数字及运算符,回到初始状态
// caozuo = optButton[2].getLabel();
showResult = "";
resultLabel.setText(showResult);
temp = "";
fuhao = "";
}
}
}
public static void main(String[] args) {
new Calculator("Calculator");// 创建实例
}
}
2、仿Windows系统中的“记事本”,编写一个记事本软件,可以完成文件的新建、打开、编辑与保存(如果时间充裕,可考虑实现更多的功能)。
Notepad.java
//package second;
import java.awt.FileDialog;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
public class Notepad extends JFrame {
private static final long serialVersionUID = 1L;
JMenuBar menubar;
JMenu wenjian, bianji, geshi, chuangkou, bangzhu;
TextArea wenjianqu;
private FileDialog fileload;
private FileDialog filesave;
private String file = "";
EventListener eventlistener = new EventListener();
public Notepad(String title) {
super(title);
ImageIcon icon=new ImageIcon("195032.jpg"); //更改了窗口左上方的咖啡图标,换成了我喜 欢的图片,图片名为195032.jpg
setIconImage(icon.getImage());
wenjianqu = new TextArea();// 文本编辑区
super.add(wenjianqu);
menubar = new JMenuBar();
wenjian = new JMenu("文件");// 文件菜单
bianji = new JMenu("编辑");// 编辑菜单
geshi = new JMenu("格式");// 格式菜单
chuangkou = new JMenu("窗口");// 窗口菜单
bangzhu = new JMenu("帮助");// 帮助菜单
// 文件菜单的菜单项
JMenuItem xinjian = new JMenuItem("新建");
JMenuItem dakai = new JMenuItem("打开");
JMenuItem baocun = new JMenuItem("保存");
JMenuItem lingcunwei = new JMenuItem("另存为");
JMenuItem tuichu = new JMenuItem("退出");
// 为文件菜单的菜单项添加监听者
xinjian.addActionListener(eventlistener);
dakai.addActionListener(eventlistener);
baocun.addActionListener(eventlistener);
lingcunwei.addActionListener(eventlistener);
tuichu.addActionListener(eventlistener);
// 文件菜单添加菜单项
wenjian.add(xinjian);
wenjian.add(dakai);
wenjian.add(baocun);
wenjian.add(lingcunwei);// 分隔符
wenjian.addSeparator();
wenjian.add(tuichu);
JMenuItem qingkong = new JMenuItem("清空");
qingkong.addActionListener(eventlistener);
bianji.add(qingkong);
// 向菜单条添加菜单
menubar.add(wenjian);
menubar.add(bianji);
menubar.add(geshi);
menubar.add(chuangkou);
menubar.add(bangzhu);
// 帮助菜单的菜单项
JMenuItem bangzguzguti = new JMenuItem("帮助主题");
JMenuItem aboutme = new JMenuItem("关于记事本");
// 帮助菜单添加菜单项
bangzhu.add(bangzguzguti);
bangzhu.add(aboutme);
fileload = new FileDialog(this, "打开文件-----XiaoHuanJie", FileDialog.LOAD);
filesave = new FileDialog(this, "保存文件-----XiaoHuanJie", FileDialog.SAVE);
super.setJMenuBar(menubar);
super.setLocation(250, 200);
super.setSize(600, 400);
super.setVisible(true);
super.setResizable(true);
super.addWindowListener(new WindowAdapter() {
@Override
public void windowActivated(WindowEvent e) {
// TODO Auto-generated method stub
super.windowActivated(e);
}
@Override
public void windowClosing(WindowEvent arg0) {
System.exit(0);
}
});
}
class EventListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent ae) {
String command = ae.getActionCommand();
if (command.equals("退出")) {
System.exit(0);
} else if (command.equals("新建")) {
} else if (command.equals("打开")) {
fileload.setVisible(true);
String direct = fileload.getDirectory();
String filename = fileload.getFile();
if ((direct != null) && (filename != null)) {
file = direct + filename;
loadFile();
}
} else if (command.equals("保存")) {
saveFile();
} else if (command.equals("另存为")) {
saveAs();
} else if (command.equals("新建")) {
newFile();
} else if (command.equals("清空")) {
qingkongFile();
}
}
}
public void loadFile() {
wenjianqu.setText("");
super.setTitle("我的记事本---" + file);
try {
BufferedReader br = new BufferedReader(new FileReader(file));
String reader = br.readLine();
while (reader != null) {
wenjianqu.append(reader + "/n");
reader = br.readLine();
}
br.close();
} catch (FileNotFoundException e) {
System.out.println("目标文件:" + file + "找不到!");
// e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void saveFile() {
String dangqianwenjian = wenjianqu.getText();
try {
if (file.isEmpty()) {
filesave.setVisible(true);
String direct = filesave.getDirectory();
String filename = filesave.getFile();
if ((direct != null) && (filename != null)) {
file = direct + filename;
PrintWriter pw = new PrintWriter(new FileWriter(file));
pw.println(dangqianwenjian);
pw.flush();
pw.close();
super.setTitle("我的记事本---" + file);
}
} else {
PrintWriter pw = new PrintWriter(new FileWriter(file));
pw.println(dangqianwenjian);
pw.flush();
pw.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
public void saveAs() {
filesave.setVisible(true);
String direct = filesave.getDirectory();
String filename = filesave.getFile();
if ((direct != null) && (filename != null)) {
file = direct + filename;
saveFile();
super.setTitle("我的记事本---" + file);
}
}
public void qingkongFile() {
wenjianqu.setText("");
}
public void newFile() {
super.setTitle("我的记事本---" + "新建文件");
wenjianqu.setText("");
}
public static void main(String[] args) {
new Notepad("我的记事本");
}
}