GUI简述

GUI概述

swing概述

swing是java设计的GUI包,该包包括了GUI中各种组件支持

swing中的组件包括两大类,容器(例如窗口,对话框,面板)和功能组件(如按钮,输入框,菜单等)

容器组件

概述:功能组件不能单独显示,需要加入到容器中,容器可以容纳多个组件,利用add方法向容器中添加组件

最常用的容器组件是:窗口(JFrame)和面板(JPanel)

窗口:

代码演示:

package 窗口;import javax.swing.*;public class LoginFrame extends JFrame {//继承窗口所在的类public static void main(String[] args) {new LoginFrame();//创建一个窗口}public LoginFrame(){this.setSize(300,200);//设置窗口的大小,以像素点为单位this.setTitle("欢迎登录");//设置窗口的标题this.setLocation(500,500);//设置窗口的初始位置,采用坐标形式,以像素为单位this.setLocationRelativeTo(null);//常用的设置窗口位置方法,是窗口位置水平居中this.setResizable(true);//设置窗口大小是否可以调整(true为可以,false为不可以)this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭窗口时程序停止运行this.setVisible(true);//让窗口显示出来,放在设置的最后一行}//对窗口类进行重写,给次新建的窗口添加功能
}

面板

轻量级的容器,面板可以进行布局

布局有三种形式:流式布局,边界布局,网格布局

代码演示(在上述代码的基础上)

package 窗口;import javax.swing.*;
import java.awt.*;public class LoginFrame extends JFrame {//继承窗口所在的类public static void main(String[] args) {new LoginFrame();//创建一个窗口}public LoginFrame(){this.setSize(300,200);//设置窗口的大小,以像素点为单位this.setTitle("欢迎登录");//设置窗口的标题this.setLocation(500,500);//设置窗口的初始位置,采用坐标形式,以像素为单位this.setLocationRelativeTo(null);//常用的设置窗口位置方法,是窗口位置水平居中this.setResizable(true);//设置窗口大小是否可以调整(true为可以,false为不可以)this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭窗口时程序停止运行JPanel jPanel = new JPanel();//创建一个面板jPanel.setBackground(Color.BLUE);//给面板选择颜色jPanel.setBackground(new Color(123,222,222));//自定义颜色JButton jButton = new JButton("保存");//创建一个功能组件  按钮jPanel.add(jButton);//将按钮加到面板上this.add(jPanel);//将面板添加到窗口中this.setVisible(true);//让窗口显示出来,放在设置的最后一行}//对窗口类进行重写,给次新建的窗口添加功能}

 布局管理器

三种布局:流式布局,边界布局,网格布局

三种布局中,在创建面板时,默认使用流式布局

流式布局

FlowLayout布局管理器为流式布局,它按照从左到右,从上到下的顺序,一行排满后换行,不改变组件的大小,按照组件的尺寸显示组件,可以设置不同组件之间的行距及对齐方式,默认居中处理

BorderLayout布局管理器为边界布局,分为5部分,其中中间部分不可以省略

GridLayout布局管理器为网格布局管理器,以网格形式对面板进行分布

下面对三种布局管理器进行代码演示

package 窗口;import javax.swing.*;
import java.awt.*;public class LoginFrame_1 extends JFrame {//继承窗口所在的类public static void main(String[] args) {new LoginFrame_1();//创建一个窗口}public LoginFrame_1(){this.setSize(300,200);//设置窗口的大小,以像素点为单位this.setTitle("欢迎登录");//设置窗口的标题this.setLocation(500,500);//设置窗口的初始位置,采用坐标形式,以像素为单位this.setLocationRelativeTo(null);//常用的设置窗口位置方法,是窗口位置水平居中this.setResizable(true);//设置窗口大小是否可以调整(true为可以,false为不可以)this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭窗口时程序停止运行JPanel jPanel = new JPanel(new FlowLayout(FlowLayout.LEADING,20,50));//创建一个面板 采用流式布局 (因为流式布局为默认布局,故括号内部内容可以省略)//括号中内容分别表示,左对齐,行距为20像素,列距为50像素JButton jButton0 = new JButton("1");JButton jButton1 = new JButton("2");JButton jButton2 = new JButton("3");JButton jButton3 = new JButton("4");JButton jButton4 = new JButton("5");jPanel.add(jButton0);jPanel.add(jButton1);jPanel.add(jButton2);jPanel.add(jButton3);jPanel.add(jButton4);//创建五个按钮,并将其依次添加到面板当中this.add(jPanel);//将面板添加到窗口中this.setVisible(true);//让窗口显示出来,放在设置的最后一行}//对窗口类进行重写,给次新建的窗口添加功能}

package 窗口;import javax.swing.*;
import java.awt.*;public class LoginFrame_2 extends JFrame {//继承窗口所在的类public static void main(String[] args) {new LoginFrame_2();//创建一个窗口}public LoginFrame_2(){this.setSize(300,200);//设置窗口的大小,以像素点为单位this.setTitle("欢迎登录");//设置窗口的标题this.setLocation(500,500);//设置窗口的初始位置,采用坐标形式,以像素为单位this.setLocationRelativeTo(null);//常用的设置窗口位置方法,是窗口位置水平居中this.setResizable(true);//设置窗口大小是否可以调整(true为可以,false为不可以)this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭窗口时程序停止运行JPanel jPanel = new JPanel(new BorderLayout());//创建一个面板 采用边界布局JButton jButton0 = new JButton("1");JButton jButton1 = new JButton("2");JButton jButton2 = new JButton("3");JButton jButton3 = new JButton("4");JButton jButton4 = new JButton("5");jPanel.add(jButton0,BorderLayout.NORTH);jPanel.add(jButton1,BorderLayout.SOUTH);jPanel.add(jButton2,BorderLayout.WEST);jPanel.add(jButton3,BorderLayout.EAST);jPanel.add(jButton4,BorderLayout.CENTER);//创建五个按钮,并将其按照位置放入边界布局的五部分this.add(jPanel);//将面板添加到窗口中this.setVisible(true);//让窗口显示出来,放在设置的最后一行}//对窗口类进行重写,给次新建的窗口添加功能}

 

package 窗口;import javax.swing.*;
import java.awt.*;public class LoginFrame_3 extends JFrame {//继承窗口所在的类public static void main(String[] args) {new LoginFrame_3();//创建一个窗口}public LoginFrame_3(){this.setSize(300,200);//设置窗口的大小,以像素点为单位this.setTitle("欢迎登录");//设置窗口的标题this.setLocation(500,500);//设置窗口的初始位置,采用坐标形式,以像素为单位this.setLocationRelativeTo(null);//常用的设置窗口位置方法,是窗口位置水平居中this.setResizable(true);//设置窗口大小是否可以调整(true为可以,false为不可以)this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭窗口时程序停止运行JPanel jPanel = new JPanel(new GridLayout(2,2));//创建一个面板 采用边界布局JButton jButton0 = new JButton("1");JButton jButton1 = new JButton("2");JButton jButton2 = new JButton("3");JButton jButton3 = new JButton("4");jPanel.add(jButton0);jPanel.add(jButton1);jPanel.add(jButton2);jPanel.add(jButton3);//创建五个按钮,并将其按照位置放入边界布局的五部分this.add(jPanel);//将面板添加到窗口中this.setVisible(true);//让窗口显示出来,放在设置的最后一行}//对窗口类进行重写,给次新建的窗口添加功能}

 

常用组件

标签(JLable)

标签是容纳文本和图标的控件,通常是用在界面中射别的控件

代码演示:

package 窗口;import javax.swing.*;
import java.awt.*;public class LoginFrame_label extends JFrame {public static void main(String[] args) {new LoginFrame_label();}public LoginFrame_label(){this.setSize(300,200);//设置窗口的大小,以像素点为单位this.setTitle("欢迎登录");//设置窗口的标题this.setLocation(500,500);//设置窗口的初始位置,采用坐标形式,以像素为单位this.setLocationRelativeTo(null);//常用的设置窗口位置方法,是窗口位置水平居中this.setResizable(true);//设置窗口大小是否可以调整(true为可以,false为不可以)this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭窗口时程序停止运行JPanel jPanel = new JPanel(new GridLayout(2,1));JPanel jPanel1 = new JPanel();JPanel jPanel2 = new JPanel();//创建一个面板this.add(jPanel);jPanel.add(jPanel1);jPanel.add(jPanel2);//添加面板到窗口JLabel jLabel = new JLabel("登录");JLabel jLabel1 = new JLabel();jLabel1.setText("密码");//利用两种创建标签的方式分别创建标签JTextField jTextField = new JTextField(15);//创建一个输入框组件,用作账号的输入JPasswordField jPasswordField = new JPasswordField(15);//创建一个密码框组件用于密码输入jPanel1.add(jLabel);jPanel1.add(jTextField);jPanel2.add(jLabel1);jPanel2.add(jPasswordField);//依次添加标签和输入框,密码框到面板上//添加面板到窗口this.setVisible(true);//显示窗口}
}

使用常用组件写简单文本框架代码

package 窗口;import javax.swing.*;public class LoginFrame_textbook extends JFrame {public static void main(String[] args) {new LoginFrame_textbook();}public LoginFrame_textbook(){//对面板中的方法进行重写this.setSize(300,200);//设置窗口的大小,以像素点为单位this.setTitle("欢迎登录");//设置窗口的标题this.setLocation(500,500);//设置窗口的初始位置,采用坐标形式,以像素为单位this.setLocationRelativeTo(null);//常用的设置窗口位置方法,是窗口位置水平居中this.setResizable(true);//设置窗口大小是否可以调整(true为可以,false为不可以)this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭窗口时程序停止运行//创建一个文本域,用于文本框的输入功能JTextArea jTextArea = new JTextArea(10,30);//创建一个带有滚动条的面板并添加到面板上JScrollPane jScrollPane = new JScrollPane(jTextArea);this.add(jScrollPane);//给文本框添加强制换行功能,横向滚动条删去jTextArea.setLineWrap(true);//创建菜单栏JMenuBar jMenuBar = new JMenuBar();//添加菜单栏到窗口上this.setJMenuBar(jMenuBar);//创建菜单JMenu jMenu1 = new JMenu("文件");JMenu jMenu2 = new JMenu("编辑");JMenu jMenu3 = new JMenu("帮助");//添加菜单到菜单栏jMenuBar.add(jMenu1);jMenuBar.add(jMenu2);jMenuBar.add(jMenu3);//创建菜单栏选项JMenuItem jMenuItem1 = new JMenuItem("新建");JMenuItem jMenuItem2 = new JMenuItem("保存");JMenuItem jMenuItem3 = new JMenuItem("关于我们");//添加菜单栏选项到相应菜单jMenu1.add(jMenuItem1);jMenu1.add(jMenuItem2);jMenu3.add(jMenuItem3);//将控制面板显示的功能放置到最后this.setVisible(true);//让窗口显示出来,放在设置的最后一行}
}

 事件处理

对于上述的面板,窗口,组件的学习仅仅只是完成了图形界面的编写,没有任何实际作用

当用户与GUI组件进行交互时就很会发生事件,此时我们需要进行事件处理

事件源:触发事件的有关组件

java中事件处理的基本思路:

一个事件源产生一个事件并把它送到监听器,监听器一直等待,直到它收到一个事件,一旦事件被接受,监听器将处理这些事件

监听器代码演示

package 窗口;import javax.swing.*;
import java.awt.event.ActionEvent;public class LoginFrame_JT extends JFrame {public static void main(String[] args) {new LoginFrame_JT();}public LoginFrame_JT(){//重写窗口this.setSize(300,200);//设置窗口的大小,以像素点为单位this.setTitle("欢迎登录");//设置窗口的标题this.setLocation(500,500);//设置窗口的初始位置,采用坐标形式,以像素为单位this.setLocationRelativeTo(null);//常用的设置窗口位置方法,是窗口位置水平居中this.setResizable(true);//设置窗口大小是否可以调整(true为可以,false为不可以)this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭窗口时程序停止运行//创建面板JPanel jPanel = new JPanel();//将面板保存在窗口中this.add(jPanel);//创建一个输入框JTextField jTextField = new JTextField(15);//创建一个按钮JButton jButton = new JButton("保存");//将按钮添加到面板上jPanel.add(jButton);//将输入框添加到面板上jPanel.add(jTextField);//显示窗口内容this.setVisible(true);//为保存按钮创建监听器jButton.addActionListener(new AbstractAction() {@Overridepublic void actionPerformed(ActionEvent e) {System.out.println("你完成了一次保存,内容为:"+jTextField.getText());}});}
}

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

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

相关文章

【RSGIS数据资源】2018年北京森林站东灵山样地无人机遥感生态数据集

文章目录 一、数据集基本信息二、数据结构和内容三、 数据集质量控制(一) 产生方式(二) 数据源说明(三) 数据采集、加工处理方法 四、 数据使用 一、数据集基本信息 说明数据集基本描述信息,包…

Linux安装部署Tomcat

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ Linux安装部署Tomcat //将tomcat压缩包解压到对…

电脑上如何将png图片改为jpg?这几个方法一定用的上

在我们的日常工作、学习中,经常需要用到不同的图片格式类型,比如jpg、png、gif、tiff等等,这些图片之间有着非常大的区别,静态图片jpg格式,设计工作者常接触到的png,还有我们平时发的动态表情包是gif格式&a…

微服务架构中10个常用的设计模式,建议收藏!

从软件开发早期(1960 年代)开始,应对大型软件系统中的复杂性一直是一项令人生畏的任务。多年来为了应对软件系统的复杂性,软件工程师和架构师们做了许多尝试:David Parnas 的模块化和封装 (1972&#xff09…

上门废品回收小程序,互联网回收拥有哪些特点?

随着社会的进步,人们的生活水平不断提高,产生的可回收物也在不断上升,每年垃圾站都能产生大量的可回收物,这也造成了资源的浪费。 目前,加快发展回收模式,提高我国回收效率成为了当下回收市场发展的重要方…

鬼手剪辑如何导入剪映草稿箱?含工程文件

鬼手剪辑导入剪映功能介绍 功能概述 鬼手剪辑导入剪映功能可以让您将鬼手剪辑翻译、克隆和一键解说等作品的工程文件导入到剪映草稿,以便通过剪映进行精细化调整。 推荐使用场景 视频二创 视频语音翻译 短剧解说等作品的微调 导出的工程文件包含以下元素 视频…

java学习笔记1

java基础入门 1 初识java 1.1 jdk安装 1.1.1 下载jdk https://www.oracle.com/java/technologies/downloads/#java8-windows1.1.2 安装jdk jdk-8u361-windows-x64.exe安装到D:\Program Files\Java\jdk1.8.0_361安装jre,修改地址到D:\Program Files\Java\jre1.8.0_361jdk安装…

供应链拉动与推动生产方式(供应链维度)

一、推式供应链与拉式供应链的定义 1、推动式供应链 推动式供应链是以制造商为核心企业,根据产品的生产和库存情况,有计划地把商品推销给客户,其驱动力源于供应链上游制造商的生产。在这种运作方式下,供应链上各节点比较松散&am…

刷课必备!用Python实现网上自动做题

前言 开学少不了老师会布置一些 软件上面的作业,今天教大家用python制作自动答题脚本,100%准确率哦喜欢的同学记得关注、收藏哦 环境使用 Python3.8Pycharm 模块使用 import requests —> 数据请求模块 pip install requestsimport parsel —>…

基于DEAP数据集的四种机器学习方法的情绪分类

在机器学习领域,KNN(K-Nearest Neighbors)、SVM(Support Vector Machine)、决策树(Decision Tree)和随机森林(Random Forest)是常见且广泛应用的算法。 介绍 1. KNN&am…

【YOLOv8改进[Head检测头]】YOLOv8换个RT-DETR head助力模型更优秀

一RT-DETR 官方论文地址:https://arxiv.org/pdf/2304.08069.pdf 因为YOLO的合理速度和准确性之间的权衡, 这一系列已成为最流行的实时目标检测框架。然而,观察到nms对yolo的速度和准确性产生了负面影响。最近,基于端到端变换器的检测器(DETR…

谁说快是转瞬即逝,PUMA说快是永恒

巴黎奥运会、欧洲杯、美洲杯......2024年可以说是名副其实的体育大年。在各种全球体育盛事营造的浓厚体育氛围当中,各大体育品牌纷纷开始发力。 4月10日,全球领先运动品牌PUMA率先发布了其为本届奥运会准备的17套奥运装配,包括瑞士、瑞典等国…

PMP新版考试也要复习49个过程?如何复习更高效?

PMP中有五大过程组、十大知识领域,共计49个子过程,那么如何才能快速的记住这49个子过程,可以参考这篇文章理解加深记忆。 记忆需要花费时间:30分钟 记忆持续时间:永久 接下来按照思路进行 场景:大家都熟…

炉管设备的内部构造详解

知识星球(星球名:芯片制造与封测社区)里的学员问:炉管设备(立式)的内部构造是怎样的? 如上图,是一个典型的: 上半部: Heating Element(加热线圈…

【Python-装饰器】

Python-装饰器 ■ 简介■ 装饰器的一般写法(闭包写法)■ 装饰器的语法 (outer写法) ■ 简介 装饰器其实是一种闭包, 功能就是在不破坏目标函数原有的代码和功能的前提下为目标函数增加新功能。 ■ 装饰器的一般写法(闭包写法&am…

JWT原理解析

一、概述 虽然现在很多的开发框架会支持JWT的使用,但是对JWT还是没有一个详细的了解,有很多疑惑: JWT比之前的session或者token有什么好处?JWT的构成元素是什么?JWT从生成到使用的详细流程? 二、 JWT 2…

机器学习基础:绪论

1. 概念 机器学习是从人工智能中产生的一个重要学科分支,是实现智能化的关键。 机器学习是一类算法的总称,这些算法企图从大量历史数据中挖掘出其中隐含的规律,并用于预测或者分类,更具体的说,机器学习可以看作是寻找…

南京邮电大学数学实验A 作业3 编程与作图 答案 | 《MATLAB数学实验》第三版 第二章 课后习题答案

若要获得更好的阅读体验&#xff0c;请前往 链接。 1(课本习题2) 求满足 ∑ n 0 m ln ⁡ ( 1 n ) > 100 \sum_{n 0}^{m}{\ln{(1 n)}} > 100 ∑n0m​ln(1n)>100的m最小值. 代码: slog(1);n0; while s<100nn1;sslog(1n); end fprintf("最小m值是%d"…

实用电路图轻松掌握,一通百通 | 百能云芯

通过以下各种各样的实用电路&#xff0c;大家可以了解元器件的结构、特性、动作原理及电路的基本控制方式&#xff0c;掌握一些控制规律&#xff0c;这样的话&#xff0c;在日后的电路识图中就能融会贯通&#xff0c;一通百通。 文章中的电路图有难有易&#xff0c;有些图现在…