第一讲 图形化用户界面
GUI(图形用户界面)
GUI
• Graphical User Interface(图形用户接口)。
• 用图形的方式,来显示计算机操作的界面,这样更方便更直观
CLI
• Command line User Interface (命令行用户接口)
• 就是常见的Dos命令行操作。
• 需要记忆一些常用的命令,操作不直观。
Java为GUI提供的对象都存在java.Awt和javax.Swing两个包中
Awt与 Swing
• java.Awt:Abstract Window ToolKit (抽象窗口工具包),需要调用本地系统方法实现功能。属重量级控件。
• javax.Swing:在AWT的基础上,建立的一套图形界面系统,其中提供了更多的组件,而且完全由Java实现。增强了移植性,属轻量级控件
Container常用的子类:Window Panel
Window常用子类:Frame Dialog
二、布局管理器
容器中的组件的排放方式,就是布局。
常见的布局管理器:
• FlowLayout(流式布局管理器)从左到右的顺序排列。flow嘛,跟着走就是流水
• Panel默认的布局管理器。
• BorderLayout(边界布局管理器)board嘛就是打麻将,所以是东西南北中布局
• Frame默认的布局管理器。
• GridLayout(网格布局管理器)Brid网格状的
• CardLayout(卡片布局管理器)
• 选项卡
• GridBagLayout(网格包布局管理器)
• 非规则的矩阵
1 import java.awt.*; 2 /*创建步骤: 3 * 1、用Frame创建窗口 4 * 2、对窗口进行进本操作 5 * 大小setSize(),位置setLocation()、布局setLayout 6 * 3、定义组件(如Button按钮 、Label标签、Checkbox复选框等) 7 * 4、setVisible(boolean);显示窗口与否 8 */ 9 public class AwtDemo { 10 public static void main(String[] args){ 11 Frame f=new Frame("水音");//创建 12 f.setSize(500,400);//大小 13 f.setLocation(300,200);//位置 14 f.setLayout(new FlowLayout());//边界布局(桌子打麻将不仅)是默认的,这里改成流式跟班布局 15 16 Button b=new Button("有压力"); 17 f.add(b);//按钮添加在窗口 18 f.setVisible(true);//显示窗口 19 } 20 }
五、事件监听机制:
1、组合:
1)事件源(组件):awt或swing包中的图形化界面组件;
2)事件(Event):每件时间有都有自己特有的对应事件;
3)监听器:将可触发某一事件的动作,都封装在监听器中
4)事件处理:引发事件后的处理方式;
2、使用方法
1)确定事件源(容器或组件)。通过事件源对象的addXXXlistener()方法将监听器注册到该事件源上
如:
f.addWindowListener(new mylis());//主函数引用的方法 //定义一个监听器基础WindowAdapter,并复写7大方法 class mylis extends WindowAdapter { public void WindowClosing(){ System.out.println("关闭按钮被按下"); System.exit(0); } }
2)然而一般是使用你们匿名内部类方法:
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("开启");
}
});
练习:面向对象的思想做一次按钮关闭窗口的监听
1 import java.awt.*; 2 import java.awt.event.*; 3 4 class EvenDemo { 5 // 定义组件按钮和界面 6 private Frame f=null; 7 private Button but=null; 8 // 构造函数让他一new就执行 9 EvenDemo(){ 10 win(); 11 } 12 // 定义窗口 13 public void win(){ 14 f=new Frame("我是窗口"); 15 but=new Button("我是按钮"); 16 f.setBounds(250,250,250,250);//设置大小位置 17 f.setLayout(new FlowLayout());//改成流式布局 18 // f加入but 19 f.add(but); 20 myEvent(); 21 f.setVisible(true); 22 } 23 // 定义时间 24 public void myEvent(){ 25 // 窗口时间 26 f.addWindowListener(new WindowAdapter() { 27 public void windowClosing(WindowEvent e){ 28 System.exit(0); 29 } 30 }); 31 /* 32 * 那么现在让按钮做时间源的话,选择哪个监听器呢? 33 * 应该在API查阅button的描述,最后找到addActionListener 34 * 35 */ 36 but.addActionListener(new ActionListener(){ 37 38 public void actionPerformed(ActionEvent arg0) { 39 System.out.println("按钮搞上你"); 40 System.exit(0); 41 } 42 }); 43 } 44 public static void main(String[] args){ 45 new EvenDemo(); 46 } 47 }
练习大全:鼠标(进入、双击、点击),键盘(点击,组合件),文本框(输入,非法输入)的监听
1 import java.awt.*;
2 import java.awt.event.*;
3 class MouseEvent {
4 // 定义组件按钮和界面
5 private Frame f=null;
6 private Button but=null;
7 private TextField tf;
8 // 构造函数让他一new就执行
9 MouseEvent(){
10 win();
11 }
12 // 定义窗口
13 public void win(){
14 f=new Frame("我是窗口");
15 but=new Button("我是按钮");
16 f.setBounds(250,250,250,250);//设置大小位置
17 f.setLayout(new FlowLayout());//改成流式布局
18 // f加入but
19 tf=new TextField(20);
20
21 f.add(tf);
22 f.add(but);
23 myEvent();
24 f.setVisible(true);
25 }
26 // 定义时间
27 public void myEvent(){
28 // 窗口时间
29 f.addWindowListener(new WindowAdapter() {//比较多的时候是Adapter
30 public void windowClosing(WindowEvent e){
31 System.exit(0);
32 }
33 });
34 // 按钮监听
35 but.addActionListener(new ActionListener(){
36
37 public void actionPerformed(ActionEvent arg0) {
38 System.out.println("按钮搞上你");
39 // System.exit(0);
40 }
41 });
42 // 文本框注意使用的键盘监听
43 tf.addKeyListener(new KeyAdapter() {
44 public void keyPress(KeyEvent e){
45 int code=e.getKeyCode();
46 if(!(code>=KeyEvent.VK_0&&code<=KeyEvent.VK_9)){
47 System.out.println(code+""+e.getKeyCode());时间: 2024-10-11 20:14:01