P3:Java之GUI编程

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)

  • 功能:
  1. 实现基本窗体功能
  2. 在窗口内定义画图
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传递给它。

方法摘要
voidkeyPressed(KeyEvent e)按下某个键时调用此方法。
voidkeyReleased(KeyEvent e)释放某个键时调用此方法
voidkeyTyped(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("你按下了上键");
                }
            }
        });
    }
 }

运行结果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值