黑马程序员Java基础__GUI

来源:互联网 发布:会计中级网络培训推荐 编辑:程序博客网 时间:2024/06/06 19:27
-----------android培训、java培训、java学习型技术博客、期待与您交流! ------------


一、GUI

一)概述:
GUI:Graphical User Interface,即图形用户界面,用于计算机与用户交互的一种方式。

二)计算机与用户交互的形式:GUI与CLI)

      GUI: Graphical User Interface,图形用户接口,用图形方式,来显示计算机操作界面,方便直观。

      CLI: Command Line User Interface,命令行用户接口,即常见的Dos命令行操作,须记住一些命令,不直观。

三)Awt与Swing

java.Awt包:Abstract Window Toolkit,即抽象窗口工具箱。要调用本地系统方法实现功能,属重量级控件。

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

四)继承体系


Component(java.awt )
 |--Container:可包含其他 AWT 组件的组件。
          |--Window:窗口。
              |--Frame:框架。
               |--Dialog:对话框。

                          |--FileDialog:文件对话框。
          |--Panel:面板。
 |--Button:按钮。
 |--Label:标签,作用是封装文字。
 |--Checkbox:复选框。
 |--TextComponent:文本组件。

          |--TextArea:文本框。
          |--TextField:文本区域。

五)常用方法

一)Button 

1)void | setBounds(int x, int y, int width, int height) :

 移动组件并调整其大小。


2)Button(String label) :构造一个带指定标签的按钮。


二)Container                  

 1)Component | add(Component comp):将指定组件追加到此容器的尾部。

                              

 2)void | setLayout(LayoutManager mgr):设置此容器的布局管理器。 


三)Window
 1)
 void | setSize(int width, int height):调整组件的大小,使其宽度为 width,高度为 height。

                                  

 2)void | setVisible(boolean b):根据参数 b 的值显示或隐藏此 Window。


 四) Frame

1) Frame(String title):构造一个新的、最初不可见的、具有指定标题的 Frame 对象。
                        
                       

六)创建图形化界面步骤
1、创建Frame容器:可设置标题。
2、对窗体进行设置:如大小,位置,布局等。
3、定义组件:可设置组件的名称。
4、将组件通过窗体的add方法添加到窗体中。
5、让窗体显示,通过setVisible(),通过设置参数是true还是false是否显示窗体。

                 

     
七)布局管理器
1、概述:容器中的组件的排放方式,就是布局。
2、常见的布局管理器:
1)FlowLayout(流式布局管理器):从左到右的顺序排列。

2)Panel:默认的布局管理器。


3)BorderLayout(边界布局管理器):东、南、西、北、中。


4)Frame默认的布局管理器。
 
5)GridLayout(网格布局管理器):规则的矩阵。

6)CardLayout(卡片布局管理器):选项卡。
 
7)GridBagLayout(网格包布局管理器): 非规则的矩阵。

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

示例1:鼠标和键盘事件。
import java.awt.*;import java.awt.event.*;class MouseAndKeyEvent{//创建全局变量private Frame f = null;private Button but = null;private TextField tf;//初始化窗体MouseAndKeyEvent(){init();}//创建窗体public void init(){f = new Frame("my frame");f.setBounds(300,200,600,500);f.setLayout(new FlowLayout());tf = new TextField(20);but = new Button("button");f.add(tf);f.add(but);myEvent();f.setVisible(true);}//注册事件private void myEvent(){//添加监听器,引发退出事件f.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});//给but添加一个活动监听器but.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){System.out.println("action ok");}});//给文本框添加一个监听器,引发键盘事件tf.addKeyListener(new KeyAdapter(){public void keyPressed(KeyEvent e){int code = e.getKeyCode();System.out.println(e.getKeyChar() + "..." + e.getKeyChar());if(!(code>=KeyEvent.VK_0&&code<=KeyEvent.VK_9)){e.consume();System.out.println(code + "是非法的");}});//鼠标事件//myMouseEvent();//键盘事件myKeyEvent();}//鼠标事件public void myMouseEvent(){//给but添加一个鼠标监听器but.addMouseListener(new MouseAdapter(){private int count = 1;private int clickCount = 1;private int clickCount2 = 1;public void mouseEntered(MouseEvent e){System.out.println("鼠标进入该组件" + count++);}public void mouseClicked(MouseEvent e){if(e.getClickCount()==2)System.out.println("双击动作"  + clickCount2++);//System.out.println("点击动作" + clickCount++);}});}//键盘事件public void myKeyEvent(){//给but添加一个键盘监听器but.addKeyListener(new KeyAdapter(){public void keyPressed(KeyEvent e){//组合键ctrl键和回车键同时触发if(e.isControlDown()&&e.getKeyCode()==KeyEvent.VK_ENTER)System.out.println("ctrl+enter is runing");//System.out.println(e.getKeyChar() + "..." + e.getKeyCode());//System.out.println(KeyEvent.getKeyText(e.getKeyCode()) + "..." + e.getKeyChar());}});}public static void main(String[] args) {new MouseAndKeyEvent();}


九、应用

一、菜单(Menu)

1、Menu:菜单,Menu extends MenuItem;有右三角的图标存在,可添加Menu和MenuItem。

2、MenuBar:菜单栏,可添加菜单和条目。

3、MenuItem:条目,及菜单项目,无右三角的图标存在,是最终的菜单项。


一) Menu (java.awt )
 1)构造方法:Menu(String label) :构造具有指定标签的新菜单。

 2)常用方法:MenuItem add(MenuItem mi) :将指定的菜单项添加到此菜单。


二)MenuBar(java.awt )

1)概述:是封装绑定到框架的菜单栏的平台概念。为了将该菜单栏与 Frame 对象关联,可以调用该框架的 setMenuBar 方法。

2)构造方法:MenuBar():创建新的菜单栏。

3)常用 方法: Menu add(Menu m):将指定的菜单添加到菜单栏。


  三)MenuItem (java.awt )

  1) 构造方法: MenuItem(String label) :构造具有指定的标签且没有键盘快捷方式的新菜单项。

  2)方法: void | addActionListener(ActionListener l) :添加指定的动作侦听器,以从此菜单项接收动作事件。


十、FileDialog 类


一)概述:

 显示一个对话框窗口,用户可以从中选择文件。 
   由于它是一个模式对话框,当应用程序调用其 show 方法来显示对话框时,它将阻塞其余应用程序,直到用户选择一个文件。

 二)构造方法:

   1)  FileDialog(Frame parent, String title, int mode) : 创建一个具有指定标题的文件对话框窗口,用于加载或保存文件。
   2)  static int LOAD :此常量值指示文件对话框窗口的作用是查找要读取的文件。 
   3)  static int SAVE :此常量值指示文件对话框窗口的作用是查找要写入的文件。 

三) 常用方法:

 1)  String | getDirectory() 获取此文件对话框的目录。              
 2)  String | getFile()   获取此文件对话框的选定文件。
                   

十一、jar包


一)生成步骤:

1、首先要在java文件中导入一个包,没有则需创建一个包,如package mymenu;

2、生成包:通过编译javac -d c:\myclass MyMenu.java,此时则在c盘下的myclass文件夹下生成了所有的.class文件。

3、在此目录下新建一个文件,如1.txt或者其他任意名称任意扩展名的文件都可,然后在其中编辑固定的格式:“Main-Class: mymenu.MenuDemo”,只写引号中的内容。需要需要在冒号后有一个空格,在文件末尾要回车。

4、编译:jar -cvfm my.jar 1.txt mymenu即可。如果想添加其他信息,则直接编译jar即可得出相应的命令。

5、此时双击即可执行。


示例:
import java.awt.*;//导入包  import java.awt.event.*;  import java.io.*;    public class MyMenuTest  {   //建立设为私有   private Frame f;//窗体   private MenuBar bar;//菜单栏   private TextArea ta;//文本区域   private Menu fileMenu;//菜单   private MenuItem openItem,saveItem,closeItem;//字条目       private FileDialog openDia,saveDia;//文件打开和关闭     private File file;   MyMenuTest()//构造函数.初始化就执行init函数   {    init();   }   public void init()   {    f = new Frame("my window");//建立窗体    f.setBounds(300,100,650,600);////设置窗体的坐标,和距离左上屏幕的坐标      bar = new MenuBar();//建立菜单栏      ta = new TextArea();//建立文本区域      fileMenu = new Menu("文件");//建立菜单        openItem = new MenuItem("打开");//子条目    saveItem = new MenuItem("保存");    closeItem = new MenuItem("退出");        fileMenu.add(openItem);//将条目添加到菜单中    fileMenu.add(saveItem);    fileMenu.add(closeItem);    bar.add(fileMenu);//将菜单添加到菜单栏文件中      f.setMenuBar(bar);//将菜单栏和窗体相关联        openDia = new FileDialog(f,"我要打开",FileDialog.LOAD);//创建打开,LOAD代表打开    saveDia = new FileDialog(f,"我要保存",FileDialog.SAVE);//SAVE代码保存        f.add(ta);//将文本区域添加到窗体中    myEvent();      f.setVisible(true);       }   private void myEvent()   {    //事件源是子条目保存,事件是发生操作,处理是保存.    saveItem.addActionListener(new ActionListener()    {         public void actionPerformed(ActionEvent e)     {      BufferedWriter bufw =null;      if(file==null)      {       //判断file是否为空,如果是空的话提示对话框保存并,       saveDia.setVisible(true);         //获取目录和文件       String dirPath = saveDia.getDirectory();       String fileName = saveDia.getFile();         //点击对话框取消的时候,会发生异常,进行判断       //目录或者文件是空的话就返回       if(dirPath==null || fileName==null)        return ;         //创建文件.获取文件目录和文件的抽象信息       file = new File(dirPath,fileName);      }        try      {       //建立字输出符流容器.       bufw= new BufferedWriter(new FileWriter(file));              String text = ta.getText();//调用TextArea父类的getText()方法,获取文本组件表示的文本         bufw.write(text);//输出.            }      catch (IOException ex)      {       throw new RuntimeException("保存错误啦");      }      finally      {       try       {        if(bufw!=null)         bufw.close();//关闭流       }       catch (IOException ex)       {        throw new RuntimeException("字符输出流关闭失败");       }      }     }    });    //事件源是openItem打开.事件是发生操作时.处理时保存    openItem.addActionListener(new ActionListener()    {     public void actionPerformed(ActionEvent e)     {      BufferedReader bufr =null;        //提示对话框打开,获取路径和文件      openDia.setVisible(true);      String dirPath = openDia.getDirectory();      String fileName = openDia.getFile();            //[判断是路径和文件否为空      if(dirPath==null || fileName==null)       return ;        //清空文本区域      ta.setText("");        //创建文件.获取文件目录和文件的抽象信息      file = new File(dirPath,fileName);        try      {       //建立字输出符流容器.       bufr = new BufferedReader(new FileReader(file));         String line = null;         //输出       while((line=bufr.readLine())!=null)       {        ta.append(line+"\r\n");       }         bufr.close();      }      catch (IOException ex)      {       throw new RuntimeException("读取失败");      }      finally      {       try       {        if(bufr!=null)         bufr.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 MyMenuTest();   }  }  



-----------android培训、java培训、java学习型技术博客、期待与您交流! ------------
原创粉丝点击