· GUI:Graphical User Interface。用图形的方式来显示计算机操作的界面,这样更方便直观
· CLI:Command line User Interface(命令行用户接口)。就是常见dos命令操作,需要记忆一些常用命令,操作不直观
例:比如,创建文件夹,或者删除文件等。使用command命令创建文件等,需要记住很多命令。
· java为GUI提供的对象都在java.Awt和java.Swing两个包中
· java.Awt:Abstract Window ToolKit(抽象窗口工具包),需要调用本地系统方法实现功能,属于重量级控件
· java.Swing:在Awt的基础上,建立的一套图形界面系统,其中提供了更多的组件,而且完全由java实现。增强了移植性,属于轻量级控件
Container:为容器,是一个特殊的组件,该组件可以通过add方法添加其他组件进来。
· 容器中组件的排序方式,就是布局
· 常见的布局管理器:
1. FlowLayout(流式布局管理器):从左到右的顺序排列。Panel默认的布局管理器
2. BorderLayout(边界布局管理器):东南西北中,Frame的默认布局管理器
3. GridLayout(网络布局管理器):规则的矩阵
4. CardLayout(卡片式布局管理器):选项卡
5. GridBagLayout(网络包布局管理器):非规则的矩阵
· 建立一个简单的窗体,代码示例:
//Container常用子类:Window Panel(面板不能单独存在) //Window常用子类:Frame Dialog //简单窗体创建过程: Frame f = new Frame("my window"); f.setLayout(new FlowLayout()); f.setSize(400, 500);//设置窗体大小 f.setLocation(500, 400);//设置窗体显示位置 f.setVisible(true);//设置窗体可见· 创建图形化界面步骤:
1. 创建frame界面
2. 对窗体进行基本设置
3. 定义组件
4. 将组件通过窗体的add方法添加到窗体中
5. 让窗体显示,通过setVisible(true)
· 用户对组件的操作,就是一个事件,那么产生事件的组件就是事件源。接收并处理事件,与用户进行交互的行为就是事件处理器。这些处理方式都封装在监听器中。
事件坚挺机制的组成:
· 事件源(组件)
· 事件(Event)
· 监听器(Listener)
· 事件处理器(引发事件后的处理方式)
1. 确定事件源(容器或组件)
2. 通过事件源对象的addXXXListener()方法将监听器注册到该事件源上
3. 该方法中接收XXXListener的子类对象,或者XXXListener的子类XXXAdapter的子类对象(一般使用匿名内部类)
4. 在覆盖方法时,方法的参数一般是XXXEvent类型的变量接收
5. 事件触发后会把事件打包成对象传递给变量(其中包括事件源对象,通过getSourse()或者getComponent()获取)
· 代码示例:通过按钮关闭窗体
private Frame f; //通过构造函数初始化 public CloseWindowDemo(){ init(); } private void init() { f = new Frame("my window"); //设置属性信息 f.setBounds(400, 500, 500, 600); f.setVisible(true); windowEvent(); } private void windowEvent() { //添加关闭监听器 f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); }
· Dialog类:在创建Dialog类时,需要依赖于一个Frame,形成一个最初不可见的对话框。在参数的最后一位还可以传入true或者flase,如果传入的是true,则在对话框没消失时,所依赖的窗体不可操作
代码示例:
Frame f = new Frame(); Dialog d = new Dialog(f,true);· FileDialog类:Dialog的子类,构造函数可以传递两种模式。一种是FiaDialog.LOAD:加载;一种是FileDialog.SAVE。保存
· MenuBar:菜单条目,可以通过Frame中的setMenuBar()方法添加菜单条目
· Menu是一个菜单的按钮,MenuBar中的add方法可以添加Menu
· Menu是MenuItem的子类,Menu的add方法可以添加MenuItem
也就是说,Menu是一个有下拉选框的菜单按钮;而MenuItem是菜单的一个实现按钮。
· 先创建MenuBar,在MenuBar中添加Menu或者MenuItem,Menu中可以添加MenuItem
完整代码示例:需求:一个简单的记事本
public class NotePadTest { public static void main(String[] args) { new NotePad(); } } class NotePad { private Frame f;//窗体组件 private MenuBar fileMenu;//菜单组件 private Menu fileM; private MenuItem saveFile,openFile,exit;//菜单项 private TextArea area; private FileDialog saveFileDialog; private FileDialog loadFileDialog; private File file; public NotePad() { init(); } private void init() { //窗体初始化 f = new Frame("notepad"); //f.setLayout(new FlowLayout()); f.setBounds(500, 100, 500, 600); f.setVisible(true); //给窗体添加文本区域 area = new TextArea(); f.add(area); //菜单初始化,给菜单添加子菜单 fileMenu = new MenuBar(); fileM = new Menu("file"); saveFile = new MenuItem("save"); openFile = new MenuItem("open file"); exit = new MenuItem("exit"); fileMenu.add(fileM); fileM.add(openFile); fileM.add(saveFile); fileM.add(exit); //窗体添加菜单组件 f.setMenuBar(fileMenu); windowEvent(); } private void windowEvent() { //窗体的保存动作监听 saveFile.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //如果是新文件的话,就打开对话框提示 if(file==null) { //对话框初始化 saveFileDialog = new FileDialog(f, "保存文件", FileDialog.SAVE); saveFileDialog.setVisible(true); //从对话框中获取信息并封装成一个文件 String filePath = saveFileDialog.getDirectory(); String fileName = saveFileDialog.getFile(); //当没有选择文件时,则之间结束 if(filePath == null || fileName == null) return; file = new File(filePath,fileName); } //将文本区域的内容写到要保存的文件中 BufferedWriter bufw = null; try { bufw = new BufferedWriter(new FileWriter(file)); String text = area.getText(); bufw.write(text); } catch (IOException e2) { throw new RuntimeException("文件保存失败"); } finally { if(bufw!=null) try { bufw.close(); } catch (IOException e1) { e1.printStackTrace(); } } } }); //窗体的打开动作监听 openFile.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //对话框初始化 loadFileDialog = new FileDialog(f,"openfile"); loadFileDialog.setVisible(true); //从打开文件中获取信息并封装成File String fileName = loadFileDialog.getFile(); String filePath = loadFileDialog.getDirectory(); //当选择取消时,直接结束动作 if(fileName==null || filePath==null) return; area.setText(""); file = new File(filePath,fileName); BufferedReader bufr = null; //将文件中的信息写到文本区域中 try { bufr = new BufferedReader(new FileReader(file)); String line = null; while((line=bufr.readLine())!=null) { area.append(line+'\n'); } } catch (IOException e2) { throw new RuntimeException("文件打开失败"); } finally { if(bufr!=null) try { bufr.close(); } catch (IOException e3) { e3.printStackTrace(); } } } }); //窗体的关闭动作监听 f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); exit.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.exit(0); } }); } }
1. 通过javac -d命令,可以把一个java文件编译到一个文件夹中。(可以给自己的文件带上包名package)
2. 在javac -d 指定的文件夹下创建一个配置文件信息,名字随意,内容是:
Main-Class:包名.要执行的class文件名
最后要有一个回车,固定格式
3. 通过jar -cvfm jar 包名.jar 配置文件名 包名
4. 生成了可以执行的jar包