JavaGUI编程

目录

GUI概念

Swing概念

组件

容器组件

窗口(JFrame)

代码

运行

面板(JPanel)

代码

运行

布局管理器

FlowLayout

代码

运行

BorderLayout

 代码

运行

GridLayout

代码

运行

常用组件 

标签(JLabel)

代码 

运行

单行文本(JTextField)

代码

运行

多行文本框(JTextArea)  滚动面板(JScrollPane)

代码 

运行

 ​编辑

密码框(JPasswordField)

代码 

运行

按钮(JButton)

代码 

运行

菜单栏组件--菜单组件--菜单项组件

代码 

运行

事件处理

事件:

代码 

运行

代码

运行

对话框

代码

运行 

内部类

概念:

特点:

匿名内部类:

内部类意义:

1.封装性

2.实现多继承


GUI概念

GUI(Graphical  User  Interface):图形用户界面--->java提供的图形用户界面

UI---用户界面

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

Swing概念

javax.swing包

此包中包含了java主要的图形界面的实现类

组件

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

功能组件--按钮  输入框  菜单......

容器组件

功能组件不能独立地显示出来,必须将组件放在一定的容器(container)中才 可以显示出来。

容器可以容纳多个组件,通过调用容器的add(Component comp)方法向容 器中添加组件。

窗口(JFrame)和面板(JPanel)是最常用的两个容器。

窗口(JFrame)

代码

package com.ffyc.javagui.frame;import javax.swing.*;
import java.awt.*;public class LoginFrame extends JFrame {public LoginFrame() 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 LoginFrame();}
}

运行

面板(JPanel)

代码

package com.ffyc.javagui.panel;import javax.swing.*;
import java.awt.*;public class Demo1Frame extends JFrame {public Demo1Frame() throws HeadlessException {//添加标题this.setTitle("欢迎登录");//设置宽高this.setSize(300, 300);//自定义坐标位置this.setLocation(200, 400);//水平垂直居中this.setLocationRelativeTo(null);//关闭窗口时退出程序this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置禁止窗口设置拖拽调整大小this.setResizable(false);//创建一个面板JPanel jPanel = new JPanel();//背景颜色布置jPanel.setBackground(new Color(111, 161, 136, 255));//创建一个按钮组件JButton jButton = new JButton("按钮");//向面板上添加其他组件jPanel.add(jButton);//把面板添加到窗口上this.add(jPanel);//让窗口显示,放在设置的最后一行this.setVisible(true);}public static void main(String[] args) {//创建了一个窗口对象new Demo1Frame();}
}

运行

布局管理器

Java中的图形界面在布局管理上采用容器和布局管理相分离的方案,也就是说容器只是把组件放进来,但它不管怎样放置。至于如何放置需要 用到布局管理器(Container) 。Java中有几种常用的布局管理器,分 别是:FlowLayout , BorderLayout, GridLayout。

FlowLayout

          FlowLayout:流水布局  也是面板默认的布局方式 
                     把组件放在一排,从左到右排放,一行占满后,重新开启一行
                     面板默认流式布局是水平居中的 

代码

package com.ffyc.javagui.panel;import javax.swing.*;
import java.awt.*;public class Demo2Frame extends JFrame {public Demo2Frame() throws HeadlessException {//添加标题this.setTitle("欢迎登录");//设置宽高this.setSize(300, 300);//自定义坐标位置this.setLocation(200, 400);//水平垂直居中this.setLocationRelativeTo(null);//关闭窗口时退出程序this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置禁止窗口设置拖拽调整大小this.setResizable(false);//设置内容水平对齐方式//JPanel jPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));//设置组件之间水平,垂直间距JPanel jPanel = new JPanel(new FlowLayout(FlowLayout.LEFT,10,30));JButton jButton1 = new JButton("按钮1");JButton jButton2 = new JButton("按钮2");jPanel.add(jButton1);jPanel.add(jButton2);//把面板添加到窗口上this.add(jPanel);//让窗口显示,放在设置的最后一行this.setVisible(true);}public static void main(String[] args) {//创建了一个窗口对象new Demo2Frame();}
}

运行

BorderLayout

          BorderLayout边界布局:  

            总共有5个区域,每个全用于可以放置一个组件,并且占满整个区域,
            中间区域是必须的,其他几个区域按需使用
            添加组件时可以指定组件位置,如果不指定,默认添加到中间区域 

 代码

package com.ffyc.javagui.panel;import javax.swing.*;
import java.awt.*;public class Demo3Frame extends JFrame {public Demo3Frame() throws HeadlessException {//添加标题this.setTitle("欢迎登录");//设置宽高this.setSize(300, 300);//自定义坐标位置this.setLocation(200, 400);//水平垂直居中this.setLocationRelativeTo(null);//关闭窗口时退出程序this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置禁止窗口设置拖拽调整大小this.setResizable(false); 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.WEST);jPanel.add(jButton4,BorderLayout.EAST);jPanel.add(jButton5,BorderLayout.CENTER);//把面板添加到窗口上this.add(jPanel);//让窗口显示,放在设置的最后一行this.setVisible(true);}public static void main(String[] args) {//创建了一个窗口对象new Demo3Frame();}
}

运行

GridLayout

          GridLayout网格布局: 
            网格就类似与一个表格,可以设置行数和列数
            每个网格中只能放一个组件,占满整个区域
            从第一行开始摆放,每一行占满后,再开启第二行

代码

package com.ffyc.javagui.panel;import javax.swing.*;
import java.awt.*;public class Demo4Frame extends JFrame {public Demo4Frame() throws HeadlessException {//添加标题this.setTitle("欢迎登录");//设置宽高this.setSize(300, 300);//自定义坐标位置this.setLocation(200, 400);//水平垂直居中this.setLocationRelativeTo(null);//关闭窗口时退出程序this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置禁止窗口设置拖拽调整大小this.setResizable(false);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);//让窗口显示,放在设置的最后一行this.setVisible(true);}public static void main(String[] args) {//创建了一个窗口对象new Demo4Frame();}
}

运行

常用组件 

标签(JLabel)

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

代码 

package com.ffyc.javagui.component;import javax.swing.*;
import java.awt.*;public class Component1Frame extends JFrame{public Component1Frame() throws HeadlessException {//添加标题this.setTitle("欢迎登录");//设置宽高this.setSize(300, 300);//自定义坐标位置this.setLocation(200, 400);//水平垂直居中this.setLocationRelativeTo(null);//关闭窗口时退出程序this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置禁止窗口设置拖拽调整大小this.setResizable(false);//创建一个面板JPanel jPanel = new JPanel();//标签组件,用来放置文字JLabel jLabel = new JLabel("账号");//设置字体jLabel.setFont(new Font("楷体", Font.BOLD, 20));//设置字体颜色jLabel.setForeground(new Color(20,30,40));jPanel.add(jLabel);//把面板添加到窗口上this.add(jPanel);//让窗口显示,放在设置的最后一行this.setVisible(true);}public static void main(String[] args) {new Component1Frame();}
}

运行

单行文本(JTextField)

代码

package com.ffyc.javagui.component;import javax.swing.*;
import java.awt.*;public class Component1Frame extends JFrame{public Component1Frame() throws HeadlessException {//添加标题this.setTitle("欢迎登录");//设置宽高this.setSize(300, 300);//自定义坐标位置this.setLocation(200, 400);//水平垂直居中this.setLocationRelativeTo(null);//关闭窗口时退出程序this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置禁止窗口设置拖拽调整大小this.setResizable(false);//创建一个面板JPanel jPanel = new JPanel();//单行文本框组件  设置列数 列宽JTextField jTextField = new JTextField(15);//获得文本框中输入的内容jTextField.getText();jPanel.add(jTextField);//把面板添加到窗口上this.add(jPanel);//让窗口显示,放在设置的最后一行this.setVisible(true);}public static void main(String[] args) {new Component1Frame();}
}

运行

多行文本框(JTextArea)  滚动面板(JScrollPane)

代码 

package com.ffyc.javagui.component;import javax.swing.*;
import java.awt.*;public class Component2Frame extends JFrame{public Component2Frame() throws HeadlessException {//添加标题this.setTitle("欢迎登录");//设置宽高this.setSize(300, 300);//自定义坐标位置this.setLocation(200, 400);//水平垂直居中this.setLocationRelativeTo(null);//关闭窗口时退出程序this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置禁止窗口设置拖拽调整大小this.setResizable(false);//创建一个面板JPanel jPanel = new JPanel();//多行文本框组件(文本域)JTextArea jTextArea = new JTextArea(5,20);//设置强制换行jTextArea.setLineWrap(true);//带滚动条的面板  把多行文本框组件加进来JScrollPane jsp = new JScrollPane(jTextArea);jPanel.add(jsp);//把面板添加到窗口上this.add(jPanel);//让窗口显示,放在设置的最后一行this.setVisible(true);}public static void main(String[] args) {new Component2Frame();}
}

运行

 

密码框(JPasswordField)

代码 

package com.ffyc.javagui.component;import javax.swing.*;
import java.awt.*;public class Component3Frame extends JFrame{public Component3Frame() throws HeadlessException {//添加标题this.setTitle("欢迎登录");//设置宽高this.setSize(300, 300);//自定义坐标位置this.setLocation(200, 400);//水平垂直居中this.setLocationRelativeTo(null);//关闭窗口时退出程序this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置禁止窗口设置拖拽调整大小this.setResizable(false);//创建一个面板JPanel jPanel = new JPanel();JLabel passwordjLabel = new JLabel("密码");JPasswordField jPasswordField = new JPasswordField(15);//获得输入的密码char[] password = jPasswordField.getPassword();jPanel.add(passwordjLabel);jPanel.add(jPasswordField);//把面板添加到窗口上this.add(jPanel);//让窗口显示,放在设置的最后一行this.setVisible(true);}public static void main(String[] args) {new Component3Frame();}
}

运行

按钮(JButton)

代码 

package com.ffyc.javagui.component;import javax.swing.*;
import java.awt.*;public class Component3Frame extends JFrame{public Component3Frame() throws HeadlessException {//添加标题this.setTitle("欢迎登录");//设置宽高this.setSize(300, 300);//自定义坐标位置this.setLocation(200, 400);//水平垂直居中this.setLocationRelativeTo(null);//关闭窗口时退出程序this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置禁止窗口设置拖拽调整大小this.setResizable(false);//创建一个面板JPanel jPanel = new JPanel();JButton jButton = new JButton("登录");//禁用按钮jButton.setEnabled(false);//按钮提示jButton.setToolTipText("点击登录");jPanel.add(jButton);//把面板添加到窗口上this.add(jPanel);//让窗口显示,放在设置的最后一行this.setVisible(true);}public static void main(String[] args) {new Component3Frame();}
}

运行

菜单栏组件--菜单组件--菜单项组件

代码 

package com.ffyc.javagui.component;import javax.swing.*;
import java.awt.*;public class Component4Frame extends JFrame{public Component4Frame() throws HeadlessException {//添加标题this.setTitle("欢迎登录");//设置宽高this.setSize(300, 300);//自定义坐标位置this.setLocation(200, 400);//水平垂直居中this.setLocationRelativeTo(null);//关闭窗口时退出程序this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置禁止窗口设置拖拽调整大小this.setResizable(false);//创建一个面板JPanel jPanel = new JPanel();//菜单栏  菜单  菜单项JMenuBar jMenuBar = new JMenuBar();//把菜单栏添加到窗口this.setJMenuBar(jMenuBar);//创建菜单JMenu jMenu1 = new JMenu("文件");JMenu jMenu2 = new JMenu("编辑");JMenu jMenu3 = new JMenu("帮助");//创建菜单项JMenuItem jMenuItem1 = new JMenuItem("新建");JMenuItem jMenuItem2 = new JMenuItem("保存");JMenuItem jMenuItem3 = new JMenuItem("剪切");JMenuItem jMenuItem4 = new JMenuItem("复制");JMenuItem jMenuItem5 = new JMenuItem("关于我们");//把菜单项添加到菜单中jMenu1.add(jMenuItem1);jMenu1.add(jMenuItem2);jMenu2.add(jMenuItem3);jMenu2.add(jMenuItem4);jMenu3.add(jMenuItem5);jMenuBar.add(jMenu1);jMenuBar.add(jMenu2);jMenuBar.add(jMenu3);//把面板添加到窗口上this.add(jPanel);//让窗口显示,放在设置的最后一行this.setVisible(true);}public static void main(String[] args) {new Component4Frame();}
}

运行

事件处理

对于采用了图形用户界面的程序来说,事件控制是非常重要的;到目前 为止,我们编写的图形用户界面程序都仅仅只是完成了界面,而没有任 何实际的功能,要实现相应的功能,必须进行事件处理;

用户与GUI组件进行交互就会发生事件,如:按下一个按钮、用键盘输 入一个字符、点击鼠标等等;

当前我们要关注的并不是“事件是如何产生的” ,而是讨论当发生事件 后,我们应当“如何处理” 。

事件:

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

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

代码 

外部类A为组件添加事件处理程序,过于繁琐,一般不用

package com.ffyc.javagui.listener;import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;public class A implements ActionListener {@Overridepublic void actionPerformed(ActionEvent e) {}
}

使用内部类或匿名内部类 

package com.ffyc.javagui.listener;import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;public class Demo1Frame extends JFrame {public Demo1Frame() throws HeadlessException {//添加标题this.setTitle("欢迎登录");//设置宽高this.setSize(300, 300);//自定义坐标位置this.setLocation(200, 400);//水平垂直居中this.setLocationRelativeTo(null);//关闭窗口时退出程序this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置禁止窗口设置拖拽调整大小this.setResizable(false);//创建一个面板JPanel jPanel = new JPanel();JTextField jTextField = new JTextField(15);JButton jButton = new JButton("登录");jPanel.add(jTextField);jPanel.add(jButton);//把面板添加到窗口上this.add(jPanel);//让窗口显示,放在设置的最后一行this.setVisible(true);//为组件添加事件处理程序 //jButton.addActionListener(new B());//new  接口  创建一个匿名内部类,是为了简化语法jButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {System.out.println(jTextField.getText());}});}//内部类/*class B implements ActionListener {@Overridepublic void actionPerformed(ActionEvent e) {}}*/ public static void main (String[] args) {//创建了一个窗口对象new Demo1Frame();}
}

运行

输入后,点击登录,输入空格返回空格,输入内容返回内容

代码

package com.ffyc.javagui.listener;import javax.swing.*;
import java.awt.*;
import java.awt.event.*;public class Demo2Frame extends JFrame {public Demo2Frame() throws HeadlessException {//添加标题this.setTitle("欢迎登录");//设置宽高this.setSize(300, 300);//自定义坐标位置this.setLocation(200, 400);//水平垂直居中this.setLocationRelativeTo(null);//关闭窗口时退出程序this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置禁止窗口设置拖拽调整大小this.setResizable(false);//创建一个面板JPanel jPanel = new JPanel();JTextField jTextField = new JTextField(15);JButton jButton = new JButton("登录");jButton.setEnabled(false);jPanel.add(jTextField);jPanel.add(jButton);//把面板添加到窗口上this.add(jPanel);//让窗口显示,放在设置的最后一行this.setVisible(true);//为文本框添加事件监听jTextField.addKeyListener(new KeyAdapter() {@Overridepublic void keyPressed(KeyEvent e) {System.out.println("按键按下了"+e.getKeyChar()+":"+e.getKeyCode());jButton.setEnabled(true);}});//为菜单项添加事件的监听以及事件的处理程序//鼠标处理事件 共有5种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("鼠标移除标签");}});}public static void main (String[] args) {//创建了一个窗口对象new Demo2Frame();}
}

运行

对话框

代码

package com.ffyc.javagui.listener;import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;public class Demo3Frame extends JFrame {public Demo3Frame() throws HeadlessException {//添加标题this.setTitle("欢迎登录");//设置宽高this.setSize(300, 300);//自定义坐标位置this.setLocation(200, 400);//水平垂直居中this.setLocationRelativeTo(null);//关闭窗口时退出程序this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置禁止窗口设置拖拽调整大小this.setResizable(false);//创建一个面板JPanel jPanel = new JPanel();JTextField jTextField = new JTextField(15);JButton jButton = new JButton("登录");jPanel.add(jTextField);jPanel.add(jButton);//把面板添加到窗口上this.add(jPanel);//让窗口显示,放在设置的最后一行this.setVisible(true);//为组件添加事件处理程序//jButton.addActionListener(new B());//new  接口  创建一个匿名内部类,是为了简化语法jButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {//获得文本框输入内容String account = jTextField.getText();if(account.length() == 0){//消息提示框//JOptionPane.showMessageDialog(null, "请输入账号!");//JOptionPane.showMessageDialog(null, "请输入账号!","操作提示",JOptionPane.WARNING_MESSAGE);int res = JOptionPane.showConfirmDialog(null, "你确定要退出吗?","操作提示",JOptionPane.OK_CANCEL_OPTION);//点击确定返回0,点击取消返回2System.out.println(res);if(res==0){//执行退出操作}return;}if(account.length() < 6 || account.length() > 6){JOptionPane.showMessageDialog(null, "请输入一个6-10位之间的账号!");return;}}});}public static void main (String[] args) {//创建了一个窗口对象new Demo3Frame();}
}

运行 

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

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

相关文章

HarmonyOS实战开发-WebSocket的使用。

介绍 本示例展示了WebSocket的使用&#xff0c;包括客户端与服务端的连接和断开以及客户端数据的接收和发送。 WebSocket连接&#xff1a;使用WebSocket建立服务器与客户端的双向连接&#xff0c;需要先通过createWebSocket方法创建WebSocket对象&#xff0c;然后通过connect…

HarmonyOS实战开发-证书管理、如何实现对签名数据进行校验功能。

介绍 本示例使用了ohos.security.certManager相关接口实现了对签名数据进行校验的功能。 实现场景如下&#xff1a; 1&#xff09;使用正确的原始数据和签名数据进行签名校验场景&#xff1a;模拟服务端对签名数据进行校验&#xff0c;验证客户端身份和原始数据完整性。 2&…

绝地求生:PUBG×杜卡迪联名上线!参与投稿评论赢取精美好礼

PUBG杜卡迪联名活动游戏内现已正式上线&#xff01;我们诚邀与您一起在开拓未知战场和书写新历史的过程中&#xff0c;与杜卡迪一同实现您的极速梦想&#xff01; 在本次的杜卡迪工坊中&#xff0c;更是包含了具备标志性红色在内的6种颜色供您自由选择&#xff0c;一起自由驰骋…

Redis入门到通过之Redis安装

文章目录 Redis安装说明1.单机安装Redis1.1.安装Redis依赖1.2.上传安装包并解压1.3.启动1.3.1.默认启动1.3.2.指定配置启动1.3.3.开机自启 2.Redis客户端2.1.Redis命令行客户端2.2.图形化桌面客户端2.2.1.安装2.2.2.建立连接 Redis安装说明 大多数企业都是基于Linux服务器来部…

GPT中的Transformer架构以及Transformer 中的注意力机制

目录 1 GPT中的Transformer架构 2 transformer中的注意力机制 参考文献&#xff1a; 看了两个比较好的视频&#xff0c;简单做了下笔记。 1 GPT中的Transformer架构 GPT是Generative Pre-trained Transformer单词的缩写&#xff0c;其中transformer是一种特定的神经网络&a…

如何排查k8s集群中Pod内mysqld进程占用内存消耗过高?

文章目录 1. **查看容器资源使用情况**&#xff1a;2. **进入容器内部**&#xff1a;3. **检查进程内存使用**&#xff1a;4. **MySQL服务器状态检查**&#xff1a;5. **MySQL日志分析**&#xff1a;6. **使用专门的MySQL监控工具**&#xff1a;7. **配置文件检查**&#xff1a…

Java基础07--多线程-网络编程-Java高级

一、多线程 1.认识多线程 ①线程 ②多线程 2.创建线程方式 ①方式一&#xff1a;继承Thread类 1.让子类继承Thread线程类 2.重写run方法&#xff0c;就是这个线程执行会执行的操作。 3.创建继承Thread的子类对象就代表一个线程 4.启动线程:.start()-自动执行run方法 注意&am…

点亮一颗 LED: 单片机 ch32v003 (RISC-V) 使用 rust 编写固件

首发日期 2024-04-09, 以下为原文内容: 使用 rust 编写单片机的程序 ? 很新, 但没问题. 使用 RISC-V CPU 的单片机 (比如 ch32v003) ? 也没问题. 同时使用 ? 哦嚯, 问题出现了 !! ch32v003 是一款使用 rv32ec 指令集的国产单片机, 很便宜 (某宝零卖只要 0.4 元一个, 在同档…

简单了解JVM

一.JVM简介 jvm及Java virtual machineJava虚拟机&#xff0c;它是一个虚构出来的计算机&#xff0c;一种规范。其实抛开这么专业的句子不说&#xff0c;就知道 JVM 其实就类似于一台小电脑运行在 windows 或者 linux 这些操作系统环境下即可。它直接和操作系统进行交互&#…

Handler——小白能懂的原理,老鸟需要的面经

1.机制学习 1.1Handler定义 发送并处理 与线程的消息队列关联的Message和Runnable 1.2基本用法 1、Message.obtain() 从消息池取得Message 2、Handler().sendMessage(msg) 发送消息 3、Handler().post 将Runnable包装成Message发送 以下提供一个结构代码 import android.os.H…

VMware导出虚拟机vmkd格式转换qcow2

VMware虚拟机导出qcow2格式可以上传至云服务 1、需要导出的虚拟机 2、克隆虚拟机 3、选择克隆源 4、创建完整克隆 5、完成 6、找到VMware安装路径 7、找到vmware-vdiskmanager所在路径使用cmd或Windows PowerShell进入目录 进入vmware-vdiskmanager目录 cd F:\软件\VMware Wo…

debian安装和基本使用

debian安装和基本使用 文章目录 debian安装和基本使用1. 为什么选择debian2. 如何下载Debian2.1 小型安装镜像2.2 完整安装镜像 3. Debian操作系统安装3.1 创建Debian虚拟机3.2 安装操作系统 4. Debian系统的初始设置4.1 桌面环境的配置4.2 配置网络4.3 生效网络配置4.4 配置de…

React 快速入门:掌握前端开发的核心技能

React 快速入门&#xff1a;掌握前端开发的核心技能 一、React 简介1.1 React 的历史1.2 React 的概念1.3 React 的特点1.4 React 的官网地址 二、开发环境搭建三、React 基础3.1 JSX3.2 组件3.3 Props3.4 State3.5 props 和 state 的区别3.6 Hook 四、React 生命周期五、添加样…

Redis Pipelining 底层原理分析及实践

作者&#xff1a;vivo 互联网服务器团队-Wang Fei Redis是一种基于客户端-服务端模型以及请求/响应的TCP服务。在遇到批处理命令执行时&#xff0c;Redis提供了Pipelining(管道)来提升批处理性能。本文结合实践分析了Spring Boot框架下Redis的Lettuce客户端和Redisson客户端对…

Unity构建详解(7)——AssetBundle格式解析

【文件格式】 文件可以分为文本文件、图片文件、音频文件、视频文件等等&#xff0c;我们常见的这些文件都有行业内的标准格式&#xff0c;其意味着按照一定的规则和规范去保存读取文件&#xff0c;可以获取我们想要的数据。 有些软件会有自己的文件格式&#xff0c;会按照其…

风储微网虚拟惯性控制系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 风储微网虚拟惯性控制系统simulink建模与仿真。风储微网虚拟惯性控制系统是一种模仿传统同步发电机惯性特性的控制策略&#xff0c;它通过集成风力发电系统、储能系统和其他分…

如何动态渲染HTML内容?用v-html!

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

计算机网络知识等汇总补充

计算机网络知识汇总补充 一、四次挥手1、为什么TCP要等待2MSL2、如果说一个系统中&#xff0c;有大量的time_wait和close_wait&#xff0c;会是什么原因&#xff1f; 二、你是怎么解决粘包问题&#xff1f;三、你觉得哪些场景适合redis四、redis的持久化策略五、你会怎么保证my…

4-云原生监控体系-Grafana-基本使用

1. 介绍 使用Grafana&#xff0c;您可以通过漂亮、灵活的仪表板创建、探索和共享所有数据。查询、可视化、提醒和理解您的数据&#xff0c;无论数据存储在何处。 图片出处&#xff1a; https://grafana.com/grafana/ 官方网站 2. 界面介绍 Connections 可以配置数据源&#x…

php-redis windows ,pecl 已经不维护了,解决方案:php 8.2 | 8.3+ redis extension windows

从论坛上pecl 已经不维护了&#xff0c;直接让大家到ci 去下载 https://stackoverflow.com/questions/76496488/redis-dll-not-found-for-php8-2/76496489#76496489 让我们找最新的一次commit &#xff0c;然后又action 构建&#xff0c;再下载&#xff0c;这样的话也好&#…