java--GUI

目录

GUI(Graphical User Interface)

swing

窗口(JFrame)

面板(JPanel)

流水布局(FlowLayout)

边界布局(BorderLayout)

​编辑

网格布局(GridLayout)

按钮(JButton)

标签组件,用来设置文字(JLabel)

单行文本框组件(JTextField)

多行文本框组件(文本域)

带滚动条的面板

密码框(JPasswordField)

菜单栏 菜单 菜单项

菜单栏(JMenuBar)

菜单(JMenu)

菜单项(JMenuItem)

监听器(ActionListener)

为文本框添加事件监听

键盘处理事件

为组件添加事件处理程序

鼠标处理事件  共五种

为窗口添加事件监听

对话框

消息框

选择对话框

输入对话框

内部类

匿名内部类


GUI(Graphical User Interface)

图形用户界面——Java提供的图形用户界面

UI——用户界面

图形界面是方便用户操作的

swing

javax.swing包

包含了Java主要的图形界面的实现类  

组件

        容器组件——窗口,面板,对话框

        功能组件——按钮  输入框,菜单……

容器的add()向容器中添加组件

窗口(JFrame)

需继承JFrame

创建窗口的常用方法

setTitle(String title):设置窗口的标题。

setSize(int width, int height):设置窗口的大小。

setLocation(int x, int y):设置窗口的位置。

setResizable(boolean resizable):设置窗口是否可调整大小。

setDefaultCloseOperation(int operation):设置窗口关闭时的操作。

add(Component comp):添加组件。

setVisible(boolean visible):设置窗口是否可见。

dispose():释放当前窗口

public class DemoFrame extends JFrame {public DemoFrame() throws HeadlessException {this.setTitle("小世界");//名称this.setSize(300,300);//设置宽和高//this.setLocation(200,400);//自定义坐标位置this.setLocationRelativeTo(null);//水平垂直居中this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口时退出程序this.setResizable(false);//禁止窗口拖拽调整大小this.setVisible(true);//让窗口显示  放在设置的最后一行}public static void main(String[] args) {new DemoFrame();//创建一个窗口}
}

面板(JPanel)

面板组件可以设置布局管理方式:布局管理器

流水布局(FlowLayout)

面板默认的布局方式

把组件放在一排,从左到右排放,一行占满后,重新开启一行

面板默认流式布局是水平居中的

JPanel jPanel = new JPanel(new FlowLayout());自动居中

JPanel jPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));左对齐

JPanel jPanel = new JPanel(new FlowLayout(FlowLayout.LEFT,10,30));设置组件之间水平,垂直间距

jPanel.setBackground(new Color(255, 153, 2, 255));设置背景颜色

JPanel jPanel = new JPanel(new FlowLayout());//自动居中 默认是水平居中,上下左右为5个像素间距
jPanel.setBackground(new Color(255, 153, 2, 255));//设置面板背景颜色
JButton jButton1 = new JButton("按钮1");//创建一个按钮组件
JButton jButton2 = new JButton("按钮2");
jPanel.add(jButton1);
jPanel.add(jButton2);
//把面板添加到窗口上
this.add(jPanel);

边界布局(BorderLayout)

共五个区域,每个区域可以放置一个组件,并且占满整个区域

中间区域是必须的,其他区域可以根据需要使用

添加组件时,可以指定组件的位置,如果不指定,默认添加到中间区域

JPanel jPanel = new JPanel(new BorderLayout());
JButton jButton1 = new JButton("按钮1");
JButton jButton2 = new JButton("按钮2");
JButton jButton3 = new JButton("按钮3");
JButton jButton4 = new JButton("按钮4");
JButton jButton5 = new JButton("按钮5");jPanel.add(jButton1,BorderLayout.NORTH);//上
jPanel.add(jButton2,BorderLayout.SOUTH);//下
jPanel.add(jButton3,BorderLayout.EAST);//右
jPanel.add(jButton4,BorderLayout.WEST);//左
jPanel.add(jButton5,BorderLayout.CENTER);//中this.add(jPanel);

网格布局(GridLayout)

网格类似于一个表格,可以设置行数和列数

每个网格中只能放一个组件,占满整个区域

从第一行开始摆放,第一行占满后,再开启第二行

构造时先行后列

JPanel jPanel = new JPanel(new GridLayout(2,2));
JButton jButton1 = new JButton("按钮1");
JButton jButton2 = new JButton("按钮2");
JButton jButton3 = new JButton("按钮3");
JButton jButton4 = new JButton("按钮4");jPanel.add(jButton1);
jPanel.add(jButton2);
jPanel.add(jButton3);
jPanel.add(jButton4);this.add(jPanel);

按钮(JButton)

创建一个按钮组件

JButton jButton = new JButton("登录");

禁用按钮

jButton.setEnabled(false);

在按钮上进行提示

jButton.setToolTipText("点击登录");

标签组件,用来设置文字(JLabel)

JLabel jLabel = new JLabel("账号");

jLabel.setFont(new Font("楷体", Font.BOLD,20));//设置字体

jLabel.setForeground(new Color(20,10,10));//设置字体颜色

单行文本框组件(JTextField)

columns设置列数  列宽

JTextField jTextField = new JTextField(15);

获取文本框中输入的内容

jTextField.getText();

jPanel.add(jTextField);

多行文本框组件(文本域)

JTextArea jTextArea = new JTextArea(5,20);

设置强制换行,当文本域的一行满后自动换行

jTextArea.setLineWrap(true);

设置文本域不可编辑

jTextArea..setEditable(false);

带滚动条的面板

把多行文本框加进来,若不加入,在输入超过指定的行数后,会使文本域变大

JScrollPane jsp = new JScrollPane(jTextArea);

jPanel.add(jsp);

密码框(JPasswordField)

JLabel jLabel = new JLabel("密码");

JPasswordField jPasswordField = new JPasswordField(15);

char[] word = jPasswordField.getPassword();//获得输入的密码  char[]类型

添加密码框

jPanel.add(jPasswordField);

菜单栏 菜单 菜单项

菜单栏(JMenuBar)

JMenuBar jMenuBar = new JMenuBar();//创建菜单栏

菜单(JMenu)

创建的是早期的菜单,有立体效果

构造方法

JMenu jMenu = new JMenu("文件");

菜单项(JMenuItem)

构造方法

JMenuItem jMenuitem1 = new JMenuItem("打开");

把菜单项添加到菜单上

jMenu.add(jMenuitem);

把菜单添加到菜单栏上

jMenuBar.add(jMenu);

把菜单栏添加到窗口

this.setJMenuBar(jMenuBar);

监听器(ActionListener)

监听器 监听组件有没有事件产生

一旦点击了某个按钮产生事件,监听器就捕获到这次事件 从而去调用对应的事件处理程序

ActionListener是一个接口,使用监听有不同的用法

1.另一个类(需传入参数,使用麻烦)

2.内部类

使用内部类比另一个类更加合适,内部类中可以直接使用外部类的成员

class A implements ActionListener {@Overridepublic void actionPerformed(ActionEvent e) {}
}

3.new 接口 创建一个匿名内部类,简化语法

为组件添加事件处理程序

addActionListener

jButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {System.out.println(jTextField.getText());}
});

为文本框添加事件监听

键盘处理事件

addKeyListener

按键按下keyPressed

jTextField.addKeyListener(new KeyAdapter() {@Overridepublic void keyPressed(KeyEvent e) {System.out.println("按键按下了"+e.getKeyChar()+":"+e.getKeyCode());jButton.setEnabled(true);}
});

为组件添加事件处理程序

鼠标处理事件  共五种

addMouseListener

jButton.addMouseListener(new MouseAdapter(){@Overridepublic void mouseClicked(MouseEvent e) {System.out.println("鼠标点击");}@Overridepublic void mousePressed(MouseEvent e) {System.out.println("鼠标按下");}@Overridepublic void mouseReleased(MouseEvent e) {System.out.println("鼠标释放(鼠标按键抬起)");}@Overridepublic void mouseEntered(MouseEvent e) {System.out.println("鼠标移入到标签上");}@Overridepublic void mouseExited(MouseEvent e) {System.out.println("鼠标从标签移出");}
});

为窗口添加事件监听

addWindowListener

关闭的监听

this.addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {int res = JOptionPane.showConfirmDialog(null, "是否退出","提示操作",JOptionPane.OK_CANCEL_OPTION);if(res==0){//点击确定//打开登录窗口new LogonFrame();dispose();//释放聊天窗口}}
});

对话框

消息框

JOptionPane.showMessageDialog()

无返回值

ERROR_MESSAGE  错误

WARNING_MESSAGE  警告

jButton.addMouseListener(new MouseAdapter(){@Overridepublic void mouseClicked(MouseEvent e) {System.out.println("鼠标点击");String s = jTextField.getText();if(s.length()==0){JOptionPane.showMessageDialog(null, "请输入账号","操作提供",JOptionPane.WARNING_MESSAGE);}}
});

选择对话框

JOptionPane.showConfirmDialog()

有int类型的返回值

JOptionPane.showConfirmDialog(null, "你确定要登录吗?");

JOptionPane.showConfirmDialog(null, "你确定要登录吗?");
int res = JOptionPane.showConfirmDialog(null, "你确定要登录吗?","标题",JOptionPane.OK_CANCEL_OPTION);
//点击确定返回0,点击取消返回2
if(res ==0){//执行登录操作
}

JOptionPane.OK_CANCEL_OPTION,对话框只有确定和取消

输入对话框

JOptionPane.showInputDialog(null,"请输入姓名");

有String类型的返回值

内部类

在一个类的内部定义的类称为内部类,内部类也是外部类的成员

为什么要使用内部类

1.内部类可以直接访问外部类的成员,无论成员是不是private

2.内部类只服务于当前的外部类,其他地方用不到此类

匿名内部类

new 接口/抽象类

不是new接口/抽象类的对象,为接口或抽象类创建一个匿名内部类来实现继承他们,省去创建一个类简化语法

内部类的意义

内部类编译后的字节码

A$B.class

类C中需要用到类中的成员,类C是一个外部类,无法使用到类A中成员 就可以把类C定义到类A中去, 类C只服务于类A,其他类中用不到类C,此种情况下也可以将类C定义为类A的内部类

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

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

相关文章

使用Java编写的简单彩票中奖概率计算器

前言 在当今社会,彩票已经成为许多人追逐梦想和改变生活的一种方式。然而,中奖的概率却是一个让人犹豫和兴奋的话题。在这篇文章中,我们将探讨如何使用Java编程语言实现一个简单的彩票中奖概率计算器。通过这个计算器,我们可以根…

【星海随笔】windows 上跑MySQL

step one 使用 WSL 在 Windows 上安装 Linux wsl官方文档 在管理员模式下打开 PowerShell windows上安装wsl wsl --install查看哪些是可用的 wsl --list --onlineC:\Windows\System32\drivers\hosts docker-desktop下载官网:Install Docker Desktop on Windows …

关于执行CLAM的代码的一些需要记录的点

文章链接:[2004.09666] Data Efficient and Weakly Supervised Computational Pathology on Whole Slide Images (arxiv.org) 代码链接:GitHub - mahmoodlab/CLAM: Data-efficient and weakly supervised computational pathology on whole slide images…

不上班,我靠这5份赚钱副业养活了自己

在这个快节奏的社会里,很多人都在为生活奔波忙碌。今天,就让我来跟大家分享一下我的“躺平”秘籍吧! 这一个月来,我没有上班,但好在有副业养活自己。有时候,我真的觉得有一份自己喜欢的自媒体副业挺好的。…

web 基础之 HTTP 请求

web 基础 网上冲浪 就是在互联网(internet)上获取各种信息,进行工作,或者娱乐,他的英文表示surfing the Internet,因 “surfing”d的意思是冲浪,即成为网上冲浪,这是一种形象说法, 也是一个非…

推荐网站(5)Pika文字生成视频,ai视频创作

今天推荐一个网站,Pika文字生成视频,通过问题描述,帮我们生成对应的视频,非常的实用。 比如输入:一只小狗在河边洗澡 当然我们还可以在生成的视频上编辑 点击编辑后出来一些属性,可以修改区域&#xff0c…

安卓玩机工具----一键备份手机分区 防止全檫除或者格机导致安全数据分区丢失

工具说明; 目前玩机root后有很多格机脚本。模块等等误刷会导致基带信号等等问题,在前面的博文中我有介绍过备份主要数据分区的重要性 。其实对于不了解root和不安装有些模块 外挂等等需要的友友不建议对手机进行root。root后对于手机安全性会有所降低。对于玩家来说…

nn.TransformerEncoderLayer详细解释,使用方法!!

nn.TransformerEncoderLayer nn.TransformerEncoderLayer 是 PyTorch 的 torch.nn 模块中提供的一个类,用于实现 Transformer 编码器的一个单独的层。Transformer 编码器层通常包括一个自注意力机制和一个前馈神经网络,中间可能还包含层归一化&#xff…

期权买方要保证金吗?期权交易保证金怎么计算?

今天期权懂带你了解期权买方要保证金吗?期权交易保证金怎么计算?期权保证金其实就是你在购买期权合约时,作为卖方要付出的那一小笔钱。简单说,就是为了防止你违约,给交易双方一个保障的“小押金”。 期权买方要保证金吗…

63-HDMI转VGA电路设计

视频链接 HDMI转VGA电路设计01_哔哩哔哩_bilibili HDMI转VGA电路设计 HDMI电路设计(参考第13课) VGA电路设计(参考第15课) DP转VGA电路设计(参考第75课) 1、HDMI转VGA转换器 2、HDMI转VGA简介 1、解…

使用quicker进行局域网文件互传

使用了动作:文件服务器 https://getquicker.net/Sharedaction?code7a49ca6b-d243-4478-1e87-08d9f1ba2358 在文件夹中打开打开这个动作就能使用。 配置 右键动作可以设置: 选择了最后一个之后,打开服务之后能在右下角有一个弹窗&#xff…

java线上问题排查之内存分析(三)

java线上问题排查之内存分析 使用top命令 top命令显示的结果列表中,会看到%MEM这一列,这里可以看到你的进程可能对内存的使用率特别高。以查看正在运行的进程和系统负载信息,包括cpu负载、内存使用、各个进程所占系统资源等。 2.用jstat命令…

4月12日在广州举办第四期“数据安全官、数据安全评估师学员私享交流活动”

4月12日在广州举办第四期“数据安全官、数据安全评估师学员私享交流活动”,就个人信息保护与企业数据安全相关实践痛点展开讨论,共同探讨相关领域的最新动态和未来发展趋势。 ✨活动亮点✨ 与业界大佬近距离接触,也许下一个合作伙伴就在身边!🚀 现场互…

Day21 代码随想录打卡|字符串篇---右旋转字符串

题目(卡码网 T55): 字符串的右旋转操作是把字符串尾部的若干个字符转移到字符串的前面。给定一个字符串 s 和一个正整数 k,请编写一个函数,将字符串中的后面 k 个字符移到字符串的前面,实现字符串的右旋转…

MySQL 中的HASH详解

目录 HASH表结构 HASH冲突 解决方法 链地址法 开放地址法 建立公共溢出区 MySQL中的哈希索引(Hash Index)是一种特殊的数据库索引类型,它利用哈希表(Hash Table)的数据结构来存储索引项。哈希表通过哈希函数&…

JSON++介绍

1.简介 JSON 是一个轻量级的 JSON 解析库,它是 JSON(JavaScript Object Notation)的一个超集。整个代码由一个单独的头文件json.hpp组成,没有库,没有子项目,没有依赖项,没有复杂的构建系统&…

Web 3.0时代:软文发稿对企业品牌的影响

Web 3.0的到来,标志着我们已经进入了一个全新的互联网时代。在这个新时代中,信息的生成和传播有了更多的可能性和更广的空间。作为企业品牌宣传的重要手段之一的软文发稿,在Web 3.0时代将会面临什么样的挑战和机遇? 首先&#xf…

使用openssl创建https证书

原文地址:使用openssl创建https证书-腾讯云开发者社区-腾讯云 从今天开始笔者打算和大家聊一聊http2这个协议,想要说清楚http2协议就必须亲手搭建一个http2的服务,并且对比http2和http1.1的特点,从而了解http2的一些新特性。 ht…

产品专访|“产品”远程运维系统与“设备”远程运维系统的区别?

在日益复杂的工业制造环境下,远程运维已经成为生产制造企业不可或缺的一部分。在这个大背景下,产品远程运维系统和设备远程运维系统的需求越来越多,各自发挥着独特的作用。然而,尽管它们都涉及到远程运维的概念,但在实…

windows系统远程执行脚本部署项目操作手册

windows系统远程执行脚本部署项目操作手册 windows系统远程执行脚本部署项目 如果频繁的需要部署项目到远程的服务器上,每次要手动上传项目,然后停止项目,启动项目,很麻烦,像Linux天生支持远程执行脚本 Windows借助工具也可以做到. 安装WinSCP软件 自行下载软件或关注我的公…