8 GUI实例

news2024/11/17 6:36:24

GUI

1 Frame

用来创建窗口,构造函数如下:

  • public Frame() throws HeadlessException
  • public Frame(String title) throws HeadlessException

常用方法如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FwObPm3i-1672287849963)(C:\Users\ALANSHAO\AppData\Roaming\Typora\typora-user-images\image-20221106175224971.png)]

public class gui_v1 {
    public static void main(String[] args) {
        Frame f = new Frame();
        f.setTitle("啊八八八八吧");
        f.setLocation(1000,500);
        f.setSize(300,300);
        f.setVisible(true);
    }
}

2 Button和TextField

2.1 Button

用来创建按钮,构造方法是Button(String label)

public class gui_v1 {
    public static void main(String[] args) {
        Frame f = new Frame();
        Button b = new Button("abc");
        f.setTitle("啊八八八八吧");
        f.setLocation(1000,500);
        f.setSize(300,300);
        f.add(b);
        f.setVisible(true);
    }
}

2.2 TextField

用来创建一个单行的编辑框,常用构造方法是:

  • public TextField() throws HeadlessException
  • public TextField(String text) throws HeadlessException
public class gui_v2 {
    public static void main(String[] args) {
        Frame f = new Frame("im learning");
        TextField t = new TextField("im text");
        f.setLocation(500,500);
        f.setSize(300,300);
        f.add(t);
        f.setVisible(true);
    }
}

3 Component

是能够在屏幕上显示的图形化的表现形式,能够和用户进行交互

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-50VEmnkz-1672287849964)(C:\Users\ALANSHAO\AppData\Roaming\Typora\typora-user-images\image-20221106180650987.png)]

4 布局管理器

布局管理器是Java对象,作用是管理组件的布局。Container是提供setLayout()方法进行布局设置。

public class Container_v1 {
    public static void main(String[] args) {
        Frame f = new Frame("im studting!");
        Button b1 = new Button("abc");
        Button b2 = new Button("def");
        FlowLayout fl = new FlowLayout();

        f.setSize(1000,500);
        f.setLocation(300,300);
        f.setLayout(fl);

        f.add(b1);
        f.add(b2);
        f.setVisible(true);
    }
}
  1. Flowlayout

将容器中的组件逐行排列,一行排满之后再换行。可以设置空间间距及对齐方式

  1. Borderlayout

将容器划分东西南北中,每个区域只能放一个组件

Frame和diago是默认的Borderlayout

public class Container_v3 {
    public static void main(String[] args) {
        Frame f = new Frame();
        Button b1 = new Button("b1");
        Button b2 = new Button("b2");
        Button b3 = new Button("b3");
        Button b4 = new Button("b4");
        Button b5 = new Button("b5");

        f.setSize(1000,500);
        f.setLocation(300,300);
        f.add(b1,BorderLayout.EAST);
        f.add(b2,BorderLayout.CENTER);
        f.add(b3,BorderLayout.NORTH);
        f.add(b4,BorderLayout.WEST);
        f.add(b5,BorderLayout.SOUTH);

        f.setVisible(true);
    }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NU0PG7Pt-1672287849965)(C:\Users\ALANSHAO\AppData\Roaming\Typora\typora-user-images\image-20221106204743771.png)]

5 Dialog和panel

dialog就是对话框,都是window的子类,与Frame的主要区别在于Frame可以包含菜单栏,Dialog是不能包含菜单栏的。

dialog不可以作为主界面,必须具备拥有者,作为特定功能为用户交互。

public class dialog_v1 {
    public static void main(String[] args) {
        Frame f = new Frame();
        Dialog d = new Dialog(f);
        d.setSize(1000,500);
        d.setLocation(300,300);
        d.setVisible(true);
    }
}

Panel是container但是不是window,必须附着再顶层容器之上。默认布局管理器是Flowlayout

public class panel_v1 {
    public static void main(String[] args) {
        Frame f = new Frame();
        Panel p1 = new Panel();
        Panel p2 = new Panel();
        Button b1 = new Button("b1");
        Button b2 = new Button("b2");
        Button b3 = new Button("b3");
        Button b4 = new Button("b4");
        Button b5 = new Button("b5");
        f.setSize(1000,500);
        f.setLocation(300,300);
        p1.add(b1);p2.add(b2);p2.add(b2);
        p2.add(b4);p2.add(b5);
        f.add(p1,BorderLayout.NORTH);
        f.add(p2,BorderLayout.SOUTH);
        f.setVisible(true);
    }
}

6 事件处理

事件源:事件的发起者,通常是一个组件

事件的处理:处理方式通常是一个方法,一个特点类的特定成员方法。

一定要实现Actionlistener方法

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Event_v1 {
    public static void main(String[] args) {
        Frame f = new Frame("我在学习GUI");
        Button b1 = new Button("我是第一个按钮");
        Button b2 = new Button("我是第二个按钮");
        f.setSize(1000 , 500);
        f.setLocation(300 , 300);

        Respp r1 = new Respp();
        b1.addActionListener(r1);
        b2.addActionListener(r1);
        
        b1.setSize(70,80);
        b1.setLocation(300,200);

        b2.setSize(70,80);
        b2.setLocation(300,400);

        f.add(b1);
        f.add(b2);
        f.setVisible(true);
    }
}
class Respp implements ActionListener{
    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.println("aaaaaaaa");
    }
}
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Event_v2 {
    public static void main(String[] args) {
        Frame f = new Frame("我在学习GUI");
        Button b1 = new Button("我是第一个按钮");
        Button b2 = new Button("我是第二个按钮");
        f.setSize(1000 , 500);
        f.setLocation(300 , 300);

        r2 r1 = new r2();
        b1.addActionListener(r1);
        b2.addActionListener(r1);

        b1.setSize(70,80);
        b1.setLocation(300,200);

        b2.setSize(70,80);
        b2.setLocation(300,400);

        f.add(b1);
        f.add(b2);
        f.setVisible(true);
    }
}
class r2 implements ActionListener{
    Button b = new Button();

    @Override
    public void actionPerformed(ActionEvent e) {
        Object o = e.getSource();
        if(o instanceof Button){
            b = (Button)o;
            System.out.println(b.getLabel() + "aaaaa");
        }
    }
}
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Event_v3 {
    public static void main(String[] args) {
        Frame f = new Frame();
        Button b1 = new Button("im b1");
        Button b2 = new Button("im b2");
        TextField tf = new TextField();
        f.setSize(1000 , 500);f.setLocation(300 , 300);
        b1.setSize(100,50);b1.setLocation(300,200);
        b2.setSize(70,80);b2.setLocation(300,400);
        tf.setSize(200 , 50);tf.setLocation(0,400);

        resp2 r2 = new resp2(tf);
        b1.addActionListener(r2);
        b2.addActionListener(r2);
        f.setLayout(null);
        f.add(b1);
        f.add(b2);
        f.add(tf);
        f.setVisible(true);
    }
}
class resp2 implements ActionListener{
    TextField tf;
    Button b;
    public resp2(TextField tf){this.tf = tf;}

    @Override
    public void actionPerformed(ActionEvent e) {
        Object o = e.getSource();
        if(o instanceof Button){
            b = (Button)o;
            tf.setText(b.getLabel()+"被点击");
        }
    }
}
  • 不同类型的event,对应的处理函数所在类实现的接口不同
  • 不同类型的event,在被监听时需要调用不同的函数
    • Button对应的消息处理函数所在的类必须实现ActionListenrt接口,监听函数时addActionListener
    • Frame和Dialog对应的消息处理函数所在的类必须实现WindowListener,监听函数时addWindowListener

7 适配器

事件处理方法所在的类需要实现特定的接口,实现接口要实现全部的方法,然鹅只有某些方法是有用的,其他方法是空方法,可以避免实现一些方法

WindowAdapter是一个类,实现了WindowListener接口

import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class Event_v4 {
    public static void main(String[] args) {
        Frame f = new Frame("我在学习GUI");
        f.setSize(1000 , 500);f.setLocation(300 , 300);
        resp4 resp = new resp4();
        f.addWindowListener(resp);
        f.setVisible(true);
    }
}
class resp4 extends WindowAdapter{
    @Override
    public void windowClosing(WindowEvent e) {
        System.exit(0);
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/125735.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

用python的turtle库画一个小猪佩奇

小猪佩奇是一个可爱的小猪。她已经四岁了,与她的妈妈,爸爸,和弟弟乔治生活在一起。佩奇最喜欢做的事情是玩游戏,打扮的漂亮,度假,以及在小泥坑里快乐的跳上跳下和与小羊苏西(她最好的朋友&#…

Nginx小结1

Nginx 是一个高性能的HTTP和反向代理web服务器,作为负载均衡器,承接的所有请求。核心功能有负载均衡、反向代理、静态资源服务器。另外Nginx还可以使用keepalive结合使用建立主备份机实现高可用。keepalive是在TCP中一个可以检测死连接的机制&#xff0c…

WordPress插件开发教程1:开发第一个WordPress插件

第一步:在 wp-content \ plugins 目录新建一个目录,随便起个名字,比如:my-first-plugin。 第二步:进入 my-first-plugin 目录,新建一个PHP文件,随便起个名字,比如:hello.…

UE解决SetActorHiddenInGame后其Collision仍然会被检测到的问题

文章目录 1.问题产生2.解决过程3.总结4.参考资料1.问题产生 (1)首先我在场景内添加了红色的球(Sphere)和绿色的面片(Plane),两者都是StaticMeshActor,如下图所示: (2)然后进入二者的静态网格体编辑窗口,将二者的碰撞复杂度都设置为UseComplexCollisionAsSimple。 …

D. Valiant‘s New Map(二分)

Problem - D - Codeforces 游戏工作室 "DbZ Games "想在他们的热门游戏 "Valiant "中引入另一张地图。这一次,名为 "Panvel "的地图将以孟买市为基础。 孟买可以被表示为nm的单元格。网格中的每个单元格(i,j)…

【数据可视化】地理信息可视化的常见算法

1. 地图投影 地理坐标:是用维度、经度表示地面点位置的球面坐标 移动开发:移动端依靠GPS获取位置信息,其获得的是经纬度的信息(WGS84) 互联网开发中,需要将WGS84转换为其他互联网地图平台支持的坐标系统…

QT 九宫格绘图(QSS方式)

什么是九宫格方式绘图? 顾名思义,就是把一个方块分割成 9 个部分,如图所示: 九宫格绘图的原理就是把背景图分割成 9 个部分,绘制时: 四个角(1、3、7、9)的大小不变左右部分&#…

C++11标准模板(STL)- 算法(std::partial_sum)

定义于头文件 <numeric> 算法库提供大量用途的函数&#xff08;例如查找、排序、计数、操作&#xff09;&#xff0c;它们在元素范围上操作。注意范围定义为 [first, last) &#xff0c;其中 last 指代要查询或修改的最后元素的后一个元素。 计算范围内元素的部分和 s…

达达盈利新故事,得靠智能化“省”出来?

&#xff08;图片来源于网络&#xff0c;侵删&#xff09; 文|螳螂观察 作者|叶小安 我们正处于一个最好的时代&#xff0c;不用出门就能享受到叫餐、代买衣物服饰、收发快递甚至是医院排队等服务&#xff0c;“万物皆可到家、万物即到”&#xff0c;正成为时代的潮流。 不…

【信管5.4】进度管理知识点汇总

进度管理知识点汇总在项目进度管理这一块&#xff0c;我们突然一下就接触到了不少的计算操作&#xff0c;而且接触到的工具概念也相比范围管理来说多了很多。因此&#xff0c;我们在这里进行一次小的总结。活动顺序与逻辑关系还记得什么是活动吧&#xff1f;活动就是 WBS 再次分…

NFS And Autofs

NFS&#xff08;network file system&#xff09; 挂载NFS 文件系统。NFS是一个标准的网络协议用在linux与unix之间,版本7默认使用的是NFSV4&#xff0c;NFSv4使用TCP协议&#xff0c;旧版本的NFS使用TCP或者UDP协议。 *手动挂载NFS使用mount. *自动挂载使用/etc/fstab *挂载NF…

FFmpeg常用推流命令

一、FFmpeg推RTMP流准备工作 首先确保自已已经安装了nginx rtmp服务器。 打开配置文件nginx.conf 完成如下配置 如果没有nginx rtmp服务器&#xff0c;请阅读这一篇简书文章 Mac搭建nginxrtmp服务器 二、FFmpeg推流 1.推流MP4文件 视频文件地址&#xff1a;/Users/xu/Desk…

美创DSM数据安全管理平台获华为鲲鹏技术认证!

近期&#xff0c;美创DSM数据安全管理平台通过华为鲲鹏的相互兼容性测试与认证&#xff0c;这标志着数据安全管理平台对国产信创服务器的支持&#xff0c;实现自研、国产化和自主可控。 华为鲲鹏技术认证是华为推出的一项生态合作伙伴计划&#xff0c;要求测试产品自主、可控…

健康体检管理系统源码 运营级PEIS系统源码 PEIS健康体检系统源码 PEIS源码 B/S架构开发

开发语言:ASP.NET C#,数据库:SQLserver2008R2&#xff0c;开发工具:VS2010。 前台工作&#xff1a; 预约、前台登记、照片采集、导检单打印、检验申请单打印、检前签到、检后签到、 团体设置、合并团体&#xff08;逻辑&#xff09; 医生工作&#xff1a; 数据集中录入、数…

国产linux系统使用 PageOffice 在线打开 word 文件

一、客户端环境 1、操作系统 银河麒麟&#xff0c;中标麒麟&#xff0c;统信UOS 2、芯片 芯片&#xff08;CPU)&#xff1a;x86&#xff08;Intel、兆芯&#xff09; &#xff0c;ARM&#xff08;飞腾、鲲鹏&#xff09;&#xff0c;龙芯 3、浏览器 360安全浏览器 奇安信…

NNOM神经网络语音降噪

目录 1. 问题记录和解决 2. C工程建立和运行 1. 问题记录和解决 &#xff08;1&#xff09;python语音处理依赖库soundfile 在miniconda的powershell中执行指令&#xff1a; pip install soundfile –i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com &a…

js函数篇

函数声明提升 面试题&#xff1a;先提升函数&#xff0c;再声明变量提升 arguments function fun(){var sum0;for(var i0;i<arguments.length;i){sumarguments[i];}console.log(所有参数的和是sum); } fun(33,44,23,34); 函数算法面试题 1.喇叭花数 abc a! b! c! fun…

使用WxJava快速接入微信公众号

在微信公众号请求用户网页授权之前&#xff0c;开发者需要先到公众平台官网中的“开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权获取用户基本信息”的配置选项中&#xff0c;修改授权回调域名。 环境准备 1.申请公众号测试账号2.外网服务准备以及配置3.常用开发工具及网站…

为什么四天工作制才是企业良药,而非裁员?原因你想不到

经济危机&#xff0c;疫情影响&#xff0c;裁员不是企业良药&#xff0c;四天工作制或许才是长远之道。四天工作制&#xff0c;一周工作四天&#xff0c;你愿意吗&#xff1f;能救企业吗&#xff1f;能减少裁员吗&#xff1f;回答这些问题&#xff0c;我们需要了解五天工作制的…

MySQL-MySQL知识点总结

1、MySQL介绍 MySQL是一种关系型数据库&#xff0c;主要用于持久化存储数据。 2、MySQL基础架构 &#xff08;1&#xff09;组成 客户端、Server层和存储引擎层。 &#xff08;2&#xff09;主要构成部分 连接器&#xff1a;身份认证和权限验证。 查询缓存&#xff1a;执行查询…