GUI(布局管理器)
* FlowLayout(流式布局管理器)
 * 从左到右的顺序排列。
 * Panel默认的布局管理器。
* BorderLayout(边界布局管理器)
 * 东,南,西,北,中
 * Frame默认的布局管理器。
* GridLayout(网格布局管理器)
 * 规则的矩阵
* CardLayout(卡片布局管理器)
 * 选项卡
* GridBagLayout(网格包布局管理器)
 * 非规则的矩阵
###25.15_GUI(窗体监听)
 Frame f = new Frame("我的窗体");
 //事件源是窗体,把监听器注册到事件源上
 //事件对象传递给监听器
 f.addWindowListener(new WindowAdapter() {
           public void windowClosing(WindowEvent e) {
                      //退出虚拟机,关闭窗口
   System.exit(0);
  }
 });
适配器设计模式
* a.什么是适配器
 * 在使用监听器的时候, 需要定义一个类事件监听器接口.
 * 通常接口中有多个方法, 而程序中不一定所有的都用到, 但又必须重写, 这很繁琐.
 * 适配器简化了这些操作, 我们定义监听器时只要继承适配器, 然后重写需要的方法即可.
* b.适配器原理
 * 适配器就是一个类, 实现了监听器接口, 所有抽象方法都重写了, 但是方法全是空的.
 * 适配器类需要定义成抽象的,因为创建该类对象,调用空方法是没有意义的
 * 目的就是为了简化程序员的操作, 定义监听器时继承适配器, 只重写需要的方法就可以了.
事件处理
 * 事件: 用户的一个操作
 * 事件源: 被操作的组件
 * 监听器: 一个自定义类的对象, 实现了监听器接口, 包含事件处理方法,把监听器添加在事件源上, 当事件发生的时候虚拟机就会自动调用监听器中的事件处理方法
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
public class Demo1_Frame {
 /**
  * @param args
  */
 public static void main(String[] args) {
  Frame f = new Frame("我的第一个窗口");
  f.setSize(400, 600);       //设置窗体大小
  f.setLocation(500, 50);       //设置窗体位置
  f.setIconImage(Toolkit.getDefaultToolkit().createImage("qq.png"));
  Button b1 = new Button("按钮一");
  Button b2 = new Button("按钮二");
  f.add(b1);
  f.add(b2);
  f.setLayout(new FlowLayout());     //设置布局管理器
  //f.addWindowListener(new MyWindowAdapter());
  f.addWindowListener(new WindowAdapter() {
   @Override
   public void windowClosing(WindowEvent e) {
    System.exit(0);
   }
  });
  
  b1.addMouseListener(new MouseAdapter() {
   /*@Override
   public void mouseClicked(MouseEvent e) { //单击
    System.exit(0);
   }*/
   @Override
   public void mouseReleased(MouseEvent e) { //释放
    System.exit(0);
   }
  });
  
  b1.addKeyListener(new KeyAdapter() {
   @Override
   public void keyReleased(KeyEvent e) {
    //System.exit(0);
    //System.out.println(e.getKeyCode());
    //if(e.getKeyCode() == 32) {
    if(e.getKeyCode() == KeyEvent.VK_SPACE){
     System.exit(0);
    }
   }
  });
  
  b2.addActionListener(new ActionListener() {  //添加动作监听,应用场景就是暂停视频和播放视频
   
   @Override
   public void actionPerformed(ActionEvent e) {
    System.exit(0);
   }
  });
  f.setVisible(true);        //设置窗体可见
 }
}
/*class MyWindowListener implements WindowListener {
 @Override
 public void windowOpened(WindowEvent e) {
 }
 @Override
 public void windowClosing(WindowEvent e) {
  System.exit(0);
 }
 @Override
 public void windowClosed(WindowEvent e) {
  System.out.println("Closed");
 }
 @Override
 public void windowIconified(WindowEvent e) {
 }
 @Override
 public void windowDeiconified(WindowEvent e) {
 }
 @Override
 public void windowActivated(WindowEvent e) {
 }
 @Override
 public void windowDeactivated(WindowEvent e) {
 }
 
}
*/
/*class MyWindowAdapter extends WindowAdapter {
 @Override
 public void windowClosing(WindowEvent e) {
  System.exit(0);
 }
}*/
 

最新文章

  1. 踩坑事件:不能对基于文本的临时表使用sql insert语句
  2. 正确使用ng-if和ng-show
  3. Python导入cx_Oracle报错
  4. atitit. access token是什么??微信平台公众号开发access_token and Web session保持状态机制
  5. ruby -- 问题解决(一)无法连接mysql数据库
  6. phalcon: 资源文件管 理 引入css,js
  7. 开始接触BT5-自动登录X界面
  8. java.lang.NoSuchFieldError: VERSION_2_3_0 报错解决方案
  9. Python代码分析工具之dis模块
  10. 后缀数组--可重叠的K次最长重复子串(POJ3261)
  11. vi set number E486:Pattern not found:
  12. UESTC 1599 wtmsb【优先队列+排序】
  13. 解决Oracle登录时出现无法处理服务名问题
  14. iOS开发之Xcode8推出的WKWebView与UIWebView的使用
  15. jemter+ant+jenkins进行集成测试
  16. MyEclipse 安装插件 Github安装/使用 教程
  17. 你不知道的JavaScript-1.作用域是什么
  18. EtherCAT 要点
  19. 如何优化myeclipse.
  20. win32com问题

热门文章

  1. laravel 和 tp的区别
  2. tensorflow源码解析之distributed_runtime
  3. tensorflow源码解析之framework-tensor
  4. clang的线程安全分析模块 thread safety analysis
  5. 使用scrapy 创建爬虫项目
  6. Parrot Linux安装教程
  7. Linux下使用Google Authenticator配置SSH登录动态验证码
  8. luoguP4383 [八省联考2018]林克卡特树(树上dp,wqs二分)
  9. CF1481X Codeforces Round #699
  10. automake的使用2