一、操作软件的两种方式
1、GUI(Graphical User Interface)图形用户接口,用图形的方式来变现软件,操作起来跟方便直观
2、GLI(Commandline User Interface )命令行用户接口,也就是dos命令行的方式,操作繁琐
不直观
二、GUI编程
1、java提供的的对象都存在java.awt和java.swing包中
2、awt和swing的区别
java.Awt:Abstract Window ToolKit (抽象窗口工具包),
需要调用本地系统方法实现功能。属重量级控件。
javax.Swing:在AWT的基础上,建立的一套图形界面系统,
其中提供了更多的组件,而且完全由Java实现。增强了移植性,
属轻量级控件
三、继承关系
Container容器通过add方法添加其他组件
四、布局管理器(组件的摆放方式,5种)
1、FlowLayout(流式布局管理器)
从左到右的顺序排列。
Panel默认的布局管理器。
2、BorderLayout(边界布局管理器):如果没有指定组件的摆放位置,会填充整个窗体,再添加组件就会覆盖原来的组件
东,南,西,北,中
Frame默认的布局管理器。
3、GridLayout(网格布局管理器)
规则的矩阵
4、GridBagLayout(网格包布局管理器):组件4位网格包式布局
非规则的矩阵
5、CardLayout(卡片布局管理器)
选项卡
五、事件监听机制:事件源(组件)、事件(event)、监听器(Listener)、事件处理(自定义处理方式)
流程图
练习1:定义一个界面,输入硬盘地址后,将地址下的文件以及文件夹的名称显示出来
import java.awt.*; import java.awt.event.*; import java.io.*; class ShowFilesList { private Frame f; private TextField tf; private TextArea ta; private Button show; private Dialog dia; private Label l; private Button but; ShowFilesList() { init(); } public void init() { f = new Frame("文件管理器");//定义一个窗体对象 /* 设置位置,第一个参数为窗体与电脑屏幕左边的距离 第二个参数为窗体与电脑屏幕右边的距离 第三个参数为窗体的长度(横坐标) 第三个参数为窗体的宽度(纵坐标) */ f.setBounds(400,100,600,500); f.setVisible(true);//设置窗体可见 f.setLayout(new FlowLayout());//设置为流式布局 tf = new TextField(60);//单行文本输入框,用于输入地址 show = new Button("转到");//按钮,用于触发显示地址的下的文件以及文件夹名称的事件 ta = new TextArea(25,60);//多行文本输入框,用于显示文件以及文件夹名称 dia = new Dialog(f,"错误信息",true);//弹出错误信息的对话框 dia.setBounds(500,200,200,150);//同样设置对话框的大小和边界 dia.setLayout(new FlowLayout());//设置对话框的布局方式为流式布局 l = new Label();//标签,用于显示错误信息 but = new Button("确定");//用于关闭对话框 dia.add(l); dia.add(but); f.add(tf); f.add(show); f.add(ta); myEvent(); } //各种事件 public void myEvent() { //给对话框注册窗口监听器,用于点关闭按钮就将对话框隐藏 dia.addWindowListener(new WindowAdapter()//匿名内部类,窗口监听器适配器 { //覆盖窗口关闭的方法 public void windowClosing(WindowEvent e) { dia.setVisible(false); } }); //给对话框的按钮添加动作监听器 but.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { dia.setVisible(false); } }); //给单行文本款添加键盘监听器,用于点击回车键就触发,显示文件的方法 tf.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { if(e.getKeyCode()==KeyEvent.VK_ENTER) showDir(); } }); //给转到按钮添加动作监听器 show.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { showDir(); } }); //给主窗体添加窗口监听器 f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); } //显示文件以及文件夹的方法,用到File类中的方法 public void showDir() { String path = tf.getText(); File dir = new File(path); //判断文件是否存在以及是否是文件夹 if (dir.exists() && dir.isDirectory()) { ta.setText("");//每显示一次,就将原来显示的内容清空 String[] files = dir.list();//显示目录下所有文件以及文件夹的名称 for(String s:files) { //多行文本框添加内容的方法,类似字符缓冲区对象 ta.append(s+"\t\n"); } } else { //文件不存在或者不是文件夹,就给对话框中的标签设置提示内容 String info = path+"路径不存在!"; l.setText(info); dia.setVisible(true);//设置对话框显示 } } public static void main(String[] args) { new ShowFilesList(); } }
练习2:定义一个图形化界面,实现打开查看、编辑、保存文本文件
import java.awt.*; import java.awt.event.*; import java.io.*; class FileBrowser { private Frame f; private TextArea ta; private MenuBar mb; private Menu m; private MenuItem open,save,exit; private FileDialog openFile,saveFile; private File file; FileBrowser() { init();//在构造函数中初始化界面 } public void init() { f = new Frame("记事本"); f.setBounds(400,100,600,500); f.setVisible(true); ta = new TextArea(); mb = new MenuBar();//设置菜单选项 m = new Menu("文件");//设置菜单 open = new MenuItem("打开");//分别设置三个字菜单 save = new MenuItem("保存"); exit = new MenuItem("退出"); m.add(open);//分别三个子菜单添加到菜单选项中 m.add(save); m.add(exit); mb.add(m); f.setMenuBar(mb);//给窗体设置菜单选项 f.add(ta); openFile = new FileDialog(f,"打开文件",FileDialog.LOAD);//打开文件对话框,LOAD saveFile = new FileDialog(f,"保存文件",FileDialog.SAVE);//保存文件对话框,SAVE myEvent(); } public void myEvent() { open.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ea) { openFile.setVisible(true); String filePath = openFile.getDirectory();//从文件对话框中获取文件路径 String fileName = openFile.getFile();//从文件对话框中获取文件名 if(filePath==null || fileName==null)//先判断文件路径和文件名是否问空 return ;//如果为空就返回,不执行下面代码 ta.setText(""); file = new File(filePath,fileName); BufferedReader bfr = null; try { bfr = new BufferedReader(new FileReader(file)); String line = null; while ((line=bfr.readLine())!=null) { ta.append(line+"\r\n");//在写入文件的时候要加入回车符标记 } } catch (IOException e) { throw new RuntimeException("打开文件失败"); } finally { try { if(bfr!=null) bfr.close(); } catch (IOException e) { throw new RuntimeException("关闭失败"); } } } }); save.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ea) { if (file==null)//先判断文件是否存在,如果存在就不弹出文件对话框,直接保存 { saveFile.setVisible(true); String filePath = openFile.getDirectory(); String fileName = openFile.getFile(); if(filePath==null || fileName==null)//读取文件同样进行判断 return ; file = new File(filePath,fileName); } BufferedWriter bfw = null; try { bfw = new BufferedWriter(new FileWriter(file)); String s = ta.getText(); bfw.write(s); } catch (IOException e) { throw new RuntimeException("保存失败"); } finally { if (bfw!=null) { try { bfw.close(); } catch (IOException e) { throw new RuntimeException("关闭失败"); } } } } }); exit.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.exit(0); } }); f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); } public static void main(String[] args) { new FileBrowser(); } }