图形用户界面GUI-基本操作

1.概述
  • 用图形的方式,来显示计算机操作的界面,这样更方便更直接;
  • java为GUI提供的对象都在java.Awt和javax.Swing两个包中
    • java.Awt抽象窗口工具包,需要调用本地系统方法实现功能(受系统平台影响,和系统依赖性教大)。属于重量级控件。
    • javax.Swing:在AWT的基础上,建立的一套图形界面系统,其中提供了更多的组件。而且完全有java实现。增强了移植行,属于轻量级控件。
  • 常用构件的继承关系图
          
      Container:为容器,是一个特殊的组件,该组件可以通过add方法添加其他组件进来。
                          比如:Panel面板上可以放多个按钮Button/Label等。
  • 布局管理器
          常见的布局管理器
  • FlowLayout布局
    • 居中排放,然后从左到右
  • BorderLayout边界布局管理器
    • 东西南北中
    • Frame默认的布局管理器
  • GridLayout(卡片布局管理器)
    • 选项卡
  • GridBagLayout(网格包布局管理器)
    • 非规则的矩阵(eg:计算器)
2.创建图形化界面窗体
  • 步骤
    • 创建frame窗体;
    • 对窗体进行基本设置
      • 比如大小、位置、布局
    • 定义组件
    • 将组件通过窗体的add方法添加到窗体上
    • 让窗体显示,通过setVisible(true)方法
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;

public class AwtDemo {
 public static void main(String[] args) {
  //构造一个新的、最初不可见的、具有指定标题的 Frame 对象。
  Frame f= new Frame("my Frame");
  //设置窗体的长、宽
  f.setSize(500,400);
  //窗体显示出来时的坐标位置
  f.setLocation(300,200);
  //设置窗体的布局
  f.setLayout(new FlowLayout());//流式布局
  //添加一个button
  Button b = new Button("我是一个按钮");
  //需要添加到窗体上
  f.add(b);
  //不加这句话窗体不会显示出来的
  f.setVisible(true);
 }
}
效果图是:(但是窗体的关闭按钮不能用)

3.事件监听机制

事件监听机制的特点
  • 事件源
    • 就是awt包或这swing包中的那些图形界面组件
  • 事件
    • 每一个事件源都有自己特有的对应事件和共性事件
  • 监听器
    • 将可以出发某一个事件的动作(不只一个动作)都已经封装到了监听器中
  • 事件处理
      前三者,在java中都已经定义好了,直接获取其对象来用就可以了。
实例:演示上述窗体的关闭、打开、激活(显示在最前端)
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class AwtDemo {
 public static void main(String[] args) {
  //构造一个新的、最初不可见的、具有指定标题的 Frame 对象。
  Frame f= new Frame("my Frame");
  //设置窗体的长、宽
  f.setSize(500,400);
  //窗体显示出来时的坐标位置
  f.setLocation(300,200);
  //设置窗体的布局
  f.setLayout(new FlowLayout());//流式布局
  //添加一个button
  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);
 }
}
4.按钮事件
上述窗体关闭优化+点击按钮关闭窗体
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
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;

public class ButtonDemo {
 Frame f;
 Button Closebut;
 Button ClickBut;
 Button PrekeyBut;

 public static void main(String[] args) {
  new ButtonDemo();
 }
 public ButtonDemo() {
  init();
 }
 public void init() {
  f = new Frame("My Frame");
  // 对Frame进行基本设置。坐标长宽
  f.setBounds(300, 100, 500, 400);
  f.setLayout(new FlowLayout());
  Closebut = new Button("点击按钮关闭窗体");
  f.add(Closebut);
  ClickBut = new Button("测试鼠标点击事件");
  f.add(ClickBut);
  PrekeyBut= new Button("测试键盘事件");
  f.add(PrekeyBut);
  myEvent();
  f.setVisible(true);
 }

 public void myEvent() { // 关闭窗体
  f.addWindowListener(new WindowAdapter() {
   public void windowClosing(WindowEvent e) {
    System.exit(0);
   }
  });
  // 让按钮具备退出程序的功能
  /*
   * 按钮就是事件源 监听器是addActionListener
   */

  Closebut.addActionListener(new ActionListener()
  {
   public void actionPerformed(ActionEvent e)
   {
    System.exit(0);//点击按钮关闭窗体
   }

  });
  //鼠标点击事件
  ClickBut.addMouseListener(new MouseAdapter()
  {
   private int count=1;
   private int clickCount=1;
   private int DoubleclickCount=1;
   
   //光标定位到按钮上,就输出一次
   public void mouseEntered(MouseEvent e)
   {
    System.out.println("鼠标进入到该组件"+count++);
   }
   //单击、双击
   public void mouseClicked(MouseEvent e)
   {  
    if(e.getClickCount()==2)
       System.out.println("双击动作"+DoubleclickCount++);
    else
     System.out.println("单击动作"+clickCount++);
   }
  });
  //给Prekeybut添加一个键盘监听
  PrekeyBut.addKeyListener(new KeyAdapter()
  {
   public void keyPressed(KeyEvent e)
   {
    if(e.isControlDown()&&e.getKeyCode()==KeyEvent.VK_ENTER);
    System.exit(0);
   }
  });
 }
}
运行结果:点击第一个按钮,窗体关闭
                  光标移动到第二个按钮上:鼠标进入到该组件1
                  单击第二个按钮:单击动作1
                  双击第二个按钮:双击动作2
                  点击第三个按钮:点击键盘上的ctrl和enter组合键,关闭窗体
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值