GUL图形化界面操作(上部)

news2024/9/22 15:38:16

目录

AWT

Frame对象:创建窗口

​编辑

该对象相关的属性

设置窗口大小(对象.setsize(int,int))

让窗口可以显现出来(对象.setVisible(bool))

设置窗口标题(对象.setTitle(String))

设置窗口颜色(对象.setBackground(颜色))

设置窗口始终展示在最前面(对象.setAlwaysOnTop(bool))

调整窗口位置(对象.setLocation(int,int))

设置窗口大小是否固定(对象.setResizable(false))

移入窗口中光标改变(个性化光标)//没啥用

监听器

定义:

监听器流程思路

使用监听器

监听对象:WindowListener(窗口)

监听对象:KeyListener(键盘)

监听对象:MouseListener(鼠标)

监听对象:MouseWheelListener(鼠标滚动)

事件

窗口常见事件

键盘常见事件

​编辑

e.getkeychar()//获取当前事件输入的字符

鼠标常见事件

常用组件

组件的介绍

常用组件

标签(lable)

相应属性

按钮(Button)

按钮的点击事件(对象.addActionListener(e->{}))

文本框(TextField)

对象.getText()函数获得文本框输入的内容

对象.setEchoChar('*')展示输入文本框样子

文本域(解决文本框无法换行问题)TextArea

勾选框(Checkbox )

​编辑

checkbox.getState()函数,返回bool值是否勾选,是true,不是false

单选框组(CheckboxGroup)

布局和面板

边界布局

​编辑

​编辑

流式布局FlowLayout

卡片布局

网格布局(GridLayout)

​编辑

面板与布局的嵌套使用

面板的概念

滚动面板和列表

滚动面板

列表

菜单栏

定义

​编辑

菜单栏的监听事件为

弹出菜单

对话框


Blue留言:

最近在学习一些知识,所以没时间去写文章,但为了保持创作的习惯,就将以前的笔记给转成文章了。

AWT

Frame对象:创建窗口

 Frame frame =new Frame();

frame是一个窗口,创建的对象,就直接成一个新的窗口(默认窗口是不可见的)

该对象相关的属性

设置窗口大小(对象.setsize(int,int))
frame.setSize(x1,x2);//利用setsize方法设定窗口大小

后面两个参数分别为x1:长和x2:宽,分别都是int形

让窗口可以显现出来(对象.setVisible(bool))
frame.setVisible(true);//这个功能是为了让窗口出现可见性,默认窗口是不可见的

注意:默认窗口是不可见的

设置窗口标题(对象.setTitle(String))
frame.setTitle("傻逼");

 

设置窗口颜色(对象.setBackground(颜色))
frame.setBackground(new Color(1,2,3));

参数有两种写法:

第一种写法:Color.(系统给你的颜色)

第二种写法:new Color()这里的参数就是ragb()写法

设置窗口始终展示在最前面(对象.setAlwaysOnTop(bool))
frame.setAlwaysOnTop(true);//设置窗口始终在前面
调整窗口位置(对象.setLocation(int,int))
frame.setLocation(500,300);//调整窗口的位置

默认位置:是在整个页面的左上角

调整前:

调整后:

设置窗口大小是否固定(对象.setResizable(false))
frame.setResizable(true);//设置窗口大小是否固定
移入窗口中光标改变(个性化光标)//没啥用
frame.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));

里面的参数得自己去查

监听器

定义:

处理窗口中发生的事件,比如移动鼠标,关闭窗口,鼠标点击等,当发生了这些事件时,然后要去做什么。

监听器流程思路

先使用监听器监听对象,也就是这些像窗口,键盘,鼠标之类的,然后监听到了后,使用适配器重写下面的事件,比如监听到了键盘,然后键盘这个对象有三个事件,分别为按下松开整个过程,按下,松开,然后你是想要那个事件,如果单独只要按下,那么就重写按下这个事件。

使用监听器

对象.add监听对象();
监听对象:WindowListener(窗口)
frame.addWindowListener(new WindowAdapter() {
    @Override
    public void windowClosing(WindowEvent e) {
        frame.dispose();
    }

监听窗口,然后利用匿名内部类,重写WindowListener下面的各个事件的方法。这里使用了适配器(注意以Adapter结尾的都是适配器),也就是使用了一个类叫WindowAdapter,然后空重写实现WindowListener下面的方法,这样就可以直接重写WindowAdapter()下面某一个方法,不需要全部重写。

监听对象:KeyListener(键盘)
frame.addKeyListener(new KeyAdapter() {
    @Override
    public void keyPressed(KeyEvent e) {
        super.keyPressed(e);
    }
});

同理

监听对象:MouseListener(鼠标)
frame.addMouseListener(new MouseAdapter() {
    @Override
    public void mouseEntered(MouseEvent e) {
        super.mouseEntered(e);
    }
});
监听对象:MouseWheelListener(鼠标滚动)
frame.addMouseWheelListener(new MouseAdapter() {
    @Override
    public void mouseClicked(MouseEvent e) {
        super.mouseClicked(e);
    }
});

事件

窗口常见事件

键盘常见事件

此图为适配器下的

e.getkeychar()//获取当前事件输入的字符

鼠标常见事件

常用组件

组件的介绍

组件实际就是awt提前预定好了的元素,如按钮,文本框,标签等。

常用组件

标签(lable)
Label label =new Label("我是标签");//添加标签只需要创建一个label对象就行
label.setLocation(20,50);//必须设置标签的位置与大小,否则无法展示出来
label.setSize(100,20);
frame.add(label);//使用add方法添加组件到窗口

注意:组件的位置是以窗口左上角的原点开始的,包括标题栏在内的,所以如果想要设置正常组件的位置,还得注意加上标签栏的高度,否则会被遮挡

相应属性

label.setBackgroud(Color.BLACK)//背景颜色

label.setForeground(Color.BLACK);//字体颜色

按钮(Button)
Button button=new Button("我是按钮");//添加按钮只需要创建一个Button对象就行
button.setBounds(20,50,100,50);//设置按钮的位置和大小,前两位参数为位置,后两位为大小
按钮的点击事件(对象.addActionListener(e->{}))
button.addActionListener(e -> {
    System.out.println("被点击");
});
文本框(TextField)
TextField field= new TextField();//TextField是一个文本框
field.setBounds(20,50,100,25);
frame.add(field);
对象.getText()函数获得文本框输入的内容
button.setBounds(20,100,100,50);
button.addActionListener(e -> {
   String sc= field.getText();
    System.out.println(sc);
});
frame.add(button);
对象.setEchoChar('*')展示输入文本框样子
field.setEchoChar('*');//展示输入文本框样子

未加此函数前:

加了此函数后:

文本域(解决文本框无法换行问题)TextArea
TextArea textArea=new TextArea();
textArea.setBounds(150,100,300,100);
frame.add(textArea);

对象.getText()函数获得文本框输入的内容

勾选框(Checkbox )
Checkbox checkbox =new Checkbox("记住密码");
checkbox.setBounds(20,50,100,50);
frame.add(checkbox);
checkbox.getState()函数,返回bool值是否勾选,是true,不是false
checkbox.getState()函数,返回bool值是否勾选,是true,不是false
单选框组(CheckboxGroup)
CheckboxGroup group=new CheckboxGroup();
Checkbox c1=new Checkbox("1");
c1.setBounds(60,60,60,60);
frame.add(c1);
Checkbox c2=new Checkbox("2");
c2.setBounds(60,100,60,60);
frame.add(c2);
c1.setCheckboxGroup(group);
c2.setCheckboxGroup(group);

将两个勾选框直接整上了联系,只能勾选上其中的一个,不能同时勾选。

使用如下函数可以获得checkbox里面的label也就是上面代码的‘1’or'2'

group.getSelectedCheckbox().getLabel();

布局和面板

边界布局

默然窗口采用的是边界布局,这种布局支持将组件放置五个区域

流式布局FlowLayout

FlowLayout()

构造一个新的 FlowLayout,它是默认居中对齐的,默认的水平和垂直间隙是5个像素

  1. FlowLayout(int align)

构造一个新的 FlowLayout,它具有指定的对齐方式,默认的水平和垂直间隙是 5 个像素

五个参数值及含义如下:

0或FlowLayout.lEFT,控件左对齐

1或FlowLayout.CENTER,居中对齐

2或FlowLayout.RIGHT,右对齐

3或FlowLayout.LEADING,控件与容器方向开始边对应

4或FlowLayout.TRAILING,控件与容器方向结束边对应

如果是0、1、2、3、4之外的整数,则为左对齐

  1. FlowLayout(int align, int hgap, int vgap)

创建一个新的流布局管理器,它具有指定的对齐方式以及指定的水平和垂直间隙。

三、常用方法

void setAlignment(int align):设置此布局的对齐方式。

void setHgap(int hgap):设置组件之间以及组件与 Container 的边之间的水平间隙。

void setVgap(int vgap):设置组件之间以及组件与 Container 的边之间的垂直间隙

卡片布局

frame.setLayout(layout);
frame.add(new Button("1号按钮"));
frame.add(new Button("2号按钮"));
frame.setVisible(true);//这个功能是为了让窗口出现可见性,默认窗口是不可见的
while (true)
{
    Thread.sleep(3000);
    layout.next(frame);
​
}

网格布局(GridLayout)

面板与布局的嵌套使用

一般情况下只有窗口才能设置布局,为了让程序里面的布局多种多样,除了窗口外实际上还可以使用其他的容器,这里就要使用面板的概念

面板的概念

定义一个面板:

Panel panel =new Panel();

然后添加进窗口中

frame.add(panel);

面板也可以添加面板进去。

滚动面板和列表

滚动面板

ScrollPane scrollPane=new ScrollPane();//使用ScrollPane类定义

一个滚动面板里面只能放一个组件

注意在布局时,并没有规定一定要按照布局大小来展示组件,可以按照自己的想法去设置组件长宽高,使用

组件.setPreferredSize(new Dimension(长,宽))

的写法来自定义组件的长宽。

列表

滚动面板往往搭配的List列表(注意这里的列表不是我们集合类的列表,而是展示的列表组件)

List list=new List();//

如果想要多选的话可以给list设置值

list.setMultipleMode(true);//利用Ctrl加鼠标右键可以多选或者鼠标也行

列表的监听对象是:

list.addItemListenner(e->{})

利用list.getselectitem:可以获取已经被选择的item

菜单栏

定义

以上便是菜单栏

菜单栏下面有划分很多

 MenuBar menuBar=new MenuBar();
 Menu menu=new Menu("我是菜单");
 MenuItem item1=new MenuItem("1");
 MenuItem itemw=new MenuItem("2");
 menu.add(item1);
 menu.add(itemw);
 menuBar.add(menu);
frame.setMenuBar(menuBar);

MenuBar:整个菜单栏

Meanu:菜单栏上面的某个选项

Meanuitem:菜单栏下的某个选项点击后的某个选项(可以通过item.setShortcut(new MenuItem())设置快捷键)

注意:frame添加菜单栏的时候,使用frame.setMenuBar(menuBar);这个添加

菜单栏的监听事件为

item.addActionListener

弹出菜单

这便是弹出菜单

使用这个对象

PopupMenu menu=new PopupMenu();

在这个菜单栏里面添加选项

menu.add(new MenuItem("我是你的芭比"));
menu.add(new MenuItem("我是你的die比"));
menu.add(new MenuItem("我是你的father"));

加入到窗口里面

frame.add(menu);

设置监听对象,使得右键后菜单栏会弹出

frame.addMouseListener(new MouseAdapter() {
    @Override
    public void mouseClicked(MouseEvent e) {
        if(e.getButton()==MouseEvent.BUTTON3)
        {
            menu.show(frame,e.getX(),e.getY());
        }
    }
});

对话框

对话框说白了就是一个小窗口

Dialog dialog = new Dialog(frame,"要退出吗?",true);//使用这个类创造对话框
参数分别为:
参数一:依附于那个窗口
参数二:标题
参数三:是否允许不去操作其他的东西,如果是,则只能点击对话框其他一律不能点

例子:

Dialog dialog = new Dialog(frame,"要退出吗?",true);
dialog.setBounds(300,200,200,100);
frame.addWindowListener(new WindowAdapter() {
    @Override
    public void windowClosing(WindowEvent e) {
        dialog.setVisible(true);
    }
});

结语

感谢阅读

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

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

相关文章

MySQL学习(14):索引使用规则

1. 索引语法 #创建索引 create [unique|fulltext] index 索引名 on 表名 (字段名,...); #字段可以有多个 #如果不加unique或fulltext,那么将创建一个普通索引 #在InnoDB引擎小,创建的索引默认是Btree结构#查看索引 show index from 表名;#删除索引 drop…

折叠群控FPV穿越机技术详解

折叠群控FPV穿越机技术是一个结合了多项高端技术和飞行理念的创新系统。以下是该技术的详细解析: 1. 技术概述: - FPV穿越机:FPV,全称First Person View,即“第一人称视角”,是指通过无人机上搭载的摄像头&…

Python+Pytest+Allure+Yaml+Pymysql+Jenkins+GitLab运行原理

PythonPytestAllureYamlPymysqlJenkinsGitLab运行原理逻辑及调用关系 GitLab代码仓: Jenkins工作空间: 代码: 测试报告展示:

医疗器械上市欧美,需要什么样的网络安全相关申报文件?

医疗器械在欧美上市时,需要提交的网络安全相关申报文件主要包括以下几个方面,这些要求基于欧美地区的法律法规和监管机构的指导文件。 一、美国FDA要求 1. 网络安全管理计划 内容:制造商需要提交一份网络安全管理计划,该计划应包含…

blender顶点乱飞的问题解决

初学blender,编辑模式下移动某些顶点,不管是移动还是滑动都会出现定点乱飞的问题,后来才发现是开了吸附工具的原因!!!! 像下面这样,其实我只是在Z轴上移动,但是就跑的很…

经纬恒润与奇瑞汽车签订新能源项目重点供应商合作协议,共同开启合作新篇章

近日,2024年国家级芜湖经开区汽车零部件生态大会成功举行,经纬恒润受邀出席,与行业各伙伴齐聚经开区,同绘发展蓝图,助力经开区汽车产业高质量发展。会上,经纬恒润与奇瑞汽车签署合作协议,成为奇…

2-43 基于matlab的RBF网络自适应控制应用

基于matlab的RBF网络自适应控制应用,使用RBF网络逼近一级倒立摆模型中未知的非线性函数部分,即用RBF网络代替一级倒立摆模型中未知非线性函数部分,从而设计自适应控制,实现一级倒立摆的平衡控制。程序已调通,可直接运行…

卡夫卡(Kafka)框架详解:从背景到应用实践

卡夫卡(Kafka)框架详解:从背景到应用实践 引言 在大数据和分布式系统日益普及的今天,数据处理和消息传递成为了支撑复杂业务系统的关键基础设施。Apache Kafka,作为一个高性能的分布式消息队列系统,因其高…

qt 如何制作动态库插件

首先 首先第一点要确定我们的接口是固定的,也就是要确定 #ifndef RTSPPLUGIN_H #define RTSPPLUGIN_H #include "rtspplugin_global.h" typedef void (*func_callback)(uint8_t* data,int len,uint32_t ssrc,uint32_t ts,const char* ipfrom,uint16_t f…

C/C++樱花树代码

目录 写在前面 系列文章 C简介 完整代码 代码分析 写在后面 写在前面 C实现精美的樱花树,只需这100行代码! 系列文章 序号目录直达链接1爱心代码https://want595.blog.csdn.net/article/details/1363606842李峋同款跳动的爱心https://want595.b…

深入理解TCP:互联网通信的基石

深入理解TCP:互联网通信的基石 引言TCP的普遍应用TCP连接的建立与维护三次握手(Three-Way Handshake)连接的可靠性与超时重传数据传输与流量控制连接的终止状态转换 TCP与UDP的对比TCP协议栈的层级结构应用层(Application Layer&a…

24下软考初级-网络管理员100条知识点速记!

宝子们!上半年软考已经结束一段时间了,准备备考下半年软考初级-网络管理员的小伙伴可以开始准备了,这里给大家整理了100条网管知识点汇总,涵盖全书90%重点,先把这个存下!再慢慢看书,边看书边背这…

androidTest 与 Test详解

😄作者简介: 小曾同学.com,一个致力于测试开发的博主⛽️,主要职责:测试开发、CI/CD 如果文章知识点有错误的地方,还请大家指正,让我们一起学习,一起进步。 😊 座右铭:不…

Server - 配置 Kubernetes 多任务流程 KubeFlow Pipeline 的开发教程

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/140281680 免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。 Kubern…

错误解决 error CS0117: ‘Buffer‘ does not contain a definition for ‘BlockCopy‘

Unity 2022.3.9f1 导入 Runtime OBJ Importer 后出现: error CS0117: ‘Buffer’ does not contain a definition for ‘BlockCopy’ 解决办法: 源代码: int DDS_HEADER_SIZE 128; byte[] dxtBytes new byte[ddsBytes.Length - DDS_HEAD…

深度学习系列一

激活函数 sigmod 梯度消失问题: sigmoid函数的导数在输入值较大或较小时接近于0。在反向传播过程中,这些小梯度会相乘,导致深层网络的梯度变得非常小。结果是,深层网络的参数几乎不会更新,训练变得非常困难。这就是为…

基于flask的天气数据可视化系统1.0

基于flask的天气数据可视化系统1.0 一、效果展示二、flask简介三、图表绘制四、前端页面编写五、完整代码一、效果展示 该flask项目相对简单入门,使用了flask框架、bootstrap前端技术,数据使用的是上一篇scrapy爬取城市天气数据中爬取到的数据。 二、flask简介 Flask是一个…

在linux中,如何搭建nacos2.4.0的版本,修改nacos密码

由于最近服务器经常被攻击,看了一下发现是nacos版本过低,导致被抓了肉鸡,导致服务器的网端被跑满,选择重新搭建nacos,进入服务器后,首先确定服务器是否安装java,先执行java -version&#xff0c…

如何应对SQL注入攻击?

引言 在现今的网络世界中,安全性已成为至关重要的话题。SQL注入(SQL Injection)是一种常见且危险的网络攻击方式,攻击者通过向SQL查询中插入恶意代码来操控数据库,从而获取敏感信息或破坏数据。了解SQL注入的各种类型…

【数据结构】建堆算法复杂度分析及TOP-K问题

【数据结构】建堆算法复杂度分析及TOP-K问题 🔥个人主页:大白的编程日记 🔥专栏:数据结构 文章目录 【数据结构】建堆算法复杂度分析及TOP-K问题前言一.复杂度分析1.1向下建堆复杂度1.2向上建堆复杂度1.3堆排序复杂度 二.TOP-K问…