1.GUI 图形用户界面:
Graphical User Interface(图形用户接口)
CUL 命令行界面:
Command line User Interface(命令行用户接口)
如:Dos命令行操作。
Java为GUI提供的对象都存在java.awt 和 java.swing 两个包中。
(Java做图形化界面相对较少,得先装虚拟机。一般用C++等,Windows内置了C++的解析器。)
2.awt , swing包
1.java.awt: Abstract Window ToolKit(抽象窗口工具包),需要调用本地系统方法实现功能。属于重量级控件。
2.javax.swing: 在AWT的基础上,建立一套图形界面系统,其中提供了更多的组件,而且完全由Java实现,增强了移植性,属于轻量级控件。
3.AWT
(1)继承关系图:
api:
component 是一个具有图形表示能力的对象,可在屏幕上显示,并可与用户进行交互。典型图形用户界面中的按钮、复选框和滚动条都是组件示例。
Component 类是与菜单不相关的 Abstract Window Toolkit 组件的抽象超类。还可以直接扩展类 Component 来创建一个轻量级组件。轻量级组件是与本机不透明窗口不相关的组件。
类 Container
一般的 Abstract Window Toolkit(AWT) 容器对象是一个可包含其他 AWT 组件的组件。
添加到容器中的组件放在一个列表中。列表的顺序将定义组件在容器内的正向堆栈顺序。如果将组件添加到容器中时未指定索引,则该索引将被添加到列表尾部(此后它位于堆栈顺序的底部)。
(2)布局管理器:
坐标式布局。
4.Frame演示:
public class AWTDemo {
public static void main(String[] args) {
Frame f =new Frame("my frame");
// f.setSize(500, 400); //像素值
// f.setLocation(400, 200); //坐标位置
f.setBounds(400, 200, 500, 400);
f.setLayout(new FlowLayout()); //设置流式布局,默认上居中
Button but =new Button("一个按钮");
f.add(but); //将按钮放在窗体中。窗体默认布局是边界式布局,默认窗口全占
f.setVisible(true);
}
}
5.事件监听机制 组成:
1.事件源(组件):小强
2.事件(Event):被揍
3.监听器(Listener):保镖
4.事件处理(引发事件后的处理方式):还击
示例1: 添加窗口监听器
Frame.addWindowListener(WindowListener w)
WindowListener接口的(适配器类)抽象子类:WindowAdapter
public class AWTDemo {
public static void main(String[] args) {
Frame f =new Frame("my frame");
// f.setSize(500, 400); //像素值
// f.setLocation(400, 200); //坐标位置
f.setBounds(400, 200, 500, 400);
f.setLayout(new FlowLayout()); //设置流式布局,默认上居中
Button but =new Button("一个按钮");
f.add(but); //将按钮放在窗体中。窗体默认布局是边界式布局,默认窗口全占
f.addWindowListener(new WindowAdapter(){
//添加监听器,参数是WindowListener接口对象,即继承它的抽象子类WindowAdapter
//然后重写要用到的监听方法。
@Override
public void windowClosing(WindowEvent e) {
super.windowClosing(e);
// System.out.println("closing......");
System.exit(0);
}
});
//WindowListener接口的抽象子类WindowAdapter实现了该接口的所有方法,但是没有抽象方法,
//目的是为了方便创建监听器对象。继承它覆盖其中一个方法就可以了
f.setVisible(true);
}
}
示例2:添加按钮监听器
Button.addActionListener(ActionListener a)
ActionListener接口只有一个抽象方法,直接实现。
public class AWTDemo {
public static void main(String[] args) {
Frame f =new Frame("my frame");
// f.setSize(500, 400); //像素值
// f.setLocation(400, 200); //坐标位置
f.setBounds(400, 200, 500, 400);
f.setLayout(new FlowLayout()); //设置流式布局,默认上居中
Button but =new Button("退出");
f.add(but); //将按钮放在窗体中。窗体默认布局是边界式布局,默认窗口全占
//在按钮上加上一个监听。
but.addActionListener(new ActionListener(){
//添加按钮监听器,参数是ActionListener接口对象,它只有一个抽象方法,所以没有适配器类,
//直接实现这个接口,然后实现抽象方法。
@Override
public void actionPerformed(ActionEvent e) { //事件和事件对象
//事件发生时事件对象自动返回
System.exit(0); //事件处理
}
});
f.addWindowListener(new WindowAdapter(){
//添加窗口监听器,参数是WindowListener接口对象,即继承它的(适配器类)抽象子类WindowAdapter
//然后重写要用到的监听方法。
@Override
public void windowClosing(WindowEvent e) { //事件和事件对象
//事件发生时事件对象自动返回
super.windowClosing(e);
// System.out.println("closing......");
System.exit(0); //事件处理
}
});
//WindowListener接口的(适配器类)抽象子类WindowAdapter实现了该接口的所有方法,但是没有抽象方法,
//目的是为了方便创建监听器对象。继承适配器类覆盖其中一个方法就可以了
f.setVisible(true);
}
}
6.鼠标事件,窗口事件:
public class MouseAndKeyDemo {
private Frame f;
private TextField tf;
private Button but;
public MouseAndKeyDemo(){
init();
}
private void init() {
f = new Frame("演示鼠标和键盘监听");
f.setBounds(400, 200, 500, 400);
f.setLayout(new FlowLayout());
tf = new TextField(15);
but = new Button("一个按钮");
f.add(tf);
f.add(but);
myEvent();
f.setVisible(true);
}
private void myEvent() {
//给文本框添加键盘监听
tf.addKeyListener(new KeyAdapter() {
private int count = 1;
@Override
public void keyPressed(KeyEvent e) {
super.keyPressed(e);
// if(e.getKeyCode() == KeyEvent.VK_ENTER){ //回车
// tf.setText(""+count++);
// }
// if(e.isControlDown() &&( e.getKeyCode() == KeyEvent.VK_ENTER)){
//ctrl+回车
// tf.setText(""+count++);
// }
//
int code = e.getKeyCode();
if(!(code>=KeyEvent.VK_0&& code<=KeyEvent.VK_9)){
e.consume();//不会按照默认的方式,由产生此事件的源代码来处理此事件。
System.out.println("必须是数字!");
}
}
});
//窗口退出事件
f.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
super.windowClosing(e);
System.exit(0);
}
});
//在按钮上添加一个鼠标监听事件(当鼠标监听和按钮监听同时存在时,鼠标监听优先)
but.addMouseListener(new MouseAdapter() {
private int count = 1;
@Override
public void mouseClicked(MouseEvent e) {
super.mouseClicked(e);
if(e.getClickCount()==2){ //双击
tf.setText(""+ count++);
}
}
});
}
public static void main(String[] args) {
new MouseAndKeyDemo();
}
}
7.Swing演示,安装GUI插件jigloo:
8.菜单