一、概述及理解
java的GUI都在java.Awt和java.Swing中,其中Awt(Abstract Window ToolKit)调用系统本地系统方法实现功能,是重量级控件。Swing是在Awt的基础上,提供了更多的组件,并且完成由Java实现,是轻量的控件。 |--GUI 图形化操作界面,如打开文件对话框 |--GLI 命令行式界面操作,如DOS 建立图形化界面,会单独开一个线程。二、GUI体系图及组件
GUI应用原理是,往容器中添加组件,每个组件是具体的对象,不同类型的组件提供不同的功能。
|--GUI体系图如下![]()
|--Container
add(Component comp) 添加组件 move(Component comp) 删除组件
|--Button
addActionListener(ActionListener l)
|--TextArea append(String str) 向文本域中添加字符串
setText("") 把文件域设置为空白
|--FileDialog |--构造方法: FileDialog(Dialog parent, String title, int mode) mode - 对话框的模式,FileDialog.LOAD 或 FileDialog.SAVE
|--方法: setVisible(boolean b) 设置对话框可见 getDirectory() 获取文件的目录 getFile() 获取文件名
|--菜单
|--MenuBar 工具栏
|--Menu 菜单项
|--MenuIterm条目项
运行结果如下:package guiTest; import java.awt.FlowLayout; import java.awt.Frame; import java.awt.Menu; import java.awt.MenuBar; import java.awt.MenuItem; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class MyMenuDemo { private Frame f; private MenuBar mb; private Menu m; private Menu m1; private MenuItem mi; private MenuItem mi2; MyMenuDemo(){ init(); } //界面的初始化 public void init(){ //1.创建窗体及组件 f = new Frame("菜单栏试验"); mb =new MenuBar(); m = new Menu("文件"); m1 = new Menu("子菜单"); mi = new MenuItem("退出"); mi2 = new MenuItem("子条目"); //2.设置布局 f.setBounds(650, 150, 450,500 ); f.setLayout(new FlowLayout()); //3.添加组件 f.setMenuBar(mb); mb.add(m); m.add(m1); m1.add(mi2); m.add(mi); //4.添加监听事件 myEvent(); //5.设置可见 f.setVisible(true); } //建立监听函数myEvent(),用玩完成各类事件的监听 public void myEvent(){ //监听窗口关闭 f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); //退出按钮监听 mi.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ System.exit(0); } }); } public static void main(String[] args) { new MyMenuDemo(); } }
![]()
三、布局及操作规律
布局用于规定添加到容器中的组件的排列方式。有如下几种布局:|--FlowLayout(流式布局管理器) 从左到右的顺序排列 Panel默认的布局管理器 |--BorderLayout(边界布局管理器) Frame默认的布局管理器 如果不指定边界位置,那会以覆盖上一个组件方式放在Center |--GridLayout(网格布局管理器) 规则的矩阵 |--CardLayout(卡片布局管理器) 选项卡 |--GridBagLayout(网格包布局管理器) 非规则的矩阵
四、GUI的创建步骤
GUI的创建总体的创建步骤比较固定,
1.创建Frame窗体 |--继承Frame,创建本类对象,可以在构造方法中初始化对象 |--创建Frame对象,建立初始化对象函数init(); 2.对窗体进行基本设置 比如大小、位置、布局 3.定义组件,并将组件通过窗体的add方法添加到窗体中 4.添加事件监听(addActionListener) 5.让窗体显示,通过setVisible(true)//1.创建Frame窗体 Frame f = new Frame(); //2.设置窗体布局 f.setBounds(400, 300, 400, 300); f.setLayout(new FlowLayout()); //3.定义组件,并添加到容器中 Button bt = new Button("我是一个按键"); f.add(bt); //4.设置窗体可见 f.setVisible(true); //5.添加监听事件 f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.out.println("关闭窗口"); System.exit(0); } public void windowActivated(WindowEvent e){ System.out.println("窗口激活"); } });
五、事件监听机制
|--监听机制的元素 • 事件源(组件) • 事件(Event) • 监听器(Listener) • 事件处理(引发事件后处理方式) |--处理流程
|--监听的分类
|--窗体事件 addWindowListener(WindowListener l)Frame f = new Frame(); //监听窗口关闭 f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } });
|--Action事件 addActionListener(ActionListener l)|--键盘事件 addKeyListener(KeyListener l)|--鼠标事件 addMouseListener(MouseListener l)Button bt = new Button(); bt.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { System.out.println("我被点击了…………"); } });
<pre name="code" class="java"> Button bt = new Button(); //鼠标操作事件 bt.addMouseListener(new MouseAdapter(){ private int count; private int js; //鼠标进入按键的监听 public void mouseEntered(MouseEvent e){ System.out.println("进入……"+(js++)); } //鼠标点击两次的监听 public void mouseClicked(MouseEvent e){ if(e.getClickCount()==2) System.out.println("双击………………"+(count++)+"次"); } });
//键盘操作事件 Button bt = new Button(); bt.addKeyListener(new KeyAdapter(){ public void keyPressed(KeyEvent e){ System.out.println(e.getKeyChar()+"…………"+e.getKeyCode()); } }); bt.addKeyListener(new KeyAdapter(){ public void keyPressed(KeyEvent e){ if(e.isControlDown() && e.getKeyCode()==KeyEvent.VK_ENTER) System.exit(0); } });
六、记事本界面练习
package guiTest; /** *记事本练习: *模板系统自带记事本的功能,此事项中是GUI+IO的知识点,其中创建步骤: * GUI: * 1.创建Frame窗体 2.对窗体进行基本设置 比如大小、位置、布局 3.定义组件,并将组件通过窗体的add方法添加到窗体中 4.添加事件监听(addActionListener) 5.让窗体显示,通过setVisible(true) * IO : * 1.明确源和目的。 2,操作的数据是否是纯文本。 3,当体系明确后,再明确要使用哪个具体的对象。 */ import java.awt.FileDialog; import java.awt.Frame; import java.awt.Menu; import java.awt.MenuBar; import java.awt.MenuItem; 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.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; public class NoteDemo { //建立组件和File类对象 private Frame f; private MenuBar bar; private Menu fileMenu; private MenuItem closeItem,openItem,saveItem; private TextArea ta; private FileDialog saveDialog,openDialog; private File file; //构造函数 NoteDemo(){ //对象一建立就对界面进行初始化 init(); } //界面的初始化函数 public void init(){ //1.创建窗体及组件 f = new Frame("记事本——yeyt"); ta= new TextArea(); bar =new MenuBar(); fileMenu = new Menu("文件"); openItem = new MenuItem("打开"); closeItem = new MenuItem("退出"); saveItem = new MenuItem("保存"); saveDialog = new FileDialog(f,"保存——yeyt",FileDialog.SAVE); //保存对话框 openDialog = new FileDialog(f,"打开——yeyt",FileDialog.LOAD); //打开对话框 //2.设置布局 f.setBounds(650, 150, 650,500 ); //3.添加组件 f.setMenuBar(bar); f.add(ta); bar.add(fileMenu); fileMenu.add(openItem); fileMenu.add(saveItem); fileMenu.add(closeItem); //4.调用函数,添加所有的监听事件 myEvent(); //5.设置可见 f.setVisible(true); } //建立监听函数myEvent(),调用此函数将完成各类事件的监听 public void myEvent(){ //监听窗口关闭 f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); //退出按钮监听 closeItem.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ System.exit(0); } }); //打开openItem的监听 openItem.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ //设置对话框可见 openDialog.setVisible(true); //通过对话框获取文件的路径和文件名 String dirPath = openDialog.getDirectory(); String fileName=openDialog.getFile(); //System.out.println(dirPath+fileName); //建立File对象与文件关联 file = new File(dirPath,fileName); //如果文件不存在,则返回GUI界面 if(!file.exists()) return; //读取文件前,清空文本域 ta.setText(""); try { //对文件进行读取 BufferedReader br = new BufferedReader(new FileReader(file)); String line = null; while((line=br.readLine())!=null){ ta.append(line+"\r\n"); } br.close();//关流 } catch (Exception e2) { throw new RuntimeException("读取失败");//抛出运行异常 } } }); //保存事件监听 saveItem.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ //保存前判断文件是否存在,存在时,不打开对话框 if(file == null){ saveDialog.setVisible(true);//设置窗体可见 //获取对话框中的文件路径和文件名 String dirPath = saveDialog.getDirectory(); String fileName=saveDialog.getFile(); //file与文件名关联 file = new File(dirPath,fileName); //如果文件已存在,则返回,什么也不做 if(!file.exists()) return; } //System.out.println(dirPath+fileName); try { //流的写稿操作 BufferedWriter bw = new BufferedWriter(new FileWriter(file)); String text = ta.getText(); bw.write(text); bw.close(); } catch (Exception e2) { throw new RuntimeException("读取失败"); } } }); } public static void main(String[] args) { //建立对象运行定义的功能 new NoteDemo(); } }
![]()