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();
}
}