第十七周周总结 Swing
考试系统
1.登录功能 用户和密码存在在哪里? 文件
2.考试功能 考试题目和答案存在哪? 文件
3.展示功能 GUI Graphical User Interface图形用户接口
#GUI
Java集合 String
I/O
文件
c--->桌面应用程序
c/s--->client Server 客户端/服务器 QQ
*B/S-->Browser Server 浏览器/服务器 淘宝
GUI
Graphical User Interface
图形用户接口
就是采用图形的方式,进行操作页面的展示
AWT (Abstract Window toolkit)
Swing 摆动,悬挂的意思
AWT Swing
窗体 Frame JFrame
面板 Panel JPanel
组件 Button JButton 按钮
Label JLabel 标签
TextField JTextField 文本框
PasswordField 密码框
TextArea JTexArea 文本域
JMenuBar 菜单条 JMenu 菜单 JMenuItem 菜单项
事件 ActionListener 动作/响应事件
KeyListener 键盘事件
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.io.*;
import javax.swing.*;
public class Bz implements ActionListener {//ActionListener用于接收操作事件的侦听器接口
JFrame frame; //窗体
JMenuBar bar; //菜单条
JMenu fileMenu, editMenu; //菜单
JMenuItem newItem, openItem, saveItem, saveasItem, closeItem; //菜单项
ImageIcon newIcon, openIcon, saveIcon, saveasIcon, closeIcon;//图标
JScrollPane scroll; //滚动条
JTextArea area; //文本域
JFileChooser chooser; //文件选择器
File file; //与电脑上的文件或文件夹产生一 一对应的的映射关系
public Bz() {
frame = new JFrame("记事本"); //创建“记事本”窗体
bar = new JMenuBar(); //创建菜单条
fileMenu = new JMenu("文件"); //创建“文件”菜单
editMenu = new JMenu("编辑"); //创建“编辑”菜单
newIcon = new ImageIcon("f:" + File.separator + "tupian" + File.separator + "1.png");//添加图标
openIcon = new ImageIcon("f:" + File.separator + "tupian" + File.separator + "2.png");
saveIcon = new ImageIcon("f:" + File.separator + "tupian" + File.separator + "3.png");
saveasIcon = new ImageIcon("f:" + File.separator + "tupian" + File.separator + "4.png");
closeIcon = new ImageIcon("f:" + File.separator + "tupian" + File.separator + "5.png");
newItem = new JMenuItem("新建(N)", newIcon); //创建“新建”菜单项
openItem = new JMenuItem("打开(O)", openIcon); //创建“打开”菜单项
saveItem = new JMenuItem("保存(S)", saveIcon); //创建“保存”菜单项
saveasItem = new JMenuItem("另存为(A)", saveasIcon); //创建“另存为”菜单项
closeItem = new JMenuItem("关闭(X)", closeIcon); //创建“关闭”菜单项
area = new JTextArea(); //创建文本域
scroll = new JScrollPane(area); //创建滚动条
newItem.setMnemonic(KeyEvent.VK_N); //设置组合键ctrl
openItem.setMnemonic(KeyEvent.VK_O);
saveItem.setMnemonic(KeyEvent.VK_S);
saveasItem.setMnemonic(KeyEvent.VK_A);
closeItem.setMnemonic(KeyEvent.VK_X);
newItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, InputEvent.CTRL_DOWN_MASK));//将组合键和“新建”指令菜单项结合
openItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, InputEvent.CTRL_DOWN_MASK));
saveItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_DOWN_MASK));
saveasItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, InputEvent.CTRL_DOWN_MASK));
closeItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, InputEvent.CTRL_DOWN_MASK));
fileMenu.add(newItem); //将“新建”菜单项加入“文件”菜单
fileMenu.add(openItem); //将“打开”菜单项加入“文件”菜单
fileMenu.add(saveItem); //将“保存”菜单项加入“文件”菜单
fileMenu.add(saveasItem); //将“另存为”菜单项加入“文件”菜单
fileMenu.addSeparator(); //将“文件”菜单添加到窗口
fileMenu.add(closeItem); //将“关闭”菜单项加入“文件”菜单
newItem.addActionListener(this); //观察者模式,接收到指令就开始执行方法
openItem.addActionListener(this);
saveItem.addActionListener(this);
saveasItem.addActionListener(this);
closeItem.addActionListener(this);
bar.add(fileMenu); //将“文件”菜单加入到菜单条
bar.add(editMenu); //将“编辑”菜单加入到菜单条
frame.setJMenuBar(bar); //将菜单条添加到窗口上
frame.add(scroll); //将滚动条加入到窗体
frame.setSize(600, 450);//设置窗体出现时的位置和自身的宽高
frame.setVisible(true); //设置点击关闭按钮 窗体执行完毕
}
//绑定事件监听器
public void actionPerformed(ActionEvent event){
Object obj=event.getSource();//接收的指令
if(obj instanceof JMenuItem) {
JMenuItem item=(JMenuItem) obj;//(强制向下转型)如果点击的是菜单条
if(item == newItem) {
new Bz();//新建
}else if(item == openItem) {
chooser = new JFileChooser();//打开
chooser.showOpenDialog(null);
file = chooser.getSelectedFile();//与硬盘内的文件产生映射
try {
FileInputStream fis= new FileInputStream(file);
byte[] b = new byte[fis.available()];
fis.read(b);//读取
area.append(new String(b));
fis.close();//关闭流
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}else if(item == saveItem) {//保存
if(file!=null) {
try {
PrintStream out = new PrintStream(new FileOutputStream(file));
out.print(this.area.getText());
out.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}else if(item == saveasItem) {//另存为
chooser.showSaveDialog(null);
file = chooser.getSelectedFile();
try {
if(!file.exists()) {
file.createNewFile();
}
FileOutputStream fos=new FileOutputStream(file);
byte[] b = area.getText().getBytes();
fos.write(b);
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}else if(item == closeItem) {
System.exit(1);
}
}
}
public static void main(String[] args) {
new Bz();
}
}
第十七周周总结 Swing的更多相关文章
- java第二周周学习总结
java运算符和循环 java运算符 一.for 语句 for 语句的基本结构如下所示:for(初始化表达式;判断表达式;递增(递减)表达式){ 执行语句; //一段代码} 初始化表达式:初 ...
- web前端笔记整理,从入门到上天,周周更新
由于大前端知识点太多,所以一一做了分类整理,详情可见本人博客 http://www.cnblogs.com/luxiaoyao/ 一.HTML 1.注释 格式:<!-- 注释内容 --> ...
- 牛客算法周周练20 F.紫魔法师 (二分图染色)
题意:给你一张图,对其染色,使得相连的点的颜色两两不同求,最少使用多少种颜色. 题解:首先,若\(n=1\),只需要一种.然后我们再去判断是否是二分图,对于二分图,两种颜色就够了,若不是二分图,也就是 ...
- [问题2014S12] 复旦高等代数II(13级)每周一题(第十二教学周)
[问题2014S12] 设 \(A,B\) 都是 \(n\) 阶半正定实对称阵, 证明: \(AB\) 的所有特征值都是非负实数. 进一步, 若 \(A,B\) 都是正定实对称阵, 证明: \(AB ...
- 201871010132--张潇潇--《面向对象程序设计(java)》第十五周学习总结
博文正文开头格式:(2分) 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.co ...
- 201871010133-赵永军《面向对象程序设计(java)》第十五周学习总结
201871010133-赵永军<面向对象程序设计(java)>第十五周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ ...
- 201871010135 张玉晶《面向对象程序设计(java)》第十五周学习总结
项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/zyja/p/12000 ...
- 201871010135 张玉晶《面向对象程序设计(java)》第十三周学习总结
项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/zyja/p/11918 ...
- oracle 查询周的第一天日期
项目的开发中需要用到一个查询周的第一天日期的函数 搜索N久很难找到解决的方法 只要自己写一个先用着 代码如下 a_week格式为 'YYYYIW' 如 '200801'表示2008年的第一周 周使用I ...
随机推荐
- asp.net mvc + vue.js + axios.js
1.新建一个 MVC 应用程序 2.右键解决方案 添加VUE 3.搜索vue 1.安装axios.js ,用于数据请求,get , post axios
- DevOps之持续集成SonarQube代码质量扫描
一.SonarQube介绍 SonarQube是一个用于代码质量检测管理的开放平台,可以集成不同的检测工具,代码分析工具,以及持续集成工具.SonarQube 并不是简单地把不同的代码检查 ...
- forEach、map、filter、reduce的区别
1.相同点: 都会循环遍历数组中的每一项: map().forEach()和filter()方法里每次执行匿名函数都支持3个参数,参数分别是:当前元素.当前元素的索引.当前元素所属的数组: 匿名函数中 ...
- Send Email
private string SendEmail(string mailTo, string body, ref int sendresult) { string errorEmailAddress ...
- JSON.parse 测试
第一种 报错 var t = JSON.parse(""); console.log(t); 第二种 正常 var t = JSON.parse('{"AA": ...
- CDOJ 1063 堆排序模板
D - 秋实大哥与妹纸 Time Limit:1000MS Memory Limit:1500KB 64bit IO Format:%lld & %llu Submit Sta ...
- jQuery字体图标的三种方法
BootStrap框架原生图标 在导入BootStrap包的同时,导入bootstrap-3.3.7-dist/css/bootstrap.css层叠样式; <button type=" ...
- SSM整合之---环境搭建
SSM整合---环境搭建 l 查询所有用户的信息,保存用户信息 1.pom.xml配置项目所需的jar包 <dependencies> <dependency> <gr ...
- HDU3465--Life is a Line(树状数组求逆序数,离散化)
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others) Total Submission(s ...
- React曾经忽略的知识点(上)
1.JSX 防注入攻击 你可以放心地在 JSX 当中使用用户输入 const title = response.potentiallyMaliciousInput; // 直接使用是安全的: cons ...