Java学习之Swing图形界面

news2025/1/16 19:55:28

Java提供的Swing组件众多,下面列举其中的几种,本章主要讲解顶层容器,其余容器在下面几章会做讲解。

1、顶层容器

1)顶层容器就是不包含在其他容器中的容器,Swing中常见的顶层容器有JFrame,JFrame被称为窗口框架,常见的方法及功能如下

JFrame的方法列表
方法功能说明
JFrame()构造方法,用于创建一个初始时不可见的新窗体
JFrame(String title)构造方法,创建新的、不可见的、指定标题的窗体
frameInit()在构造方法中调用该方法来初始化窗体
add(Component comp)添加组件
setLocation(int x,int y)设置位置坐标,以像素为单位
setSize(int width,int height)设置大小,以像素为单位
setVisible(bollean b)设置是否可见
setContentPane(Container contentPane)设置容器面板
setIconImage(Image image)设置窗体左上角的图标
setDefaultCloseOperation(int operation)设置窗体默认的关闭操作,参数是常量,如EXIT_ON_CLOSE,一般可以不用设置
setTitle(String title)设置标题

比如下面这个代码

package javase;

import java.awt.*;
import javax.swing.*;

public class test {
	JFrame frame=new JFrame("test");//创建一个新的、不可见的、名为test的窗体
	public test() {
		frame.setLayout(null);
		frame.setResizable(false);//用户不可改变窗口大小,即最大化按钮失效
		//frame.setLocationRelativeTo(null);//设置窗口居中,当设置了全屏时就可以不能要窗口居中
		Dimension screensize=Toolkit.getDefaultToolkit().getScreenSize();//获取屏幕大小
		frame.setUndecorated(true);//设置窗口不可拖动
		frame.setSize(screensize.width,screensize.height);//设置窗口的大小
		frame.setVisible(true);//设置窗口可见
	}
	public static void main(String[] args) {
		EventQueue.invokeLater(()->{//当GUI越来越大的时候可以避免线程之间发生错误
	new test();
		});
	}

}

运行结果为全屏显示的窗体,通过下面这张图可以看出,不仅窗体的标题看不到了,最大化最小化和关闭按钮也看不到了,此时可以通过win+M键退出。设置了全屏就需要设置键盘监听或者时把窗体大小变小一点。(键盘监听链接)

 2)JDialog

JDialog对话框可以分为两种:模式对话框和非模式对话框,所谓的模式对话框就是用户需要等到处理完对话框后才能继续与其他窗口交互的对话框,而非模式对话框是允许用户在处理对话框的同时与其他窗口交互的对话框.

简单来说,就如下图,只有处理完Dialog界面的事件返回test窗口才能继续处理test窗口的事件的对话框是模式对话框,两个界面的事件能同时处理的对话框是非模式对话框。

 代码如下:

package javase;

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

import javax.swing.*;

public class test {
	JFrame frame=new JFrame("test");//创建一个新的、不可见的、名为test的窗体
	JButton btn1=new JButton("模态对话框");
	JButton btn2=new JButton("非模态对话框");
	JButton btn3=new JButton("确定");
	JDialog dialog=new JDialog(frame,"Dialog");//创建Dialog
	JLabel label=new JLabel("标签");
	public test() {
		frame.setLayout(new FlowLayout());//设置窗口的布局管理器
		frame.setSize(500,500);//设置窗口的大小
		frame.setLocation(300, 100);
		dialog.setSize(200,100);
		dialog.setLocation(400, 300);
		dialog.setLayout(new FlowLayout());//设置对话框的布局管理器
		frame.add(btn1);
		frame.add(btn2);
		dialog.add(btn3);
		dialog.add(label);
		frame.setVisible(true);//设置窗口可见
		
		//为“模式对话框”按钮添加点击事件
		btn1.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				dialog.setModal(true);
				label.setText("模式对话框,按确定按钮关闭");
				dialog.setVisible(true);//显示对话框
			}
			
		});
		//为“非模式对话框”按钮添加点击事件
		btn2.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				dialog.setModal(false);
				label.setText("非模式对话框,按确定按钮关闭");
				dialog.setVisible(true);//显示对话框
			}
			
		});
		btn3.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				dialog.setVisible(false);
			}
			
		});
	}
	public static void main(String[] args) {
		EventQueue.invokeLater(()->{//当GUI越来越大的时候可以避免线程之间发生错误
	new test();
		});
	}

}

3)JWindow

JWindow是一个容器,可以显示在用户桌面上的任何位置,它没有标题栏、窗口管理按钮或者其他与JFrame关联的修饰。

JWindow常用方法
方法功能说明
window.add()添加组件
JWindow()没有指定所有者的窗口
JWindow(Frame owner)指定所有者的框架窗口
JWindow(GraphicsConfiguration gc)使用屏幕设备的指定gc创建一个窗口

比如下面这段代码:

package javase;

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

import javax.swing.*;

public class test {
	JFrame frame=new JFrame("test");//创建一个新的、不可见的、名为test的窗体
	JLabel label1=new JLabel("登录界面",JLabel.CENTER);
	JLabel label2=new JLabel("用户名");
	JLabel label3=new JLabel("密码");
	JTextField f1=new JTextField();
	JTextField f2=new JTextField();
	JPanel panel=new JPanel();
	JWindow wd=new JWindow();
	public test() {
		panel.setLayout(null);
		frame.setSize(300,300);//设置窗口的大小
		frame.setLocation(300, 100);
		label1.setBounds(0,0,300,30);
		label2.setBounds(50, 50, 50, 30);
		f1.setBounds(100, 50, 100, 30);
		label3.setBounds(50,100,50,30);
		f2.setBounds(100, 100, 100, 30);
		panel.add(label1);
		panel.add(label2);
		panel.add(label3);
		panel.add(f1);
		panel.add(f2);
		frame.add(panel);
		wd.setSize(400,300);
		wd.setLocationRelativeTo(null);
		wd.add(panel);
		wd.setVisible(true);
	//	frame.setVisible(true);//设置窗口可见
	}
	public static void main(String[] args) {
		EventQueue.invokeLater(()->{//当GUI越来越大的时候可以避免线程之间发生错误
	new test();
		});
	}

}

实现效果如下图,它和JFrame窗口差不多,但是除去了一些修饰,所以窗口无法拖动也无法最大化最小化,其实在JFrame中添加一行代码也能实现这样的效果

frame.setUndecorated(true);

 

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

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

相关文章

分享78个C 源码,总有一款适合您

C 源码 分享78个C 源码,总有一款适合您 源码下载链接:https://pan.baidu.com/s/1_vslGj8XQUGbUhQFnKZg4g?pwdoe87 提取码:oe87 OpenCV计算机视觉库 v4.7.0 OpenCV计算机视觉库 v3.4.19 Photoflare图像编辑器v1.6.12 开源向量数据库mil…

Lecture 13(Extra Material):PPO

On-policy v.s.Off-policy On-policy: The agent learned and the agent interacting with the environment is the same.Off-policy: The agent learned and the agent interacting with the environment is different. Issue of Importance Sampling: 尽管q可以是任意的&am…

day43—编程题

文章目录 1.第一题1.1题目1.2思路1.3解题 2.第二题2.1题目2.2思路2.3解题 1.第一题 1.1题目 描述: 输入两个整数 n 和 m,从数列1,2,3…n 中随意取几个数,使其和等于 m ,要求将其中所有的可能组合列出来 输入描述: 每个测试输入包…

Java 基础进阶篇(十二)—— Stream 流常用方法总结

文章目录 一、Stream流概述二、获取Stream流2.1 集合获取 Stream 流2.2 数组获取 Stream 流 三、中间方法四、终结方法五、Stream流的综合应用六、收集Stream流 一、Stream流概述 Stream 流是在 Java8 中,得益于 Lambda 所带来的函数式编程, 引入了一个…

前端技术——css

1.CSS的引入 【1】为什么要学习CSS? 如果只用HEML画页面的话--->这个页面就是页面上需要的元素罗列起来,但是页面效果很差,不好看,为了让页面好看,为了修饰页面。所以我们需要用到CSS。 CSS的作用:修饰HTML页面…

总结844

学习目标: 月目标:5月(张宇强化前10讲,背诵15篇短文,熟词僻义300词基础词) 周目标:张宇强化前3讲并完成相应的习题并记录,英语背3篇文章并回诵 每日必复习(5分钟&#…

密码学:流密码.(对称密码)

密码学:流密码. 流密码(Stream Cipher)属于对称密码算法中的一种,其基本特征是加解密双方使用一串与明文长度相同的密钥流,与明文流组合来进行加解密密钥流通常是由某一确定状态的伪随机数发生器所产生的比特流,双方将伪随机数生…

数据结构-二叉树遍历线索二叉树

目录 一、二叉树的定义 *几种特殊的二叉树 *二、二叉树的性质 三、二叉树的存储结构 *四、二叉树的遍历 *4.1先序遍历 * 4.2中序遍历 * 4.3后序遍历 非递归算法遍历 *4.4层序遍历 *五、遍历序列构造二叉树 六、线索二叉树 6.1逻辑结构: * 6.2构造线索二叉树 一、二…

Mybatis Plus | 快速入门

💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! Mybatis Plus MyBatis-Plus(简称 MP)是一个基于 MyBatis 的增强工具,它对 Mybatis 的基础功能进行了增强,但未做任何改…

Qt 多语言界面设计概述

1、多语言界面设计概述 有些软件需要开发多语言界面版本,如中文版和英文版,并且在软件里可以方便地切换界面语言。Qt 为多语言界面提供了很好的支持,使用 Qt 的一些规则和工具,可以很方便地为应用程序开发提供多语言界面支持。 …

Shell脚本函数简介及运用(喜欢,适合,能在一起,是三码事)

一、函数的作用 语句块定义成函数约等于别名,定义函数,再引用函数 封装的可重复利用的具有特定功能的代码 二、定义函数 定义函数就是只将一段实现某个任务的命令序列封装进一个函数,便于使用和后期维护。 function 函数名() { 命令序列 }…

快速原型设计工具(Axure)的安装、汉化

〇、一些名词解释: 1. 草图 一般主要用于产品整理思路,寻找灵感,或者在产品团队内部互相讨论碰撞火花时使用。画 给自己看的,想怎么画就怎么画。 2. 低保真 打个比喻来说就像,用于“生产的图纸”,要简单易读…

Postgres:Win/Linux环境安装及一键部署脚本

1.Win安装Postgres (1)下载安装包 (2)开始安装 修改安装目录 选择要安装的组件 data也就是库表及数据的.dba文件存放目录 密码设置 端口设置 next next 开始安装 安装完成,Stack Builder 根据需要选择是否安装。仅仅是…

03-Docker容器命令

新建启动容器 docker run [OPTIONS] IMAGE [COMMAND] [ARG...]常用的参数: --namenew_name:为容器指定一个名称-d:后台运行容器并返回容器ID,即启动守护式容器-i:以交互模式(interactive)运行…

【三十天精通Vue 3】第二十九天 Vue 3中的Mock数据模拟详解

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: 三十天精通 Vue 3 文章目录 引言一、Mock数据模拟的概述1.1 为什么需要Mock数据模拟?1.2 Mock数据模拟的优点和缺点二、安装和配置Mock.js库2.1 使用NPM安…

TIA博途Wincc通过区域指针中的作业信箱功能实现自动写入配方数据的具体方法

TIA博途Wincc通过区域指针中的作业信箱功能实现自动写入配方数据的具体方法 前面和大家分享了博途Wincc中配方功能的具体使用方法,具体内容可参考以下链接中的内容: TIA博途Wincc中自定义配方画面的具体方法示例 上面的例子中,向PLC写入数据时是通过点击屏幕上的按钮来实现…

scrapy爬虫标准流程

Scrapy爬虫的标准流程一般包括以下几个步骤: 1、明确需求和目标网站的结构,确定需要爬取的数据以及爬取规则。 2、创建一个Scrapy项目,使用命令行工具创建一个新的Scrapy项目。 3、定义数据模型和item,即确定要爬取的数据结构。…

基于SpringBoot开发的仓库管理系统

系统概要 仓库管理系统总共分为两个大的模块,分别是系统模块和业务模块。其中系统模块和业务模块底下又有其子模块。 功能模块 一、业务模块 1、客户管理 客户列表 客户分页和模糊查询 客户添加、修改、删除、批量删除 2、供应商管理 供应商列表 供应商分…

sql注入合集

1.Access注入 http://110.40.154.212:8002/Production/PRODUCT_DETAIL.asp?id1513 and exists(select count(*) from admin) #存在admin表,继续爆,还存在job,email,product等http://110.40.154.212:8002/Production/PRODUCT_DETAIL.asp?id1513 and e…

软考A计划-重点考点-专题二(程序语言)

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分享&am…