看了看上一篇博客的时间,已经是15天之前了,两个星期。
这两周的生活:每天十节课,周末也满课,大晚上的还要敲代码补作业补报告,心里想着马上要考的专业课还只看完绪论,整个人就不好了。
想着之前看过的一句话:选我所爱不如爱我所选也还是会纯粹的以为只要坚持下去总是没错的,付出一定会有收获吧,那些什么个 现在流的汗都是当初选专业脑子进的水 神马的都一边去把!!!
所以我愉快的决定在考试之前多听听新一代神曲: 小苹果! Yeah(这里请自动脑补 哈哈~)
好啦,这么忙碌还是得补课赶进度呀。
我的第三节课讲的是swing体系:Java中用来做UI的一套API
java.awt
javax.swing
常用到的有:
JFrame:窗体
JPanel:面板
JLabel:文本标签和图片标签
JTextField:文本输入框
JPasswordField:密码输入框
JButton:按钮
JComboBox:下拉框
JCkeckBox:多选框
JRadioButton:单选按钮
JTextArea:多行文本框
JMenuBar
JMenu
JMenuItem
事件:对于组件的任何一个操作:点击按钮,选中菜单项 鼠标移动,鼠标按下,键盘输入...
事件监听器:用来监听在某个组件上是否发生了对应的事件
事件源:发生事件的组件对象
常用的事件监听器:(接口)
动作监听器:ActionListener
鼠标按键监听器:MouseListener
鼠标移动监听器:MouseMotionListener
鼠标滚轮监听器:MouseWheelListener
键盘监听器:KeyListener
FileInputStream
FileOutputStream
我们要掌握:
1.如何定义事件监听器
2.如何区分每个菜单项
3,如何给菜单项绑定监听器
4.如何将UI中的对象传递给监听器
5,如何读写硬盘中的数据
为此,我们做了个简单的山寨记事本
下面贴上代码
- import javax.swing.JFrame;
- import javax.swing.JMenu;
- import javax.swing.JMenuBar;
- import javax.swing.JMenuItem;
- import javax.swing.JScrollPane;
- import javax.swing.JTextArea;
- import javax.swing.ScrollPaneConstants;
- public class NotePadUI {
- public static void main(String args[]) {
- // 创建界面
- JFrame jf = new JFrame();
- // 设置标题
- jf.setTitle("记事本");
- // 设置初始大小
- jf.setSize(400, 300);
- // 设置点击关闭按钮的时候退出程序
- jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- // 创建多行文本框
- JTextArea area = new JTextArea();
- // 添加菜单栏
- JMenuBar bar = new JMenuBar();
- // 创建事件监听器对象
- NotePadListenet lis = new NotePadListenet(area);
- String[] menus = { "文件(F)", "编辑(E)", "格式(O)", "查看(V)", "帮助(H)" };
- String[][] items = {
- { "新建", "打开", "保存", "另存为", "-", "页面设置", "打印", "-", "退出" },
- { "撤销", "-", "剪切", "复制" }, {}, {}, {} };
- // 每个菜单项的唯一标识
- String[][] commands = {
- { "newFile", "open", "save", "saveAs", "-", "pageSet", "print",
- "-", "exit" }, { "withDraw", "-", "cut", "copy" }, {},
- {}, {} };
- // 循环创建JMenu,放在JMenuBar上
- for (int i = 0; i < menus.length; i++) {
- JMenu menu = new JMenu(menus[i]);
- bar.add(menu);
- for (int j = 0; j < items[i].length; j++) {
- if (items[i][j].equals("-")) {
- // 就加入分隔条
- menu.addSeparator();
- } else {
- JMenuItem item = new JMenuItem(items[i][j]);
- // 设置菜单项的唯一标识(动作命令)
- item.setActionCommand(commands[i][j]);
- // 将菜单项加载对应的菜单上
- menu.add(item);
- // 给菜单项绑定监听器
- item.addActionListener(lis);
- }
- }
- }
- // 设置窗体的菜单
- jf.setJMenuBar(bar);
- // 滚动面板,将多行文本框放到滚动面板面板中
- JScrollPane sp = new JScrollPane(area);
- // 设置一直显示滚动条
- sp.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
- sp.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
- jf.add(sp);
- jf.setVisible(true);
- }
- }
监听:
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import javax.swing.JTextArea;
- public class NotePadListenet implements ActionListener {
- private JTextArea area;
- public NotePadListenet(JTextArea area) {
- this.area = area;
- }
- public void actionPerformed(ActionEvent e) {
- // 获得被选中菜单项的动作命令
- String command = e.getActionCommand();
- if (command.equals("save")) {
- // 获取多行文本框中的数据
- // 得到文本内容
- String str = area.getText();
- String path = "F:\\abc\\a.txt";
- try {
- FileOutputStream fos = new FileOutputStream(path);
- byte[] bs = str.getBytes();
- fos.write(bs);
- fos.flush();
- fos.close();
- } catch (Exception e1) {
- e1.printStackTrace();
- }
- } else if (command.equals("open")) {
- String path1 = "G:\\qiyi\\b.txt";
- try {
- FileInputStream fis = new FileInputStream(path1);
- //流的长度
- int len = fis.available();
- byte[] bs = new byte[len];//流中有多少字节,就定义多大数组
- //将流中的字节读入数组
- fis.read(bs);
- //将字节数组转成字符串
- String msg = new String(bs);
- area.setText(msg);
- } catch (Exception ef) {
- ef.printStackTrace();
- }
- }
- }
- }
有一个缺点,暂时只能指定路径保存 如上面的代码我保存的是保存到了F盘, 还没有实现自己选择位置的功能。有待慢慢完善。
还有一个疑惑:
在记事本里面换行之后去我保存的路径查看发现并没有换行。 但是用写字板打开的话又是有换行的,不明所以。 >< >< ><
最后让我一边唱着小苹果 一边继续补我学校的作业去吧,今晚又是熬夜的节奏。
我的黑眼圈,想说爱你不容易 o(︶︿︶)o
晚安 ITEyers 。
3 3 3