GUI
Java 为 GUI 提供的 对象 都存在 java.awt 和 javax.swing 两个包中.
Java 图形化界面的 产品: eclipse 这个产品使用 纯Java 语言 编写的. 所以 这个 软件不用安装, 但是至少得有
jre(Java 语言程序的 运行环境).
1. AWT 和 Swing
-
java.awt: Abstarct Window ToolKit(抽象窗口工具包), 需要调用本地系统方法 实现功能. 属于 重量级(和系统耦合(嵌入) 紧密) 控件.
-
javax.swing: 在 AWT 的基础上, 建立的一套图形界面 系统, 其中提供了 更多的组件, 而且 完全由 Java 实现. 增强了 移植性, 属 轻量级(和系统耦合(嵌入) 较浅) 控件.
component : 组件 container: 容器 checkbox: 复选框.
TextField: 文本框: 单行文本框. TextArea: 文本区域: 多行文本框.
Panel: 面板, 一般 面板 不能独立存在, 都是 基于 Window(窗体) 的.
Frame: 小窗口.
Dialog: (弹出一个)对话框. FileDialog: 文件对话框.
Container: 为容器, 是一个特殊的组件, 该组件中 可以通过 add 方法 添加 其他 组件进来.
2. 事件 监听机制.
事件源(组件) (承载事件的源头)
事件(Event) (发生的事)
监听器(Listener) (监控 某些动作)
事件处理(引发事件后 处理方式)
画笔
实现简单画笔(paint)
- 功能:
- 实现基本窗体功能
- 在窗口内定义画图
package com.gui;
//画笔
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class Demo04 {
public static void main(String[] args) {
new Mypaint().MyFame(); //实例化
}
}
class Mypaint extends Frame {
public void MyFame(){
setBounds(100,100,400,400); //设置起始坐标和大小
setVisible(true); //可视化
addWindowListener(new WindowAdapter() { //关闭窗口事件
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
@Override
public void paint(Graphics g) {
//super.paintAll(g);
g.setColor(Color.red); //设置画笔颜色
g.drawOval(100,100,100,100); //画空心圆并设置其坐标及大小
}
}
运行结果:
鼠标监听事件
鼠标事件的事件源往往与容器相关,当鼠标进入容器、离开容器,或者在容器中单击鼠标、拖动鼠标时都会发生鼠标事件。java语言为处理鼠标事件提供两个接口:MouseListener,MouseMotionListener接口、 MouseListener接口
MouseListener接口能处理5种鼠标事件:
按下鼠标,释放鼠标,点击鼠标、鼠标进入、鼠标退出。
相应的方法有:
(1) getX():鼠标的X坐标
(2) getY():鼠标的Y坐标
(3) getModifiers():获取鼠标的左键或右键。
(4) getClickCount():鼠标被点击的次数。
(5) getSource():获取发生鼠标的事件源。
(6) addMouseListener(监视器):加放监视器。
(7) removeMouseListener(监视器):移去监视器。
要实现的MouseListener接口的方法有:
(1) mousePressed(MouseEvent e);
(2) mouseReleased(MouseEvent e);
(3) mouseEntered(MouseEvent e);
(4) mouseExited(MouseEvent e);
(5) mouseClicked(MouseEvent e);
【代码案例】
在窗口内设置一个画板,当鼠标点击画板的某一个位置时,就会在当前画板位置上画一个点。
package com.gui;
//鼠标事件监听
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;
import java.util.Iterator;
public class Demo05 {
public static void main(String[] args) {
MyFrame01 frame = new MyFrame01("画图");
}
}
//鼠标类
class MyFrame01 extends Frame{
ArrayList points;
public MyFrame01(String title){
super(title);
setBounds(200,200,400,300);
//创建一个集合用于存储画的点
points = new ArrayList<>();
setVisible(true); //可视化
this.addMouseListener(new MyMouselistener());
//关闭窗口事件
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
@Override
public void paint(Graphics g) {
//画画!监听鼠标的事件
Iterator iterator = points.iterator();
while (iterator.hasNext()){
Point point = (Point) iterator.next();
g.setColor(Color.red); //点的颜色
g.fillOval(point.x,point.y,10,10);//设置鼠标点击显示的点的属性
}
}
//添加一个点到画板上
public void addPoint(Point point){
points.add(point);
}
//适配器模式
private class MyMouselistener extends MouseAdapter{
@Override
public void mousePressed(MouseEvent e) {
MyFrame01 frame = (MyFrame01) e.getSource();
frame.addPoint(new Point(e.getX(),e.getY())); //鼠标点击画的点
//每次点击鼠标都需要重新画一遍
frame.repaint(); //刷新!帧率
}
}
}
运行结果:
窗口监听事件
【代码案例】
创建一个窗口,设置窗口激活和窗口关闭的监听事件。
package com.gui;
//窗口监听事件
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class Demo06{
public static void main(String[] args) {
new WindowFrame();
}
}
class WindowFrame extends Frame{
public WindowFrame() {
setBackground(Color.cyan);
setBounds(100,100,400,400);
setVisible(true);
this.addWindowListener(
//匿名内部类
new WindowAdapter() {
//关闭窗口
@Override
public void windowClosing(WindowEvent e) {
System.out.println("关闭窗口");
System.exit(0);
}
//激活窗口
@Override
public void windowActivated(WindowEvent e) {
WindowFrame source = (WindowFrame) e.getSource();
source.setTitle("被激活了");
System.out.println("窗口聚焦!被激活了");
}
}
);
}
}
运行结果:
键盘监听事件
接口 KeyListener
用于接收键盘事件(击键)的侦听器接口。旨在处理键盘事件的类要么实现此接口(及其包含的所有方法),要么扩展抽象 KeyAdapter 类(仅重写有用的方法)。
然后使用组件的 addKeyListener 方法将从该类所创建的侦听器对象向该组件注册。按下、释放或键入键时生成键盘事件。然后调用侦听器对象中的相关方法并将该 KeyEvent传递给它。
方法摘要 | |
---|---|
void | keyPressed(KeyEvent e)按下某个键时调用此方法。 |
void | keyReleased(KeyEvent e)释放某个键时调用此方法 |
void | keyTyped(KeyEvent e)键入某个键时调用此方法。 |
【代码案例】创建一个窗口,用于监听键盘按键,当按下按键时返回监听值。
package com.gui;
//键盘监听事件
import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
public class Demo07 {
public static void main(String[] args) {
new KeyFrame();
}
}
class KeyFrame extends Frame{
public KeyFrame(){
setBounds(100,100,300,300);
setVisible(true);
this.addKeyListener(new KeyAdapter() {
//键盘按下
@Override
public void keyPressed(KeyEvent e) {
//获得当前键盘上按下某个键,并打印码
int KeyCode = e.getKeyCode();
System.out.println(KeyCode);
if (KeyCode == KeyEvent.VK_UP);{
System.out.println("你按下了上键");
}
}
});
}
}
运行结果: