GUI(图形用户界面)

GUI:

     Graphical User Interface(图形用户接口)

     用图形的方式,来显示计算机的操作界面,这样更方便直观。

CLI:

     Command Line User Interface(命令行用户接口)

     就是常见的Dos命令行操作,需要记忆一些常用的命令,操作不直观。



Java为GUI提供的对象都存在Java.awt和Java.swing这两个包中。

java.awt:

Abstract Window Toolkit(抽象窗口工具包),需要调用本地系统方法实现功能,属重量级控件。

java.swing:

在AWT的基础上,建立的一套图形界面系统,其中提供了更多的组件,而且完全由java实现,

增强了移植性,属轻量级控件。

布局管理器:

     FlowLayout(流式布局管理器)

从左到右的顺序排列,Panel的默认布局管理器。

     BorderLayout(边界布局管理器)

东西南北中,Frame的默认布局管理器

     GridLayout(网络布局管理器)

规则的矩阵

     CardLayout(卡片布局管理器)

选项卡

     GridBagLayout(网络包布局管理器)

非规则的矩阵


事件监听机制:

组成:事件源(组件),事件(Event),监听器(Listener),事件处理(引发事件后处理方式)

流程:1.将监听器注册到事件源

      2.有监听器所监听的动作作用于事件源

      3.产生事件对象

      4.将事件对象传给事件处理方式


package day25;

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.WindowAdapter;

import java.awt.event.WindowEvent;


public class FrameDemo {


/**

* @param args

*/

public static void main(String[] args) {

Frame f=new Frame("My Frame");

//f.setLocation(400,200);      //定义窗口出现的位置,距离屏幕左边400,上边150

//f.setSize(500, 400);   //定义窗口的大小,500为横向,400为竖向

f.setBounds(400, 200,500, 400);

f.setLayout(new FlowLayout());    //设置流式布局,否则下面加的按钮就会按照默认的边界布局,布满整个窗口。

Button but=new Button("这是一个关闭窗口的按钮");    

f.add(but);         //添加完了,但是发现这个窗口一直无法关掉,只有点击eclipse控制台的红色强制结束按钮才能关闭。

//怎么正常关掉这个窗口呢?   这就用到了一个重要的机制---事件监听机制。

f.addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent e){

System.exit(0);

}

});         //内部类,WindowAdapter是个抽象类,但是没有抽象方法,这些方法里啥都没写,要用那个就要覆盖那个,它的存在就是为了方便创建监听器对象,这就是适配器。

//现在窗口可以关闭了,但是按钮按着没用,这就需要在按钮上再加个监听器。

but.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

System.exit(0);

}

});      //ActionListener中只有一个方法,所以不需要适配器。WindowListener中方法很多,所以需要适配器WindowAdapter。

f.setVisible(true);

System.out.println("over");

}

}




package day25;

import java.awt.Button;

import java.awt.FlowLayout;

import java.awt.Frame;

import java.awt.TextField;

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 MouseAndKeyDemo {

private Frame f;

private TextField tf;

private Button but;

public MouseAndKeyDemo() {

init();

}



private void init() {

f=new Frame("演示鼠标和键盘监听");

f.setBounds(600,400,600, 600);

f.setLayout(new FlowLayout());

tf=new TextField(35);

but=new Button("一个按钮");

f.add(tf);

f.add(but);

myEvent();

f.setVisible(true);

}

private void myEvent(){

//给窗口关闭按钮加个监听器

f.addWindowListener(new WindowAdapter() {

@Override

public void windowClosing(WindowEvent e) {

System.exit(0);

}

});

//在按钮上添加一个鼠标监听器。

but.addMouseListener(new MouseAdapter() {

private int count=1;        //记录按钮执行次数

@Override

public void mouseEntered(MouseEvent e) {

System.out.println("mouse enter..."+count++);

}

@Override

public void mouseClicked(MouseEvent e) {

tf.setText("mouse enter..."+count++);   //把这句话显示在文本框tf中

if(e.getClickCount()==2){

tf.setText("双击不顶用,哥们");

}

}

});

//给文本框添加一个键盘监听器

tf.addKeyListener(new KeyAdapter() {


@Override

public void keyPressed(KeyEvent e) {

//System.out.println(e.getKeyChar()+":::"+e.getKeyCode());   //不过这个如果按shift就有问题了,下面的就不会

System.out.println(KeyEvent.getKeyText(e.getKeyCode())+":::"+e.getKeyCode());

//这个方法不是静态的,不用对象。这下无论空格    shift ctrl都可以显示了。

/*

* if(!(code>=KeyEvent.VK_0&&code<=KeyEvent.VK_9)){

* System.out.println("必须是数字");

* e.consume();

* }

*/

//组合键。   必须两个一块按。

if(e.isControlDown()&&e.getKeyCode()==KeyEvent.VK_ENTER){

System.out.println("enter run ...");

}

}

});

}



public static void main(String[] args) {

new MouseAndKeyDemo();

}


}