黑马程序员Java基础__GUI



一、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();  
 }  
}  



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值