学习了 Java 的 GUI 后,尝试着做了一个仿QQ登录界面,感觉还行。

实现功能:

  • 记住密码
  • 自动登录(需要记住密码才能使用自动登录)

说明:
没有用到数据库,账号和密码是写死的。账号为 admin,密码为 123456。


运行效果:

源码如下:

  • QQInitializer.java
import javafx.scene.layout.Background;
import util.FileUtils;import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.io.*;
import java.util.Date;
import java.util.concurrent.TimeUnit;import javax.swing.*;public class QQInitializer extends JFrame {private int x = 0, y = 0; // 用来存放拖动窗口时鼠标的当前位置private LoginButtonListener loginButtonListener; // 登陆按钮的监听对象private JFrame frame; // frame窗口private JButton miniButton; // 最小化按钮private JButton closeButton; // 关闭按钮private JButton loginButton; // 登录按钮private JPanel northPanel; // 北部面板private JPanel westPanel; // 西部面板private JPanel centerPanel; // 中部面板private JPanel eastPanel; // 东部面板private JPanel southPanel; // 南部面板private JLabel northLabel; // 北部标签private JLabel westLabel; // 西部标签private JLabel codeLabel; // 忘记密码标签private JLabel enrollLabel; // 注册账号标签private JTextField text; // 账号文本框private JPasswordField codeWord; // 密码框private JCheckBox auto; // 自动登录复选框private JCheckBox mima; // 记住密码复选框private static boolean mimaState; // 记住密码复选框的当前状态private static boolean loginState; // 自动登录复选框的当前状态double time; // 让主界面停留的时间private static String id; // 储存记住的账号private static final String ACCOUNT = "admin"; // 账号private static final String PASSWORD = "123456"; // 密码// 用到的图片在 src/images 中private static final String IMAGE_PATH = System.getProperty("user.dir") + "\\src\\images\\";// 保存账号、记住密码、自动登录的文件private static final String TEMP_FILE_PATH = System.getProperty("user.dir") + "\\src\\temp\\";// 登录窗口的宽高private final int WIDTH = 500;private final int HEIGHT = 330;// 自动登录时, 登录界面的停留时间(单位:秒)private final int BLOCK_TIME = 2;public static void run() {new QQInitializer();}// 初始化界面public QQInitializer() {init();}private void init() {frame = new JFrame("QQ登录");Toolkit t = Toolkit.getDefaultToolkit();Dimension d = t.getScreenSize();
//        frame.setBounds((d.width - d.width / 3) / 2, (d.height - d.height / 3) / 2, 500, 330);frame.setSize(WIDTH, HEIGHT);frame.setLocation(d.width / 2 - frame.getWidth() / 2, d.height / 2 - frame.getHeight() / 2);frame.setIconImage(t.getImage(getImagePath("icon.jpg")));frame.setDefaultCloseOperation(HIDE_ON_CLOSE);frame.setUndecorated(true);//取消自带的边框frame.setResizable(false);northPanel = creatNorth();westPanel = creatWest();centerPanel = creatCenter();southPanel = creatSouth();eastPanel = creatEast();frame.add(northPanel, BorderLayout.NORTH);frame.add(westPanel, BorderLayout.WEST);frame.add(southPanel, BorderLayout.SOUTH);frame.add(centerPanel, BorderLayout.CENTER);frame.add(eastPanel, BorderLayout.EAST);// 由于将 JFrame 自带的边框隐藏了,所以需要通过下面的方法来实现窗口的拖动功能frame.addMouseListener(new MouseAdapter() {public void mousePressed(MouseEvent e) {x = e.getX(); // 鼠标的 Xy = e.getY(); // 鼠标的 Y}});frame.addMouseMotionListener(new MouseMotionAdapter() {public void mouseDragged(MouseEvent e) {int x_screen = e.getXOnScreen();int y_screen = e.getYOnScreen();int xx = x_screen - x;int yy = y_screen - y;frame.setLocation(xx, yy);}});// 此句必须放在最后frame.setVisible(true);if (auto.isSelected()) {loginButton.setEnabled(false);System.out.println(BLOCK_TIME + " 秒后自动登录...");Date d1 = new Date();try {TimeUnit.SECONDS.sleep(BLOCK_TIME); // 停留一秒} catch (InterruptedException e1) {e1.printStackTrace();}Date d2 = new Date();time = (double) ((d2.getTime() - d1.getTime()) / 1000);}// 是否自动登录(在这个 BLOCK_TIME 秒内, 如果没有将自动登录的复选框去掉, 则自动登录; 否则不登录)if (time == BLOCK_TIME && auto.isSelected()) {frame.dispose();onSuccess(true);} else if (time == BLOCK_TIME) {loginButton.setEnabled(true);File file1 = new File(getTempFilePath("autologin.txt"));OutputStream os;try {os = new FileOutputStream(file1);byte[] b = "false".getBytes();os.write(b);os.close();} catch (Exception e1) {e1.printStackTrace();}}}/*** 创建北部面板*/public JPanel creatNorth() {JPanel northPanel = new JPanel();northPanel.setLayout(null);northPanel.setPreferredSize(new Dimension(0, 190));ImageIcon in = new ImageIcon(getImagePath("b.jpg"));JLabel cc = new JLabel(in);cc.setBounds(0, 0, 500, 190);cc.setOpaque(false);closeButton = new JButton(new ImageIcon(getImagePath("close_normal.png"))); // 将图片作为按钮的背景closeButton.setRolloverIcon(new ImageIcon(getImagePath("close_hover.png"))); // 鼠标进入按钮时切换图片closeButton.setPressedIcon(new ImageIcon(getImagePath("close_hover.png"))); // 鼠标按下按钮时切换图片closeButton.setBounds(468, 0, 30, 30);closeButton.setToolTipText("关闭");closeButton.setContentAreaFilled(false); // 设置按钮透明closeButton.setBorderPainted(false); // 取消按钮的边框closeButton.setFocusPainted(false); // 消除按钮的焦点,即点击按钮时不出现边框closeButton.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); // 将鼠标设置为手掌型miniButton = new JButton(new ImageIcon(getImagePath("mini.jpg")));miniButton.setRolloverIcon(new ImageIcon(getImagePath("mini.png")));miniButton.setPressedIcon(new ImageIcon(getImagePath("mini.png")));miniButton.setBounds(437, 0, 30, 30);miniButton.setToolTipText("最小化");miniButton.setContentAreaFilled(false);miniButton.setBorderPainted(false);miniButton.setFocusPainted(false);miniButton.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); // 将鼠标设置为手掌型northPanel.add(closeButton);northPanel.add(miniButton);northPanel.add(cc);closeButton.addActionListener(new closeButtonListener());miniButton.addActionListener(new miniButtonListener());return northPanel;}/*** 创建西部面板*/public JPanel creatWest() {JPanel jp2 = new JPanel();jp2.setLayout(null);jp2.setPreferredSize(new Dimension(160, 0));ImageIcon ss = new ImageIcon(getImagePath("qq.png"));JLabel cs = new JLabel(ss);cs.setBounds(35, 0, 100, 100);jp2.add(cs);return jp2;}/*** 创建中部面板*/public JPanel creatCenter() {File file = new File(getTempFilePath("rememberme.txt"));if (file.exists()) {InputStream input = null;try {input = new FileInputStream(file);byte[] b = new byte[(int) file.length()];input.read(b);mimaState = Boolean.parseBoolean(new String(b));input.close();} catch (FileNotFoundException e1) {e1.printStackTrace();} catch (IOException e1) {e1.printStackTrace();}} else {mimaState = Boolean.parseBoolean(new String("false"));}File file1 = new File(getTempFilePath("autologin.txt"));if (file1.exists()) {InputStream input = null;try {input = new FileInputStream(file1);byte[] b = new byte[(int) file1.length()];input.read(b);loginState = Boolean.parseBoolean(new String(b));input.close();} catch (FileNotFoundException e1) {e1.printStackTrace();} catch (IOException e1) {e1.printStackTrace();}} else{loginState = Boolean.parseBoolean(new String("false"));}JPanel jp4 = new JPanel();jp4.setLayout(null);jp4.setPreferredSize(new Dimension(0, 220));text = new JTextField(10); // 最多存放10个字text.setBounds(0, 10, 200, 30);text.setFont(new Font("宋体", Font.BOLD, 17)); // 字体和字体大小// 限制 QQ 账号只能输入数字text.addKeyListener(new KeyAdapter() {public void keyTyped(KeyEvent e) {int key = e.getKeyChar();int count = 0;//System.out.println(key);if ((key >= KeyEvent.VK_0 && key <= KeyEvent.VK_9))count++;if ((!(key >= KeyEvent.VK_0 && key <= KeyEvent.VK_9)) || (count == 10))e.consume();}});mima = new JCheckBox("记住密码", mimaState);mima.setBounds(0, 78, 80, 18);auto = new JCheckBox("自动登录", loginState);auto.setBounds(110, 78, 80, 18);text.addFocusListener(new JTextFieldListener(text, mima, "QQ号"));text.setOpaque(false);jp4.add(text);codeWord = new JPasswordField(18);codeWord.setBounds(0, 42, 200, 30);codeWord.setFont(new Font("宋体", Font.BOLD, 17));codeWord.addFocusListener(new JPasswordFielddListener(codeWord, mima, "密码"));codeWord.setOpaque(false);jp4.add(mima);jp4.add(codeWord);jp4.add(auto);// 将账号框和密码框注册到登陆按扭的事件处理上loginButtonListener = new LoginButtonListener(text, codeWord, mima, auto);return jp4;}/*** 创建南部面板*/public JPanel creatSouth() {JPanel jp3 = new JPanel();jp3.setLayout(null);jp3.setPreferredSize(new Dimension(0, 40));loginButton = new JButton("登 录", new ImageIcon(getImagePath("login_normal.png"))); // 登录loginButton.setRolloverIcon(new ImageIcon(getImagePath("login_hover.png"))); // 鼠标进入按钮时切换图片loginButton.setPressedIcon(new ImageIcon(getImagePath("login_hover.png"))); // 鼠标按下按钮时切换图片loginButton.setBounds(160, 0, 200, 30);loginButton.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); // 将鼠标设置为手掌型loginButton.setContentAreaFilled(false);loginButton.setFocusPainted(false);loginButton.setBorderPainted(false); // 取消按钮的边框loginButton.setFocusPainted(false); // 消除按钮的焦点,即点击按钮时不出现边框loginButton.setVerticalTextPosition(SwingConstants.CENTER);loginButton.setHorizontalTextPosition(SwingConstants.CENTER);loginButton.setFont(new Font("宋体", Font.BOLD, 15));loginButton.setForeground(new Color(255, 255, 255));jp3.add(loginButton);loginButton.addActionListener(loginButtonListener);return jp3;}/*** 创建东部面板*/public JPanel creatEast() {JPanel jp5 = new JPanel();jp5.setLayout(null);jp5.setPreferredSize(new Dimension(130, 0));enrollLabel = new JLabel("注册账号");enrollLabel.setBounds(0, 10, 100, 30);enrollLabel.setFont(new Font("宋体", Font.BOLD, 15));enrollLabel.setForeground(new Color(100, 149, 238));enrollLabel.addMouseListener(new LabelAdapter(enrollLabel, "注册账号"));enrollLabel.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); // 将鼠标设置为手型codeLabel = new JLabel("忘记密码");codeLabel.setBounds(0, 42, 100, 30);codeLabel.setFont(new Font("宋体", Font.BOLD, 15));codeLabel.setForeground(new Color(100, 149, 238));codeLabel.addMouseListener(new LabelAdapter(codeLabel, "忘记密码"));codeLabel.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));jp5.add(enrollLabel);jp5.add(codeLabel);return jp5;}/*** 北部面板关闭按钮的事件处理*/class closeButtonListener implements ActionListener {public void actionPerformed(ActionEvent e) {//frame.dispose();System.exit(0);}}/*** 北部面板最小化按钮的事件处理*/class miniButtonListener implements ActionListener {public void actionPerformed(ActionEvent e) {frame.setExtendedState(frame.ICONIFIED);}}/** 南部的登录按钮的事件处理*/class LoginButtonListener implements ActionListener {private JTextField t;private JPasswordField f;private JCheckBox mima;private JCheckBox login;public LoginButtonListener(JTextField t, JPasswordField f, JCheckBox mima, JCheckBox login) {this.t = t;this.f = f;this.mima = mima;this.login = login;}public void actionPerformed(ActionEvent e) {String account = t.getText();String password = new String(f.getPassword());File rememberMimaFile = new File(getTempFilePath("rememberme.txt"));File autoLoginFile = new File(getTempFilePath("autologin.txt"));if (ACCOUNT.equals(account) && PASSWORD.equals(password)) {// 如果登录时记住了密码, 则记录状态, 下次登录时自动填充账号和密码if (mima.isSelected()) {File file2 = new File(getTempFilePath("account.txt"));try {FileUtils.createFile(getTempFilePath("account.txt"));OutputStream os1 = new FileOutputStream(file2);byte[] b1 = account.getBytes();os1.write(b1);os1.close();} catch (IOException e2) {e2.printStackTrace();}try {FileUtils.createFile(getTempFilePath("rememberme.txt"));OutputStream os = new FileOutputStream(rememberMimaFile);byte[] b = "true".getBytes();os.write(b);os.close();} catch (IOException e1) {e1.printStackTrace();}} else {try {FileUtils.createFile(getTempFilePath("rememberme.txt"));OutputStream os = new FileOutputStream(rememberMimaFile);byte[] b = "false".getBytes();os.write(b);os.close();} catch (IOException e1) {e1.printStackTrace();}}// 自动登录if (mima.isSelected() && login.isSelected()) {try {FileUtils.createFile(getTempFilePath("autologin.txt"));OutputStream os = new FileOutputStream(autoLoginFile);byte[] b = "true".getBytes();os.write(b);os.close();} catch (IOException e1) {e1.printStackTrace();}} else {try {FileUtils.createFile(getTempFilePath("autologin.txt"));OutputStream os = new FileOutputStream(autoLoginFile);byte[] b = "false".getBytes();os.write(b);os.close();} catch (IOException e1) {e1.printStackTrace();}}// 登录成功frame.dispose();onSuccess(true);} else {JOptionPane.showMessageDialog(null, "账号或密码错误,请重新输入", "提示消息", JOptionPane.ERROR_MESSAGE);}}}/*** 实现文本框的焦点功能,当焦点不在文本框内时,显示默认提示信息(QQ号)*/public class JTextFieldListener implements FocusListener {private String str;private JTextField text1;private JCheckBox rememberMima;public JTextFieldListener(JTextField text1, JCheckBox rememberMima, String str) {this.text1 = text1;this.rememberMima = rememberMima;this.str = str;if (rememberMima.isSelected()) {File file = new File(getTempFilePath("account.txt"));try {InputStream in = new FileInputStream(file);byte[] bn = new byte[(int) file.length()];in.read(bn);in.close();id = new String(bn);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}text1.setText(new String(id));text1.setForeground(Color.BLACK);} else {text1.setText(str);text1.setForeground(Color.gray);}}public void focusGained(FocusEvent e) {if (text1.getText().equals(str)) {text1.setText("");text1.setForeground(Color.BLACK);}}public void focusLost(FocusEvent e) {if (text1.getText().equals("")) {text1.setForeground(Color.gray);text1.setText(str);}}}/*** 实现密码框的焦点功能,当焦点不在密码框内时,显示默认提示信息(密码)*/public class JPasswordFielddListener implements FocusListener {private String str;private JPasswordField text1;private JCheckBox rememberMima;public JPasswordFielddListener(JPasswordField text1, JCheckBox rememberMima, String str) {this.text1 = text1;this.rememberMima = rememberMima;this.str = str;if (rememberMima.isSelected()) {String strMima = PASSWORD;text1.setText(strMima);text1.setEchoChar('*');text1.setForeground(Color.BLACK);} else {text1.setText(str);text1.setEchoChar((char) (0));//不设置回显text1.setForeground(Color.gray);}}public void focusGained(FocusEvent e) {if (text1.getText().equals(str)) {text1.setText("");text1.setEchoChar('*'); // 将回显设置为'*'text1.setForeground(Color.BLACK);}}public void focusLost(FocusEvent e) {if (text1.getText().equals("")) {text1.setEchoChar((char) (0));text1.setForeground(Color.gray);text1.setText(str);}}}/*** 对注册账号和忘记密码的标签添加鼠标事件*/public class LabelAdapter extends MouseAdapter {private JFrame jf;private JLabel la;private String title;public LabelAdapter(JLabel la, String title) {this.la = la;this.title = title;}public void mouseClicked(MouseEvent e) {jf = new JFrame(title);Toolkit t = Toolkit.getDefaultToolkit();Dimension d = t.getScreenSize();jf.setBounds((d.width - d.width / 3) / 2, (d.height - d.height / 3) / 2, 500, 330);jf.setBounds(500, 300, 500, 200);jf.setVisible(true);jf.setResizable(false);}public void mouseEntered(MouseEvent e) {la.setForeground(new Color(255, 77, 35));}public void mousePressed(MouseEvent e) {la.setForeground(new Color(255, 77, 35));}public void mouseExited(MouseEvent e) {la.setForeground(new Color(100, 149, 238));}}/*** 登录成功后的回调*/private void onSuccess(boolean message) {if (message) {if (auto.isSelected() && time == BLOCK_TIME) {JOptionPane.showMessageDialog(null, "自动登录成功", "提示消息", JOptionPane.INFORMATION_MESSAGE);} else {JOptionPane.showMessageDialog(null, "登录成功", "提示消息", JOptionPane.INFORMATION_MESSAGE);}}JFrame jf = new JFrame("QQ主页");Toolkit t = Toolkit.getDefaultToolkit();Dimension d = t.getScreenSize();jf.setIconImage(t.getImage(getImagePath("icon.jpg")));
//        jf.setSize(WIDTH, HEIGHT);jf.setDefaultCloseOperation(EXIT_ON_CLOSE); // 关闭时, 退出程序// 设置背景图片ImageIcon background = new ImageIcon(getImagePath("qqSuccess.png"));JLabel label = new JLabel(background);// 把标签的大小位置设置为图片刚好填充整个面板label.setBounds(0, 0, background.getIconWidth(), background.getIconHeight());// 把内容窗格转化为JPanel,否则不能用方法setOpaque()来使内容窗格透明JPanel imagePanel = (JPanel) jf.getContentPane();imagePanel.setOpaque(false);// 内容窗格默认的布局管理器为BorderLayoutimagePanel.setLayout(new FlowLayout());jf.getLayeredPane().setLayout(null);// 把背景图片添加到分层窗格的最底层作为背景jf.getLayeredPane().add(label, new Integer(Integer.MIN_VALUE));jf.setSize(background.getIconWidth(), background.getIconHeight());
//        jf.setLocation(d.width / 2 - jf.getWidth() / 2, d.height / 2 - jf.getHeight() / 2);jf.setLocation(d.width - d.width / 4  , d.height / 7);jf.setVisible(true);}private String getImagePath(String imageName) {if (imageName == null || imageName.trim().length() == 0) {throw new RuntimeException("图片名称不能为空");}return IMAGE_PATH + imageName;}private String getTempFilePath(String fileName) {if (fileName == null || fileName.trim().length() == 0) {throw new RuntimeException("图片名称不能为空");}return TEMP_FILE_PATH + fileName;}
}
  • Application.java
public class Application {public static void main(String[] args) {QQInitializer.run();}
}
  • FileUtils.java
import java.io.File;
import java.io.IOException;public class FileUtils {public static void makeSureParentExist(String fileName) {if (fileName == null || fileName.trim().length() == 0) {return;}File file = new File(fileName);if (!file.exists() && !file.isDirectory()) {file = new File(file.getParent());file.mkdirs();}}public static boolean createFile(String fileName) throws IOException{makeSureParentExist(fileName);File file = new File(fileName);if (file.exists()) {return true;}return file.createNewFile();}
}

以上代码可以直接运行(直接运行 Application.java 即可)。

项目的目录结构如下:

src
├─images
│      b.jpg
│      close_hover.png
│      close_normal.png
│      icon.jpg
│      keyboard.png
│      login_hover.png
│      login_normal.png
│      mini.jpg
│      mini.png
│      qq.png
│      qqSuccess.png
│      right_hover.png
│      right_normal.png
│      single_down.png
│      single_normal.png
│
├─main
│      Application.java
│      QQInitializer.java
│
└─utilFileUtils.java

代码中使用到的图片

链接:网盘链接
提取码:zm8j

链接:网盘链接
提取码:ywf6

如果直接点击链接,可能会跳转到 CSDN 的资源界面,需要开通 VIP 才能下载,有点 ex。右键 -> 在新窗口打开链接 就可以跳转到网盘了。

将图片放在 src / images 文件夹下,图片的名字不要修改。

Java实现简单的QQ登录界面相关推荐

  1. 在 Android Studio 中创建一个简单的 QQ 登录界面

    一,创建一个新的 Android Studio 项目 打开 Android Studio,选择 "Start a new Android Studio project",然后填写应 ...

  2. JavaSwing仿QQ登录界面,注释完善,适合新手学习

    使用说明: 这是一个java做的仿制QQ登录界面,界面仅使用一个类, JDK版本为jdk-11 素材包的名字为:素材(下载)请在项目中新建一个名字为"素材"的文件夹. 素材: ht ...

  3. java qq登录成功界面_java实现简单QQ登录界面

    本文实例为大家分享了java实现简单QQ登录界面的具体代码,供大家参考,具体内容如下 java在图形界面,不是太强项,但不是不可以做,它的开源是very nice! 实现代码如下(想实现完美的界面,可 ...

  4. java实现简单QQ登录界面验证_QQ登录界面实现

    正版现货ui设计必修课sketch ue光盘 191.8元 包邮 (需用券) 去购买 > Java实现QQ登录界面 QQ登录界面也是界面的一种,在实现界面时我们需要一些界面开发包,如: pack ...

  5. java仿qq登录 界面设计,Java Swing仿QQ登录界面效果

    本文实例为大家分享了Java Swing仿QQ登录界面展示的具体代码,供大家参考,具体内容如下 闲来无事将早些时候已实现的QQ登录界面再实现了一遍,纯手工打造(意思是没有用NetBeans.MyEcl ...

  6. java qq登录界面_用java实现QQ登录界面怎么写

    展开全部 用32313133353236313431303231363533e78988e69d8331333365646263java做QQ登录界面的写法如下: package ch10; impo ...

  7. java如何引入qq登陆,Java Swing仿QQ登录界面 学习之用

    闲来无事将早些时候已实现的QQ登录界面再实现了一遍,纯手工打造(意思是没有用NetBeans.MyEclipse的拖动功能). 源代码如下: package ibees.qq; import java ...

  8. JAVA编写QQ登录界面

    在开始学习JAVA图形界面编程中,老师留的第一个作业就是编写一个QQ登录界面,本来我的JAVA就不怎么会写,所以就在网上找啊找,结果就翻到了某位大佬的博客,参考了许多,附上大佬链接http://wz9 ...

  9. java gui界面设计qq_Java swing界面开发(仿QQ登录界面)

    首先引入包的概念,包:给代码分类,提高的了代码的可读性,封装后方便管理.在包中类的引入:import 包名.类名;包名需小写,多单词用"."隔开.类名的命名规范:首字母大写其后的每 ...

  10. java实现qq登录界面_java模仿实现QQ登录界面

    本文实例为大家分享了java模仿实现qq登录界面的具体代码,供大家参考,具体内容如下 这是我模仿QQ2015版界面,实现的基本功能有登陆验证,重置等,当然直接复制代码运行是不一样的,还要注意自己插入自 ...

最新文章

  1. 机器学习项目实战----信用卡欺诈检测
  2. aspose.words 操作word插入空白页_让 “空白页”无处可逃,消除你的烦恼
  3. python 如何遍历文件夹下所有图片/文件? os.walk() os.listdir()
  4. 复现经典:《统计学习方法》第22章 无监督学习方法总结
  5. 一起学习C语言:C语言循环结构(一)
  6. [转载] 如何用一个Python示例入门TensorFlow?
  7. C#制作简易屏幕保护
  8. Android 3D 旋转
  9. windows下利用注册表regedit手动删除文件
  10. Flink案例代码,面试题
  11. Thinkpad笔记本电池保养
  12. 【JAVA】RequestResponse
  13. 4大私域流量体系(个人号、公众号、社群和小程序)全方面价值对比:私域流量,企业保命之本爆发之源!...
  14. CAD设置超链接(网页版)
  15. TCP缓冲区大小及限制
  16. Linux远程管理常用命令(超全超详细)【持续更新】
  17. 简单的led驱动 了解下
  18. Openbravo架构分析
  19. 关于《数据仓库知识体系》的超全指南(建议收藏)
  20. 黑马程序员--网络编程知识点总结

热门文章

  1. Mac版本Octane渲染器安装教程支持M1和英特尔全系列分享
  2. 为免费吃饭 黑客入侵餐馆管理系统改数据
  3. 计算机网络校园网网络设计报告,计算机网络课程设计报告-校园网的组建和应用...
  4. 超像素分割图神经网络资料汇总
  5. 激光雷达障碍物检测:点云聚类算法
  6. 初用vscode遇到中文乱码问题
  7. vscode latex 英文语法拼写检查
  8. [pion]写一个简单的turn服务器
  9. Dempster证据理论python复现
  10. Zigbee 协议栈网络管理