黑马程序员——图形用户界面GUI总结及练习

来源:互联网 发布:cdn系统源码 编辑:程序博客网 时间:2024/05/21 06:58
 ------- android培训、java培训、期待与您交流! ----------


GUI(图形用户界面)
Graphical User Interface(图形用户接口)
用图形的方式,来显示计算机操作的界面,这样更方便直观。


CLI
Command Line User Interface(命令行用户接口)
就是常见的Dos命令行操作。
需要记忆一些常用的命令,操作不直观。


Java为GUI提供的对象存在java.Awt和javax.Swing两个包中。


Awt与Swing的区别:
java.Awt:Abstract Window ToolKit(抽象窗口工具包),需要调用本地系统方法实现功能。
属于重量级控件。


java.Swing:在Awt的基础上,建立的一套图形界面系统,其中提供了更多的组件,而且完全有Java实现。
增强的移植行,属于轻量级控件。


布局管理器
容器中的组件的排放方式,就是布局。


常见的布局管理器:
1,FlowLayout:流式布局管理器。从左向右排列,是Panel默认的布局管理器
2,BorderLayout:边界式布局管理器,东南西北中的排列方式,是Frame的默认布局管理器。如果窗体中只有一个组件,将会覆盖整个窗体。
3,GridLayout:网格式布局管理器,规则的矩阵
4,CardLayout:卡片式布局管理器,即选项卡
5,GridBayLayout:网格包布局管理器,非规则矩阵


创建图形化界面简单设置方法:
1,创建frame窗体;
2,对窗体进行进本设置;比如大小,位置,布局等。
3,定义组件;
4,将组件通过窗体的add方法添加到窗体中;
5,让窗体显示,通过setVisible(true)。


事件监听机制
特点:
1,事件源(组件):awt或swing包中的那些图形界面组件
2,事件:每一个事件源都有自己特有的对应事件和共性事件
3,监听器:将可触发某一事件的动作(不只一个动作),都封装到侦听器中
4,事件处理:引发事件后的处理方式。


前三者在java中都已经定义好,直接获取其对象来操作即可,我们需要做的事情是对产生的动作进行处理。


具体操作练习:

import java.awt.*;import java.awt.event.*;import java.io.*;class FrameTest{private Frame f;private TextField tf;private Button bu;private TextArea ta;FrameTest(){init();}public void init(){f = new Frame("My Frame");//创建Frame窗体,并设置标题。f.setBounds(300,100,500,400);//对窗体进行基本设置。f.setLayout(new FlowLayout());//设定指定的布局管理器、tf = new TextField(30);//定义组件,并设置属性bu = new Button("转到");ta =new TextArea(15,40);f.add(tf);//将组件通过窗体的add()方法添加在窗体中f.add(bu);f.add(ta);myEvent();f.setVisible(true);//让窗体显示。}private void myEvent()//设定相关事件{bu.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){String dirPath =tf.getText();File dir=new File(dirPath);if(dir.exists()&&dir.isDirectory()){ta.setText("");String[] names =dir.list();for(String name : names){ta.append(name+"\r\n");}}}});f.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);//关闭窗口程序}});} public static void main(String[] args){new FrameTest();}}




运行后的结果如图所示:





练习:利用Menu组件完成一个简单的记事本程序。 
需求:具有文件菜单,文件中有打开,保存和退出功能。

import java.io.*;import java.awt.*;import java.awt.event.*;class MenuTest{//定义组件引用private Frame f;private MenuBar mb;private TextArea ta;private Menu mu;private MenuItem openItem,saveItem,closeItem;private FileDialog  openDia,saveDia;private File file;MenuTest()//定义构造函数{init();}public void init()//功能实现{f = new Frame("my test");f.setBounds(300,100,500,600);ta=new TextArea();mb=new MenuBar();mu=new Menu("File");openItem=new MenuItem("open");saveItem=new MenuItem("save");closeItem=new MenuItem("close");mu.add(openItem);//添加组件mu.add(saveItem);mu.add(closeItem);mb.add(mu);f.setMenuBar(mb);openDia=new FileDialog(f,"my open",FileDialog.LOAD);saveDia=new FileDialog(f,"my save",FileDialog.SAVE);f.add(ta);myEvent();//调用事件监听机制f.setVisible(true);//显示窗体}private void myEvent(){saveItem.addActionListener(new ActionListener()//文件保存功能{public void actionPerformed(ActionEvent e){if(file==null){saveDia.setVisible(true);String dir = openDia.getDirectory();String fileName=openDia.getFile();if(dir==null ||fileName==null)return;file = new File(dir,fileName);}try{BufferedWriter budw =new BufferedWriter(new FileWriter(file));String text =ta.getText();budw.write(text);budw.close();}catch(IOException ex){throw new RuntimeException("读取失败");}}});openItem.addActionListener(new ActionListener()//打开文件功能{public void actionPerformed(ActionEvent e){openDia.setVisible(true);String dir = openDia.getDirectory();String fileName=openDia.getFile();if(dir==null ||fileName==null)return;ta.setText("");//每次打开文件时,将文本区的内容清空file = new File(dir,fileName);try{BufferedReader budr =new BufferedReader(new FileReader(file));String line =null;while((line=budr.readLine())!=null){ta.append(line+"\r\n");}budr.close();}catch(IOException ex){throw new RuntimeException("读取失败");}}});closeItem.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 MenuTest();}}

结果如图:


0 0
原创粉丝点击