黑马程序员_源自梦想 GUI

-------  android培训 java培训 、期待与您交流! ---------

GUI

全称:Graphical User Interface(图形用户接口)
两个很重要的包
java.Awt:(Abstract Window ToolKit抽象窗口工具包)
需要调用本地系统方法实现功能.属重量级控件,跨平台性不是很好.
javax.Swing: 在AWT的基础上,建立的一套图形化几面系统.
构成:
Component(构件,组件)
 |--Container(容器,特殊的子类)
    |--Window(窗口)
        |--Frame(框架,窗体)
        |--Dialog(对话框)
    |--Panel(面板)
 //下面与Container同级,但是不能添加组件
 |--Button(按钮)
 |--Label(标签,作用在于封装文字)
 |--Checkbox(复选框)

布局管理器

 |-- FlowLayout(流式布局管理器)
从左到右的顺序排列
 |-- BorderLayout(边界布局管理器)
    东,南,西,北,中(默认居中   添加新组件就会覆盖)
 |--GridLayout(网格布局管理器)   计算器(规则的矩阵)
 |--CardLayout(卡片布局管理器)    选项卡(右键 -->属性) 
 |--GridBagLayout(网格包布局管理器)  非规则布局    

Frame

|--component是一个具有图形表示能力的对象,可在屏幕上显示,并可与用户进行交互。
|--container add(Component comp,int index)  可以添加索引
    将指定的组件添加到此容器的给定位置上
  container能够添加组件   那些组件都是对象,它把对象都添加到窗体当中,代表了 (它内部其实封装了一个集合),它把这些组件对象都添加到集合当中,都带着角标。所以你可以在其任意的位置上添加元素.
|--Frame()构造一个最初不可见的Frame新实例()
通过5步来完成,图形化界面的制作
1.创建frame窗体
2.对窗体进行基本设置 
   比如大小,位置,布局
3.定义组件
4.将组件通过窗体的add方法添加到窗体中。
5.让窗体显示,通过setVisible(true).                                                                                                                                                                                     
public class AwtDemo{
 public static void main(String[] args)
 {
  Frame f = new Frame("my awt");
  f.setSize(500,100);   //设置长宽 500,100
  f.setLocation(300,,200);//设置本地位置(top,left)  300,200
  f.setVisible(true); //显示窗体
  f.setLayout(new FolwLayout());  // 创建流式布局管理器

  Button b = new Button("我是一个按钮");  //
  f.add(b);//用容器的add方法将这个按钮加进来
 }  
}

事件监听机制

事件监听机制的组成:
1, 事件源
2, 事件
3, 监听器
4, 事件处理方式
事件监听机制的特点

事件源:就是awt包或者swing包中的那些图形界面组件
事件:每一个事件源都有自己特有的对应事件和共性事件.
监听器:可以触发某一个事件的动作(不止一个动作)都已经封装到了监听器中.
import java.awt.*;
import java.awt.event.*;

class AwtDemo {
 public static void main(String[] args)
 {

  Frame f = new Frame("my awt");
  
  //设置窗体大小
  f.setSize(500,400);
  
  //设备位置位置,距左上方
  f.setLocation(300,20);
  
  //设置布局管理
  f.setLayout(new FlowLayout());
  
  //按钮
  Button b = new Button("我是一个按钮");
  
  //将按钮添加到窗体当中
  f.add(b);
  
//注册监听器
  f.addWindowListener(new WindowAdapter()
    {
     //关闭窗口
     public void windowClosing(WindowEvent e)
     {
      System.out.println("关闭窗口");
      System.exit(0);
     }
     //窗体前置
     public void windowActivated(WindowEvent e)
     {
      System.out.println("被触发了..");
     }
     //窗体打开
     public void windowOpened(WindowEvent e)
     {
      System.out.println("打开窗体");
     }
    });
  //显示窗体
  f.setVisible(true);
 }
}
//应为WindowListener的子类windowASdapter已经实现了WindowListener接口.
//并覆盖了其中的所有方法.那么我只需要继承自WindowAdapter覆盖我需要的方法即可
class MyWin extends WindowAdapter
{
 public void windowClosing(WindowEvent e)
 {
  System.out.println("window closing");
  System.exit(0);
 }
}
 //键盘事件
  tf.addKeyListener(new KeyAdapter()
  {
   public void keyPressed(KeyEvent e)
   {
    int code = e.getKeyCode();
    if(!(code>=KeyEvent.VK_0 && code<= KeyEvent.VK_9))
    { 
     e.consume();//使用此事件,以便不会按照默认的方式由产生此事件的源代码来处理此事件。
     System.out.println(code+"您输入的是非法的");
     
    }
   }
  });
  
  //给but添加一个监听
  but.addKeyListener(new KeyAdapter()
  {
   public void keyPressed(KeyEvent e)
   {
    //组合按键,ctrl+enter
    if(e.isControlDown()&&e.getKeyCode()==KeyEvent.VK_ENTER)
     System.exit(0);

    //如果按键是esc就退出
    //if(e.getKeyCode()==KeyEvent.VK_ESCAPE)
    // System.exit(0);
    
    
    //KeyEvent.getKeyText(e.getKeyCode())打印输入内容
    //System.out.println(KeyEvent.getKeyText(e.getKeyCode())+"...."+e.getKeyCode());
   }
  });
  
 //鼠标事件  
  but.addMouseListener(new MouseAdapter()  
  {  
   int count = 1;  
   int clickcount = 1;  
   //鼠标进入事件  
   public void mouseEntered(MouseEvent e)  
   {  
    System.out.println("鼠标进入该按钮"+count++);  
   }  
   public void mouseClicked(MouseEvent e)  
   {  
    //getClickCount()获取鼠标连击次数  
    if(e.getClickCount()==2)  
    System.out.println("鼠标双击事件"+clickcount++);  
   }  
  });  
//TextArea列出指定路径目录和文件名
but.addActionListener(new ActionListener()  
  {  
   public void actionPerformed(ActionEvent e)  
   {  
    /* 
    String text = tf.getText(); 
    //System.out.println(text); 
    ta.setText(text); 
    tf.setText("");//清空内容 
    */  
      
    String dirPath = tf.getText();  
    File dir = new File(dirPath);//封装成对象  
    if(dir.exists() && dir.isDirectory())//dir存在,并且是目录  
    {  
     ta.setText("");//清空上一次查询  
       
     String[] names = dir.list();  
     for(String name : names)  
     {  
      //ta.setText(name+"\r\n");  
      ta.append(name+"\r\n");  
     }  
    }  
   }  
  });  

菜单

|--MenuBar菜单条
|--Menu菜单
|--MenuItem菜单项
public class MyMenuDemo {
	private Frame f;
	private MenuBar mb;// 菜单栏
	private Menu m, subMenu;// 菜单
	private MenuItem closeItem, subItem;// 子菜单

	MyMenuDemo() {
		init();
	}
	public void init() {
		f = new Frame();
		f.setBounds(100, 100, 500, 600);
		f.setLayout(new FlowLayout());

		mb = new MenuBar();
		m = new Menu("文件");
		closeItem = new MenuItem("退出");
		subItem = new MenuItem("子条目");
		subMenu = new Menu("子菜单");

		f.setMenuBar(mb);// 添加菜单
		mb.add(m);// 添加"文件"
		m.add(subMenu);// 文件下面添加子菜单
		subMenu.add(subItem);// 子条目
		m.add(closeItem);

		f.setVisible(true);
	}

	public static void main(String[] args) {
		new MyMenuDemo();
	}
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值