【题目】java图形界面(七)---组件综合练习
【时间】2020.05.21 周四

目录

七、组件综合练习

7.1 练习-为空判断.

7.2 练习-数字校验.

7.3 练习-账号密码验证.

7.4 练习-黄鹤.

7.5 练习-复利计算器.

7.6 练习-进度条.

7.7 练习-显示文件夹复制进度条.


这是how2Java网站的【图形界面】--组件综合练习 答案

主要参考评论区,可能存在bug。

链接:(七)组件综合练习

七、组件综合练习

7.1 练习-为空判断.

在JTextField中输入数据,在旁边加一个按钮JButton,当点击按钮的时候,判断JTextFiled中有没有数据,并使用JOptionPane进行提示。

1、JButton事件响应:actionPerformed(ActionEvent e)

2、JTextFiled组件内容获取

3、JOptionPane弹窗组件使用。

JOptionPane.showMessageDialog(jf,"内容");

代码:
package gui;import javax.swing.*;
import java.awt.*;
import java.sql.*;public class TestGUI {public static void main(String[] args){JFrame jf = new JFrame("LOL");jf.setSize(416,300);jf.setLocation(500,300);jf.setLayout(null);JPanel jp = new JPanel();jp.setBounds(8,8,400,300);jp.setLayout(new FlowLayout());JTextField content = new JTextField("");content.setPreferredSize(new Dimension(80,30));JButton jb = new JButton("检测");jb.setSize(50,30);jb.addActionListener(e->{String cont = content.getText();if(cont.isEmpty()){JOptionPane.showMessageDialog(jf,"文本内容为空");}else{JOptionPane.showMessageDialog(jf,"文本内容为:"+cont);}});jp.add(content);jp.add(jb);jf.add(jp);jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);jf.setVisible(true);}}

7.2 练习-数字校验.

在JTextField中输入数据,在旁边加一个按钮JButton,当点击按钮的时候,判断JTextFiled中的数据是否是数字,并使用JOptionPane进行提示

判断是否为数字: https://blog.csdn.net/qq_42133100/article/details/92158507?

public static boolean isNumeric(String str){Pattern pattern = Pattern.compile("[0-9]*");return pattern.matcher(str).matches();
}
              
代码:
package gui;import javax.swing.*;
import java.awt.*;
import java.sql.*;
import java.util.regex.Pattern;public class TestGUI {public static boolean isNumeric(String str){Pattern pattern = Pattern.compile("[0-9]*");return pattern.matcher(str).matches();  }public static void main(String[] args){JFrame jf = new JFrame("LOL");jf.setSize(416,300);jf.setLocation(500,300);jf.setLayout(null);JPanel jp = new JPanel();jp.setBounds(8,8,400,300);jp.setLayout(new FlowLayout());JTextField content = new JTextField("");content.setPreferredSize(new Dimension(80,30));JButton jb = new JButton("检测");jb.setSize(50,30);jb.addActionListener(e->{String cont = content.getText();if(cont.isEmpty()) {JOptionPane.showMessageDialog(jf,"输入框内容为空");}else{if(isNumeric(cont))JOptionPane.showMessageDialog(jf,"输入框内容是数字:"+cont);elseJOptionPane.showMessageDialog(jf,"输入框内容不是数字");}});jp.add(content);jp.add(jb);jf.add(jp);jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);jf.setVisible(true);}}

7.3 练习-账号密码验证.

准备两个JTextFiled,一个用于输入账号,一个用于输入密码。

使用密码框:

JPasswordField pf = new JPasswordField("");

再准备一个JButton,上面的文字是登陆

点击按钮之后,首先进行为空判断,如果都不为空,则把账号和密码,拿到数据库中进行比较(SQL语句判断账号密码是否正确),根据判断结果,使用JOptionPane进行提示。

代码:

package gui;import javax.swing.*;
import java.awt.*;
import java.sql.*;public class TestGUI {private static String url = "jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8";private static String Name = "root";private static String Pwd = "root";public static void main(String[] args){try {Class.forName("com.mysql.jdbc.Driver");}catch (Exception e){e.printStackTrace();}JFrame jf = new JFrame("register");jf.setSize(416,300);jf.setLocation(500,300);jf.setLayout(null);JPanel jp1 = new JPanel();jp1.setBounds(8,8,400,30);jp1.setLayout(new FlowLayout());JLabel name = new JLabel("账号:");JTextField EnterName = new JTextField("");EnterName.setPreferredSize(new Dimension(80,30));JLabel password = new JLabel("密码:");JPasswordField EnterPwd = new JPasswordField("");EnterPwd.setPreferredSize(new Dimension(80,30));jp1.add(name);jp1.add(EnterName);jp1.add(password);jp1.add(EnterPwd);JPanel jp2 = new JPanel();jp2.setBounds(8,46,400,30);jp2.setLayout(new FlowLayout());JButton jb = new JButton("登录");jb.setSize(50,30);jb.addActionListener(e->{if(!EnterName.getText().isEmpty() && !EnterPwd.getText().isEmpty()){try(Connection conn = DriverManager.getConnection(url,Name,Pwd)){String str = "select * from user where name = ? and password = ?";PreparedStatement ps = conn.prepareStatement(str);ps.setString(1,EnterName.getText());ps.setString(2,EnterPwd.getText());ResultSet rs = ps.executeQuery();if(rs.next()){JOptionPane.showMessageDialog(jf,"登录成功");}else{JOptionPane.showMessageDialog(jf,"账户名或者密码错误");}}catch (Exception ee){ee.printStackTrace();}}});jp2.add(jb);jf.add(jp1);jf.add(jp2);jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);jf.setVisible(true);}}

7.4 练习-黄鹤.

把练习-黄鹤改成Swing来完成

用到组件Jlabel、JTextField、JButton

要有为空和数字判断。

代码:

package gui;import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.regex.Pattern;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;public class TestGUI {public static boolean isNumeric(String str){Pattern pattern = Pattern.compile("[0-9]*");return pattern.matcher(str).matches();
}public static void main(String[] args) {JFrame f=new JFrame("LOL");f.setSize(400,500);f.setLocation(500,500);f.setLayout(null);JPanel p1=new JPanel();p1.setBounds(0, 0, 90, 170);p1.setLayout(new FlowLayout(FlowLayout.LEFT,10,18));JPanel p2=new JPanel();p2.setBounds(80, 0, 110, 170);p2.setLayout(new FlowLayout(FlowLayout.LEFT,20,15));JPanel p3=new JPanel();p3.setBounds(190, 0, 80, 170);p3.setLayout(new FlowLayout(FlowLayout.LEFT,10,18));JPanel p4=new JPanel();p4.setBounds(260, 0, 110, 170);p4.setLayout(new FlowLayout(FlowLayout.LEFT,20,15));JLabel l1=new JLabel("地名:");JLabel l2=new JLabel("公司类型:");JLabel l3=new JLabel("公司名称:");JLabel l4=new JLabel("老板名称:");JLabel l5=new JLabel("金额:");JLabel l6=new JLabel("产品:");JLabel l7=new JLabel("价格计量单位:");JTextField tf1=new JTextField();tf1.setPreferredSize(new Dimension(90,22));JTextField tf2=new JTextField();tf2.setPreferredSize(new Dimension(90,22));JTextField tf3=new JTextField();tf3.setPreferredSize(new Dimension(90,22));JTextField tf4=new JTextField();tf4.setPreferredSize(new Dimension(90,22));JTextField tf5=new JTextField();tf5.setPreferredSize(new Dimension(90,22));JTextField tf6=new JTextField();tf6.setPreferredSize(new Dimension(90,22));JTextField tf7=new JTextField();tf7.setPreferredSize(new Dimension(90,22));p1.add(l1);p1.add(l3);p1.add(l5);p1.add(l7);p2.add(tf1);p2.add(tf3);p2.add(tf5);p2.add(tf7);p3.add(l2);p3.add(l4);p3.add(l6);p4.add(tf2);p4.add(tf4);p4.add(tf6);f.add(p1);f.add(p2);f.add(p3);f.add(p4);JButton b=new JButton("生成");b.setBounds(160,170,80,30);JTextArea ta=new JTextArea();ta.setBounds(10, 220, 365, 230);ta.setLineWrap(true);b.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {if (!tf1.getText().isEmpty()&&!tf2.getText().isEmpty()&&!tf3.getText().isEmpty()&&!tf4.getText().isEmpty()&&!tf5.getText().isEmpty()&&!tf6.getText().isEmpty()&&!tf7.getText().isEmpty()){if (isNumeric(tf5.getText())){String str=tf1.getText()+"最大"+tf2.getText()+tf3.getText()+"倒闭了,"+ "王八蛋老板"+tf4.getText()+"吃喝嫖赌,欠下了"+tf5.getText()+","+ "带着他的小姨子跑了!我们没有办法,拿着"+tf6.getText()+"抵工资!"+ "原价都是一"+tf7.getText()+"多、两"+tf7.getText()+"多、三"+tf7.getText()+"多的"+tf6.getText()+","+ "现在全部只卖二十块,统统只要二十块!"+tf4.getText()+"王八蛋,"+ "你不是人!我们辛辛苦苦给你干了大半年,你不发工资,你还我血汗钱,还我血汗钱!";ta.setText(str);}elseJOptionPane.showMessageDialog(f, "金额不是数字!");}elseJOptionPane.showMessageDialog(f, "有内容为空!");}});f.add(b);f.add(ta);f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setVisible(true);}}

7.5 练习-复利计算器.

参考练习-百万富翁,把 网页版的复利计算器 改成swing来做。

代码:

package gui;import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;public class TestGUI {public static void main(String[] args) {JFrame f=new JFrame("LOL");f.setSize(420,400);f.setLayout(null);f.setLocation(450,500);JPanel p1=new  JPanel();p1.setBounds(0,0,100,120);p1.setLayout(new FlowLayout(FlowLayout.LEFT,10,11));JPanel p2=new  JPanel();p2.setBounds(135,0,130,120);p2.setLayout(new FlowLayout(FlowLayout.LEFT,10,9));JPanel p3=new  JPanel();p3.setBounds(270,0,25,120);p3.setLayout(new FlowLayout(FlowLayout.LEFT,10,11));JPanel p4=new JPanel();p4.setBounds(0,140,400,35);p4.setLayout(new FlowLayout());JPanel p5=new  JPanel();p5.setBounds(0,195,70,120);p5.setLayout(new FlowLayout(FlowLayout.LEFT,10,11));JPanel p6=new  JPanel();p6.setBounds(135,195,130,120);p6.setLayout(new FlowLayout(FlowLayout.LEFT,10,9));JPanel p7=new  JPanel();p7.setBounds(270,195,25,120);p7.setLayout(new FlowLayout(FlowLayout.LEFT,10,11));JLabel l1=new JLabel("起始资金");JLabel l2=new JLabel("每年收益");JLabel l3=new JLabel("复利年数");JLabel l4=new JLabel("每年追加资金");JLabel l5=new JLabel("¥");JLabel l6=new JLabel("%");JLabel l7=new JLabel("年");JLabel l8=new JLabel("¥");JLabel l9=new JLabel("本金和");JLabel l10=new JLabel("利息和");JLabel l11=new JLabel("本息和");JLabel l12=new JLabel("¥");JLabel l13=new JLabel("¥");JLabel l14=new JLabel("¥");JTextField tf1=new JTextField();tf1.setPreferredSize(new Dimension(120,20));JTextField tf2=new JTextField();tf2.setPreferredSize(new Dimension(120,20));JTextField tf3=new JTextField();tf3.setPreferredSize(new Dimension(120,20));JTextField tf4=new JTextField();tf4.setPreferredSize(new Dimension(120,20));JTextField tf5=new JTextField();tf5.setPreferredSize(new Dimension(120,20));JTextField tf6=new JTextField();tf6.setPreferredSize(new Dimension(120,20));JTextField tf7=new JTextField();tf7.setPreferredSize(new Dimension(120,20));JButton b=new JButton("计算");b.setPreferredSize(new Dimension(80,30));b.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {int initMoney,year,each;float rate;initMoney=Integer.valueOf(tf1.getText());//获取起始资金rate=(Integer.valueOf(tf2.getText()));//获取每年收益year=Integer.valueOf(tf3.getText());//获取复利年数each=Integer.valueOf(tf4.getText());//每年追加资金int F1=(year-1)*each+initMoney;//本金和int F3=(int) (each* fuli(  (1+rate/100),(year-1)) + initMoney*p( (1+rate/100) ,year));//本息和int F2=F3-F1;//利息和tf5.setText(clauses(F1));tf6.setText(clauses(F2));tf7.setText(clauses(F3));}});p1.add(l1);p1.add(l2);p1.add(l3);p1.add(l4);p2.add(tf1);p2.add(tf2);p2.add(tf3);p2.add(tf4);p3.add(l5);p3.add(l6);p3.add(l7);p3.add(l8);p4.add(b);p5.add(l9);p5.add(l10);p5.add(l11);p6.add(tf5);p6.add(tf6);p6.add(tf7);p7.add(l12);p7.add(l13);p7.add(l14);f.add(p1);f.add(p2);f.add(p3);f.add(p4);f.add(p5);f.add(p6);f.add(p7);f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setVisible(true);}public static float p(float base,int power) {if(1==power)return base;if(0==power)return 1;float result = base;for(int i=0;i<power-1;i++) {result = result*base;}return result;}public static float fuli(float rate,int year) {float result = 0;for(int i=year;i>0;i--) {result +=p(rate,i);}return result;}protected static String clauses(int f1) {return String.format("%,d", f1);}
}

7.6 练习-进度条.

设计一个线程,每隔100毫秒,就把进度条的进度+1。

从0%一直加到100%

刚开始加的比较快,以每隔100毫秒的速度增加,随着进度的增加,越加越慢,让处女座的使用者,干着急

变得多慢,根据你们和处女座同学,朋友的相处体验,自己把控。

1、进度条组件

JProgressBar pb=new JProgressBar();

pb.setValue(i);

代码:

package gui;import java.awt.FlowLayout;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JProgressBar;public class TestGUI {public static void main(String[] args) {JFrame f=new JFrame("LOL");f.setSize(400,300);f.setLocation(500,500);f.setLayout(new FlowLayout(FlowLayout.CENTER,100,20));JProgressBar pb=new JProgressBar();pb.setMaximum(100);Thread t=new Thread() {public void run() {try {for (int i = 0; i <=100; i++) {if(i<40) {pb.setValue(i);Thread.sleep(10);}if(i<60&&i>40) {pb.setValue(i);Thread.sleep(100);}if(i<80&&i>60) {pb.setValue(i);Thread.sleep(200);}if(i<100&&i>80) {pb.setValue(i);Thread.sleep(400);}if(i==100) {pb.setValue(0);i = 0;JOptionPane.showMessageDialog(f, "下载失败!点击重试!");}}} catch (InterruptedException e) {e.printStackTrace();}}};JButton b=new JButton("开始下载");b.addActionListener(e-> t.start());pb.setStringPainted(true);f.add(pb);f.add(b);f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setVisible(true);}}

7.7 练习-显示文件夹复制进度条.

改进练习-复制文件夹提供进度条,把文件复制的进度显示出来。

package gui;import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JTextField;public class TestGUI {static long allFileSize = 0; // 所有需要复制的文件大小static long currentFileSizeCopied = 0;// 已复制的文件总大小public static void main(String[] args) {JFrame f=new  JFrame("复制文件");f.setSize(400,200);f.setLocation(500,500);f.setLayout(null);JPanel p1=new JPanel();p1.setBounds(0,0,400,40);p1.setLayout(new FlowLayout(FlowLayout.CENTER,10,10));JLabel l1=new JLabel("源文件地址:");JLabel l2=new JLabel("复制到:");JTextField tf1=new JTextField();tf1.setPreferredSize(new Dimension(80,30));tf1.setText("C:\\迅雷下载");JTextField tf2=new JTextField();tf2.setText("C:\\Users\\LH\\Desktop\\迅雷下载");tf2.setPreferredSize(new Dimension(80,30));p1.add(l1);p1.add(tf1);p1.add(l2);p1.add(tf2);JButton b=new JButton("开始复制");JProgressBar pg=new JProgressBar();pg.setMaximum(100);pg.setValue(0);pg.setStringPainted(true);JPanel p2=new JPanel();p2.setBounds(0,40,400,50);p2.setLayout(new FlowLayout(FlowLayout.CENTER,10,10));JLabel l3=new JLabel("文件复制进度:");p2.add(b);p2.add(l3);p2.add(pg);f.add(p1);f.add(p2);f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setVisible(true);calclateAllFilesize(new File(tf1.getText()));b.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {String A=tf1.getText();String B=tf2.getText();new Thread(() -> copyFolder(A,B)).start();b.setEnabled(false);}public void copyFolder(String srcFolder, String destFolder){File sf = new File(srcFolder);File df = new File(destFolder);if (!sf.exists())return;if (!sf.isDirectory())return;if (df.isFile())return;if (!df.exists())df.mkdirs();//            创建文件引用集合File[] f = sf.listFiles();
//            创建文件名称集合String[] name = sf.list();
//            for读出for(int i=0;i<f.length;i++) {
//                如果不是目录则执行if(!f[i].isDirectory()) {
//                    将源文件写入目标文件之中copyFile(f[i].getAbsolutePath(), new File(df+"/"+name[i]).getAbsolutePath());currentFileSizeCopied += f[i].length();double current = (double) currentFileSizeCopied / (double) allFileSize;int progress = (int) (current * 100);pg.setValue(progress);if(progress==100) {JOptionPane.showMessageDialog(p2, "复制完毕");b.setEnabled(true);}}else {
//                    反之则先创建父目录,再在将源文件写入目标文件之中new File(df+"/"+name[i]).mkdirs();copyFolder(f[i].getAbsolutePath(), new File(df+"/"+name[i]).getAbsolutePath());}}}//  文件写入public void copyFile(String srcFolder, String destFolder) {try(BufferedReader br = new BufferedReader(new FileReader(srcFolder));PrintWriter pw = new PrintWriter(new FileWriter(destFolder))) {while(true) {String str = br.readLine();if(str==null)break;pw.println(str);}} catch (IOException e) {e.getStackTrace();}}});}public static void calclateAllFilesize(File file) {if (file.isFile()) {allFileSize += file.length();}if (file.isDirectory()) {File[] fs = file.listFiles();for (File f : fs) {calclateAllFilesize(f);}}}}

java图形界面(七)---组件综合练习相关推荐

  1. Java图形编程实验总结_实验二java图形界面编程2015级.doc

    实验二java图形界面编程2015级.doc 实验二JAVA图形界面编程一.实验目的熟悉JAVA运行环境,编程掌握JAVASWING组件的图形界面编程.二.实验环境微机,软件MYECLIPSE,JDK ...

  2. java界面布局举例,java图形界面实例

    java写一个图形程序,让数组输出在图形界面上 代码怎么写?别那么复杂的. 已把程序文件打包上传了,并附上运算结果图. import javax.swing.*;import java.awt.*;i ...

  3. Java 图形界面基础

    Java图形界面基础 当你开始验证自己的PC的JDK环境是否配置完成的时候有没有想过这个窗体是怎么做出来的呢? 用几句简单的Java语言就可以做出这样的窗体,不信我可以写给给位看. import ja ...

  4. java图形界面多线程_多线程编程、Java I/O系统和Java图形界面编程

    多线程编程: 一个正在运行的程序通常称为一个进程,每一个任务称为一个线程,中能够在一个程序内运行多线程的程序称为多线程程序. 线程与进程的区别:①每个进程都需要操作系统为其分配独立的内存空间: ②而同 ...

  5. Java图形界面知识点总结

    Java图形界面知识点总结 1. java图形中常用的控件 常用窗体:JFrame.JDialog.窗体好比一块空白的画布,你可以任意添加按钮等组件到其中,也可以设置窗体的属性(大小.边界.排布等). ...

  6. java 图形界面设计,使用JPanel、JFrame 绘图,图形界面设计入门演示,各种主要绘图方法以及图片、文字插入

    那什么是JPanel?JFrame 又是什么呢?让我们先来了解一下他们的区别吧: JFrame是最底层,JPanel是置于其面上,同一个界面只有一个JFrame,一个JFrame可以放多个JPanel ...

  7. java图形界面重写坐标_重写自由软件和计算机图形的历史

    java图形界面重写坐标 您还记得上世纪90年代初大多数屏幕保护程序都显示飞扬的3D金属徽标的日子吗? 你有一个吗? 在本文中,我想回顾一下过去,并简要回顾计算机图形学(CG)从研究实验室过渡到每个人 ...

  8. java图形界面UI设计——简单的计算器

    java图形界面UI设计--简单的计算器# 可以实现连续的输入: java图形界面UI设计--简单的计算器下载

  9. Java图形界面编程模拟ATM自助取款系统

    本人学习Java时一直想做一个图形界面的程序,所以利用闲暇时间,做了一个Java图形界面编程模拟ATM自助取款系统,界面简洁漂亮,基本功能ATM功能实现. 程序初始时 考号:123456 密码:123 ...

最新文章

  1. Libgdx学习笔记:分享自己写的异步加载
  2. 位宽512bit显卡_显卡知识:关于显卡位宽的基础知识科普
  3. ibm服务器虚拟化报价,IBM x86 服务器虚拟化服务.pdf
  4. python import 文件路径_python之import子目录文件
  5. 816固件a2可以升a1吗_你好,我是A2的证我在15年出的交通事故为什么不能学B2呢-免费法律咨询...
  6. 简述面向对象中__new__和__init__区别,这道题朝简单!
  7. 图解后缀表达式的计算过程
  8. ajax中加入if,如何添加if语句到Ajax
  9. Invalid attempt to read when no data is present.
  10. 在mdk使用swd最后一步无反应_STM32应用笔记: 使用STM32CubeMonitor实时监测变量
  11. 映射的网络驱动器怎么共享_如何在Windows上通过网络共享CD和DVD驱动器
  12. 大学高数常微分方程思维导图_思维导图_2016考研数学:高数中六种常见题型归纳_沪江英语...
  13. 积累资源,胜于一切项目
  14. oracle 计算母亲节日期,致母亲节:云和数据 一个满满是爱的地方
  15. CTC,RNN-Transducer, LAS
  16. MySQL入门之课后思考题第六章
  17. flash cs3 键盘ASCII编码
  18. for循环次数太多的时间优化_matlab for循环过大程序运行慢解决方案
  19. 王者荣耀服务器维护七月,《王者荣耀》7.28不停服维护更新攻略教程 7月28日更新公告...
  20. Python 编辑器哪个好用

热门文章

  1. MVC 程序在编译时提示 GAC与 Temporary ASP.NET Files目录内引用文件版本不一致
  2. Tiktok如何利用Shopify开展分销模式!
  3. linux桌面应用程序开发工具,极简桌面工具(uTools For Linux)
  4. 国内VCSEL激光器方案厂商(持续更新)
  5. usb3.0速度测试软件,底层测试:USB3.0接口下速度提升10MB/S_移动存储评测-中关村在线...
  6. vue项目--open打开0.0.0.0网址如何修改
  7. 程序猿每日经典英语必读
  8. 境界死神激斗怎么在电脑上玩 境界死神激斗电脑版玩法教程
  9. SAP ABAP SPRO配置查找对应TCODE或配置表
  10. 基础知识之CDN内容分发网络原理解析