Swing程序设计详解(一)

【今日】

“若你决定灿烂,山无遮,海无拦” 
 

目录

 初识Swing

一   Swing简述 

二  Swing常用窗体 

2.1 JFrame窗体

2.2 JDialog对话框

2.3JOptionPane小型对话框

(1)通知框

(2)确认框

(3)输入框 

(4)自定义对话框

 三   常用布局管理器 

3.1 绝对布局 

3.2 流布局 

3.3 边界布局

3.4 网格布局 

四   常用面板

4.1 JPanel面板

 

4.2 JScrollpane滚动面板



 初识Swing



       Swing用于开发桌面窗体程序,是JDK的第二代GUI框架,其功能比JDK第一代GUI框架AWT更为强大、性能更加优良。但因为Swing技术推出时间太早,其性能、开发效率等不及一些其他流行技术,所以目前市场上大多数桌面窗体程序都不是由Java开发的,Swing技术也逐渐被广大开发人员放弃了。
       不过,Swing是JDK自带的功能,并且能非常好地体现Java语言在面向对象、接口事件等方面的设计模式,又能提供直观地呈现运行效果。
       Swing中的大多数组件均为轻量级组件,使用Swing开发出的窗体风格会与当前平台(如Windows、Linux等)的窗体风格保持一致。



一   Swing简述 

       Swing主要用来开发GUI(Graphical User Interface)程序,GUI是应用程序提供给用户操作的图形界面,包括窗口、菜单、按钮等图形界面元素,我们经常使用的QQ软件、360安全卫士等均为GUI程序。Java语言为Swing程序的开发提供了丰富的类库,这些类分别被存储在java.awt和javax.swing包中。Swing提供了丰富的组件,在开发Swing程序时,这些组件被广泛地应用。

       Swing组件是完全由Java语言编写的组件。因为Java语言不依赖于本地平台(即“操作系统”),所以Swing组件可以被应用于任何平台。基于“跨平台”这一特性,Swing组件被称作“轻量级组件”;反之,依赖于本地平台的组件被称作“重量级组件”,在Swing包的层次结构和继承关系中,比较重要的类是Component类(组件类)、Container类(容器类)和JComponent类(Swing组件父类)。Swing包的层次结构和继承关系如图所示。

常用的Swing组件



二  Swing常用窗体 

2.1 JFrame窗体

       开发Swing程序的流程可以被简单地概括为首先通过继承javax.swing.JFrame类创建一个窗体,然后向这个窗体中添加组件,最后为添加的组件设置监听事件。

JFrame类的常用构造方法包括以下两种形式:
public JFrame():创建一个初始不可见、没有标题的窗体
public JFrame(String title):创建一个不可见、具有标题的窗体

比如:创建一个不可见有标题的窗体;

JFrame f = new JFrame("窗体标题");//创建窗体对象
Container c = f.getContentPane();//获取窗体容器

在创建窗体后,先调用getContentPane()方法将窗体转换为容器,再调用add(方法或者remove()方法向容器中添加组件或者删除容器中的组件。向容器中添加按钮,关键代码如下:

JLabel l= new JLabel("这是一个窗体");//创建了一个标签
c.add(l);//添加组件
c.remove(l);//删除组件

创建窗体后,要对窗体进行设置,如设置窗体的位置、大小、是否可见等。JFrame类提供的相应方法可实现上述设置操作,具体如下:

setBounds(int x, int y, int width, int leight):设置窗体左上角在屏幕中的坐标为(x,y),窗体的宽
度为width,窗体的高度为height。
setLocation(int x,int y):设置窗体左上角在屏幕中的坐标为(x,y)。
setSize(int width, int height):设置窗体的宽度为width,高度为height。
setVisibale(boolean b):设置窗体是否可见。b为true时,表示可见;b为false时,表示不可见。

JFrame窗体关闭的几种方式

下面我们用代码来实现一个窗体程序:

【代码实列】

import java.awt.Color;
import java.awt.Container;import javax.swing.JFrame;
import javax.swing.JLabel;public class Demo {public static void main(String[] args) {JFrame f = new JFrame("窗体标题");//创建窗体对象f.setVisible(true);//设置窗体可见/**     窗体关闭规则* EXIT_ON_CLOSE:隐藏窗体,并停止程序* DO_NOTHING_ON_CLOSE:无任何操作* HIDE ON_ CLOSE:隐藏窗体,但不停止程序* DISPOSE_ ON_CLOSE:释放窗体资源*/f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setSize(300, 200);//设置窗体的大小,单位:像素f.setLocation(400, 300);//设置窗体的位置,单位:像素/** f.setBounds(x, y, 长, 高);//可以用一句代替上面的两句*/Container c = f.getContentPane();//获取窗体容器c.setBackground(Color.WHITE);//设置背景颜色JLabel l= new  JLabel("这是一个窗体");//创建了一个标签c.add(l);//添加组件
//		c.remove(l);//删除组件c.validate();//验证容器中的组件(相当于刷新操作)
//		f.setContentPane(c);重新载入容器(相当于刷新操作)f.setResizable(false);//设置窗体是否可以改变大小System.out.println("窗体的位置:x="+f.getX()+"  y="+f.getY());}
}

【运行结果】 

但在实际中我们一般会直接继承JFrame,不在单独创建对象,初学者可以先了解一下:

import java.awt.Color;
import java.awt.Container;import javax.swing.JFrame;
import javax.swing.JLabel;public class Demo extends JFrame{//让Demo类也成为一个窗体public Demo(){setVisible(true);//设置窗体可见setTitle("窗口标题");/**     窗体关闭规则* EXIT_ON_CLOSE:隐藏窗体,并停止程序* DO_NOTHING_ON_CLOSE:无任何操作* HIDE ON_ CLOSE:隐藏窗体,但不停止程序* DISPOSE_ ON_CLOSE:释放窗体资源*/setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setSize(300, 200);//设置窗体的大小,单位:像素setLocation(400, 300);//设置窗体的位置,单位:像素/** f.setBounds(x, y, 长, 高);//可以用一句代替上面的两句*/Container c = getContentPane();//获取窗体容器c.setBackground(Color.WHITE);//设置背景颜色JLabel l= new  JLabel("这是一个窗体");//创建了一个标签c.add(l);//添加组件
//		c.remove(l);//删除组件c.validate();//验证容器中的组件(相当于刷新操作)
//		setContentPane(c);重新载入容器(相当于刷新操作)setResizable(false);//设置窗体是否可以改变大小System.out.println("窗体的位置:x="+getX()+"  y="+getY());}public static void main(String[] args) {new Demo();}}

2.2 JDialog对话框

       Dialog对话框继承了java.awt.Dialog类,其功能是从一个窗体 中弹出另一个窗体,如使用IE浏览器时弹出的确定对话框。JDialog对话框与JFrame窗体类似,被使用时也需要先调用getContentPane()方法把JDialog对话框转换为容器,再对JDialog对话框进行设置。

public JDialog():创建一个没有标题和父窗体的对话框。
public JDialog(Frame f):创建一个没有标题,但指定父窗体的对话框。
public JDialog(Frame f, boolean model):创建一个没有标题,但指定父窗体和模式的对话框。如果model为true,那么弹出对话框后,用户无法操作父窗体。
public JDialog(Frame f, String title):创建一个指定标题和父窗体的对话框。
public JDialog(Frame f, String title, boolean model):创建一个指定标题、父窗体和模式的对话框。

【代码实列】

import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import javax.swing.*;public class Demo extends JDialog{public Demo(JFrame frame) {/** 第一个参数是父窗体对象* 第二个参数是对话框标题* 第三个参数是是否阻塞父窗体* true为阻塞,false为不阻塞*/super(frame, "对话框标题", true);//第一个传入frame对象(父窗体)Container c = getContentPane();//获取窗体容器c.add(new JLabel("这是一个窗体对话框"));setBounds(100, 100, 100, 100);}public static void main(String[] args) {JFrame f =new JFrame("父窗体");f.setBounds(50, 50, 300, 300);Container c = f.getContentPane();JButton btn = new JButton("弹出对话框");//设置一个按钮c.setLayout(new FlowLayout());//设置布局,使用流布局c.add(btn);f.setVisible(true);f.setDefaultCloseOperation(EXIT_ON_CLOSE);btn.addActionListener(new ActionListener() {//创建了一个匿名对象@Overridepublic void actionPerformed(ActionEvent e) {// 这个方法就是点击按钮以后会运行的方法Demo d =new Demo(f);d.setVisible(true);//设置窗体可见}});//添加动作监听}}

【运行效果】



2.3JOptionPane小型对话框

     Java API中的javax.swing.JOptionPane类是一个非常简便的小型对话框类,该类用于创建对话框的方法都是静态方法,无须创建对象即可弹出。在日常开发中经常使用该类弹出提示、确认用户需求、调试程序等。JOptionPane提供了4种创建对话框的方法 ,如表所示:


(1)通知框

       通知框是最简单的一个对话框,仅弹出提示,不会返回任何值。

1.样式:

2.创建通知框的代码块:

showMessageDialog(Component parentComponent,//在那个窗口弹出object message,             //通知什么内容String title,               //标题int message Type)           //通知框的风格

3.通知框的风格:

【代码实列】

import javax.swing.JOptionPane;public class Demo {public static void main(String[] args) {JOptionPane.showMessageDialog(null, "您与服务器断开连接","发生错误",JOptionPane.WARNING_MESSAGE);}
}

【运行效果】

WARNING_MESSAGE:

WARNING_MESSAGE:


(2)确认框

       确认框已经封装好了一套外观样式,弹出后要求用户做选择操作,用户选择具体选项后,确认框可以返回用户的选择结果,结果以int方式返回。

1.样式:

2.创建确认框的代码块:

showConfirmDialog(Component parentComponent,//在那个窗口弹出object message,             //通知什么内容String title,               //标题int message Type)           //通知框的风格

3.通知框的风格:

YES_NO_CANCEL_OPTION:3键

YES_NO_OPTION:2键

【代码实列】

import javax.swing.JOptionPane;public class Demo {public static void main(String[] args) {JOptionPane.showConfirmDialog(null,"确定离开吗?","提示",JOptionPane.YES_NO_CANCEL_OPTION);}
}

【运行效果】

YES_NO_CANCEL_OPTION:

YES_NO_OPTION:

因为该确认窗可以返回结果,所以我们可以通过结果判断用户的选择:

是:0  否:1  X:-1   取消:2


(3)输入框 

输入框已经封装好了一套外观样式,弹出后要求用户在文本框中输入文本,用户完成输入操作后,
输入框可以返回用户输入的结果.

1.样式:

2.创建输入框的代码块:

showInputDialog(Component parentComponent,   //在那个窗口弹出Object message,                          //通知什么内容String title,                            //标题int messageType)                         //输入框的风格

【代码实列】

import javax.swing.JOptionPane;public class Demo {public static void main(String[] args) {String name =JOptionPane.showInputDialog(null,"请输入你的姓名");System.out.println(name);}
}

【运行效果】


(4)自定义对话框

自定义对话框模板:

showOptionDialog(Component parentComponent,//在哪个窗体弹出Object message,                    //通知什么内容?String title,                      //标题int optionType,                    //选项类型,可定义按钮风格int messageType,                   //消息类型,可定义外观风格Icon icon,                         //图标Object[] options,                  //有哪些组件Object initialValue)               //默认选中的组件

在下面自定义中我们会用到这个图标:

【代码实列】

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JOptionPane;public class Demo {public static void main(String[] args) {Icon icon = new ImageIcon("src/注意.png");//获得图标JButton b1 = new JButton("是的");//创建组件按钮b1JButton b2 = new JButton("再想想");//创建组件按钮b2Object os[] = {b1,b2};JOptionPane.showOptionDialog(null,"你准备好了吗?", "注意了",JOptionPane.DEFAULT_OPTION,JOptionPane.DEFAULT_OPTION,icon,os, null);}
}

【运行效果】



 三   常用布局管理器 

      开发Swing程序时,在容器中使用布局管理器能够设置窗体的布局,进而控制Swing组件的位置大小。Swing 常用的布局管理器为绝对布局管理器、流布局管理器、边界布局管理器和网格布局管器。


3.1 绝对布局 

绝对布局也叫null布局,其特点是硬性指定组件在容器中的位置和大小,组件的位直通过绝对坐 标的方式来指定。使用绝对布局首先要使用Container.setLayout(null)方法取消容器的布局管理器,然后再使用Component.setBounds(int x,int y,int width, int height)方法设置每个组件在容器中的位置和大小。

【实列代码】

import java.awt.Container;import javax.swing.*;public class Demo extends JFrame{public Demo() {setTitle("标题");//设置标题setBounds(100, 300,800, 400);//设置位置以及大小setVisible(true);//设置窗体是否可见setDefaultCloseOperation(EXIT_ON_CLOSE);//设置关闭方式Container c = getContentPane();//设置容器c.setLayout(null);//设置为null布局JButton b1  = new JButton("按钮1");//设置按钮JButton b2  = new JButton("按钮2");b1.setBounds(10, 20, 100, 50);b2.setBounds(400, 20, 100, 50);c.add(b1);c.add(b2);}public static void main(String[] args) {Demo d = new Demo();}
}

 【运行结果】

 注意:

绝对布局不具备弹性,页面元素的位置和尺寸无法基于内容或用户需求进行自适应调整。这可能导致在内容不同或窗口大小变化时产生剪切、溢出或显示问题。绝对布局里面的按钮位置不会因为窗体的大小改变位置而发生改变,如图所示:


3.2 流布局 

流布局(FlowLayout)管理器是Swing中最基本的布局管理器。使用流布局管理器摆放组件时,组件被从左到右摆放。当组件占据了当前行的所有空间时,溢出的组件会被移动到当前行的下一行。默认情况下,行组件的排列方式被指定为居中对齐,但是通过设置可以更改每一行组件的排列方式。

FlowLayout的三种构造方法:
FloyLayout();           // 默认构造方法

FloyLayout(int alignment);  //

FloyLayout(int alignment int horizGap,int vertGap);

//对齐方式   水平间距   垂直间距

对齐方式:
FlowLayout.LEFT        //左对齐

FlowLayout.RIGHT     //右对齐

FlowLayout.CENTER //居中对齐

【代码实列】 

import java.awt.Container;
import java.awt.FlowLayout;import javax.swing.*;public class Demo extends JFrame{public Demo() {setTitle("标题");//设置标题setBounds(100,100,300,200);//设置位置以及大小setDefaultCloseOperation(EXIT_ON_CLOSE);//设置关闭方式Container c = getContentPane();//设置容器c.setLayout(new FlowLayout());//设置为流布局for(int i=0;i<=9;i++) {c.add(new JButton("按钮"+i));}setVisible(true);//设置窗体是否可见}public static void main(String[] args) {Demo d = new Demo();}
}

 【运行结果】

当窗口调节时:按钮位置也会随之变化: 

但时如果窗体大小太小,它没有最合理的分配方法,此时会丢失部分按钮:


3.3 边界布局

使用 Swing创建窗体后,容器默认的布局管理器是边界布局(BorderLayout)管理器,边界布局管理器把容器划分为东、南、西、北、中5个区域,如图所示。


当组件被添加到被设置为边界布局管理器的容器时,需要使用BorderLayout类中的成员变量指定被添加的组件在边界布局管理器中的区域,BorderLayout类中的成员变量及其说明如下表:

【代码实列】

import java.awt.BorderLayout;
import java.awt.Container;import javax.swing.*;public class Demo extends JFrame{public Demo() {setTitle("边界布局");//设置标题setBounds(100,100,300,200);//设置位置以及大小setDefaultCloseOperation(EXIT_ON_CLOSE);//设置关闭方式Container c = getContentPane();//设置容器c.setLayout(new BorderLayout());//设置为边界布局JButton b1 = new JButton("中");JButton b2 = new JButton("东");JButton b3 = new JButton("西");JButton b4 = new JButton("南");JButton b5 = new JButton("北");c.add(b1, BorderLayout.CENTER);c.add(b2, BorderLayout.EAST);c.add(b3, BorderLayout.WEST);c.add(b4, BorderLayout.SOUTH);c.add(b5, BorderLayout.NORTH);setVisible(true);//设置窗体是否可见}public static void main(String[] args) {Demo d = new Demo();}
}

 【运行结果】

注意:

在同一个区域反复添加元素时,新元素会覆盖旧元素。当窗体长足够小是,只有南北按钮。 


3.4 网格布局 

网格布局(GridLayout)管理器能够把容器划分为网格,组件可以按行、列进行排列。在网格布局管理器中,网格的个数由行数和列数决定,且每个网格的大小都相同。例如,一个两行两列的网格布局管理器能够产生4个大小相等的网格。组件从网格的左上角开始,按照从左到右、从上到下的顺序被添加到网格中,且每个组件都会填满整个网格。改变窗体大小时,组件的大小也会随之改变。

两种构造方法:

【代码实列】


import java.awt.Container;
import java.awt.GridLayout;
import javax.swing.*;public class Demo extends JFrame{public Demo() {setTitle("网格布局");//设置标题setBounds(100,100,300,300);//设置位置以及大小setDefaultCloseOperation(EXIT_ON_CLOSE);//设置关闭方式Container c = getContentPane();//设置容器c.setLayout(new GridLayout(4,5));//for(int i=0;i<20;i++) {c.add(new JButton("按钮"+i));}setVisible(true);//设置窗体是否可见}public static void main(String[] args) {Demo d = new Demo();}
}

 【运行结果】

四   常用面板

 在Swing程序设计中,面板是一个容器,背用于容纳其他组件,但面板必须被添加到其他容器中。


4.1 JPanel面板

Jpanel面板继承java.awt.Container类。JPanel面板必须在窗体容器中使用,无法脱离窗体显示。

初始化一个面板的方法:

Jpanel p = new JPanel(new 布局方法);

使用JPanel可以将其他Swing组件添加到其中。使用JPanel的setLayout()方法可以设置布局管理器来控制组件在面板中的放置方式。

【代码实列】

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.GridLayout;import javax.swing.*;public class Demo extends JFrame{public Demo() {setTitle("面板");//设置标题setBounds(100,100,500,300);//设置位置以及大小setDefaultCloseOperation(EXIT_ON_CLOSE);//设置关闭方式Container c = getContentPane();//获得一个容器c.setLayout(new GridLayout(2,2,10,10));//设置布局JPanel p1 = new JPanel();//设置布局p1.setLayout(new GridLayout(1,3,10,10));//面板设置为网格布局JPanel p2= new JPanel(new BorderLayout());//面板设置为边界布局JPanel p3 = new JPanel(new GridLayout(1,2,10,10));JPanel p4 = new JPanel(new GridLayout(2,1,10,10));/** 给每个面板添加边框和标题,使用BorderFactory工厂类生成带标题的* 边框对象*/p1.setBorder(BorderFactory.createTitledBorder("面板一"));//添加标题边框p2.setBorder(BorderFactory.createTitledBorder("面板二"));p3.setBorder(BorderFactory.createTitledBorder("面板三"));p4.setBorder(BorderFactory.createTitledBorder("面板四"));/** 添加按钮*/p1.add(new JButton("P1"));p1.add(new JButton("P1"));p1.add(new JButton("P1"));p1.add(new JButton("P1"));p2.add(new JButton("P2"), BorderLayout.CENTER);p2.add(new JButton("P2"), BorderLayout.EAST);p2.add(new JButton("P2"), BorderLayout.WEST);p2.add(new JButton("P2"), BorderLayout.NORTH);p2.add(new JButton("P2"), BorderLayout.SOUTH);p3.add(new JButton("P3"));p3.add(new JButton("P3"));p4.add(new JButton("p4"));p4.add(new JButton("p4"));/** 将面板添加到容器中*/c.add(p1);c.add(p2);c.add(p3);c.add(p4);setVisible(true);//设置窗体可见}public static void main(String[] args) {Demo d = new Demo();}
}

【运行结果】


4.2 JScrollpane滚动面板

JScrollpane滚动面板是带滚动条的面板,被用于在较小的窗体中显示较大的篇幅的内容。

【代码实列】

import java.awt.Container;import javax.swing.*;public class Demo extends JFrame{public Demo() {setBounds(100,100,500,300);//设置位置以及大小setDefaultCloseOperation(EXIT_ON_CLOSE);//设置窗体关闭的方式Container c = getContentPane();JTextArea Jt = new JTextArea();//创建了一个文本域JScrollPane Js = new JScrollPane(Jt);//创建滚动面板,给文本域添加滚动条c.add(Js);setVisible(true);//设置窗体可见}public static void main(String[] args) {new Demo();}
}

 【运行效果】

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

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

相关文章

计算机组成与设计硬软件接口学习2

并行处理器&#xff1a;从客户端到云 任务级并行或进程级并行&#xff1a;通过同时运行独立的多个程序来使用多处理器 并行处理程序&#xff1a;同时在多个处理器上运行的单个程序 向量和标量 向量指令的重要属性&#xff1a; 单个向量指令指定了大量工作--相当于执行了完…

代码随想录训练营第四十八天|198.打家劫舍 ● 213.打家劫舍II ● 337.打家劫舍III

198.打家劫舍 力扣题目链接(opens new window) 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系…

基于PyTorch使用LSTM实现新闻文本分类任务

本文参考 PyTorch深度学习项目实战100例 https://weibaohang.blog.csdn.net/article/details/127154284?spm1001.2014.3001.5501 文章目录 本文参考任务介绍做数据的导入 环境介绍导入必要的包介绍torchnet和keras做数据的导入给必要的参数命名加载文本数据数据前处理模型训…

Android高级开发-APK极致优化

九道工序 1. SVG(Scalable Vector Graphics)可缩放矢量图 使用矢量图代替位图可以减小 APK 的尺寸&#xff0c;因为可以针对不同屏幕密度调整同一文件的大小&#xff0c;而不会降低图像质量。 矢量图首次加载时可能消耗更多的 CPU 资源。之后&#xff0c;二者的内存使用率和…

Java集合之LinedList

LinedList类实现了List接口&#xff0c;他提供了&#xff08;双向的&#xff09;链表数据结构 在该链表中的每一个元素除了存储本身的内容之外还存储指向前一个元素的指针和指向后一个元素的指针&#xff0c;下图展示了一个包含三个元素的双向链表&#xff0c;每个链表都有一个…

jeesite实现excel导入功能(保姆级图文教程)

文章目录 前言一、准备工作1.准备一个excel模板,放入static目录2.application.yml文件中设置文件存储路径3.使用easyexcel插件解析excel数据,pom文件导入easyexcel二、使用步骤1.列表页添加下载模板按钮2.表单页添加文件上传3. 创建excel解析对应实体4.后台完成文件上传代码,…

深入探索智能问答:从检索到生成的技术之旅

目录 一、智能问答概述1. **语义理解**2. **知识库和数据库**3. **上下文感知**4. **动态学习和自适应** 二、发展历程1. **基于规则的系统**2. **统计方法的兴起**3. **深度学习和神经网络的突破**4. **预训练模型** 三、智能问答系统的主要类型四、基于知识库的问答系统五、基…

机器视觉之Basler工业相机使用和配置方法(C++)

basler工业相机做双目视觉用&#xff0c;出现很多问题记录一下&#xff1a; 首先是多看手册&#xff1a;https://zh.docs.baslerweb.com/software 手册内有所有的源码和参考示例&#xff0c;实际上在使用过程中&#xff0c;大部分都是这些源码&#xff0c;具体项目选择对应的…

【微信小程序】项目初始化

| var() CSS 函数可以插入一个自定义属性&#xff08;有时也被称为“CSS 变量”&#xff09;的值&#xff0c;用来代替非自定义 属性中值的任何部分。 1.初始化样式与颜色 view,text{box-sizing: border-box; } page{--themColor:#ad905c;--globalColor:#18191b;--focusColor…

【测试开发】答疑篇 · 什么是软件测试

【测试开发】答疑篇 文章目录 【测试开发】答疑篇1. 生活中的测试2. 什么是软件测试3. 为什么要有测试/没有测试行不行4. 软件测试和软件开发的区别5. 软件测试和软件调试之间的区别6. 软件测试的岗位7. 优秀测试人员具备的素质 【测试开发】答疑篇 软件不一定是桌面应用&#…

JSON和全局异常处理

目录 1️⃣JSON 一、什么是json&#xff1f; 二、与javascript的关系 三、语法格式 四、注意事项 五、总结 六&#xff0c;使用json 1导入pom.xml依赖 2.配置spring-mvc.xml 3. ResponseBody注解使用 创建一个web层控制器 编写ClazzBiz 实现接口 测试&#xff1a; …

树莓派4b装系统到运行 Blazor Linux 本地程序全记录

在Linux下运行gui程序,咱也是第一次做,属于是瞎子过河乱摸一通,写得有什么不对和可以优化的地方,希望各位看官斧正斧正. ##1. 下载烧录器 https://www.raspberrypi.com/software/####我选择的是Raspbian 64位系统,并配置好ssh账号密码,wifi,以便启动后可以直接黑屏ssh连接 ##…

成都收录《乡村振兴战略下传统村落文化旅游设计》许少辉八一著作

成都收录《乡村振兴战略下传统村落文化旅游设计》许少辉八一著作已收录至成都

4基于pytorch的蚁群算法求解TSP(旅行商问题),访问一座城市并回到最初位置的最佳路径,解决组合中的NP问题。程序已调通,替换自己的数据可以直接运行。

基于pytorch的蚁群算法求解TSP(旅行商问题)&#xff0c;访问一座城市并回到最初位置的最佳路径&#xff0c;解决组合中的NP问题。程序已调通&#xff0c;替换自己的数据可以直接运行。 4pytorchTSP路径优化 (xiaohongs4pytorchTSP路径优化 (xiaohongshu.com)4pytorchTSP路径优化…

Vim的基础操作

前言 本文将向您介绍关于vim的基础操作 基础操作 在讲配置之前&#xff0c;我们可以新建一个文件 .vimrc&#xff0c;并用vim打开在里面输入set nu 先给界面加上行数&#xff0c;然后shift &#xff1b;输入wq退出 默认打开&#xff1a;命令模式 在命令模式中&#xff1a…

TCP详解之三次握手和四次挥手

TCP详解之三次握手和四次挥手 1. TCP基本认识 1.1 什么是 TCP TCP是面向连接的、可靠的、基于字节流的传输层通信协议。 1.2 TCP协议段格式 我们先来看看TCP首部协议的格式 我们先来介绍一些与本文关联比较大的字段&#xff0c;其他字段不做详细阐述。 序列号&#xff1a…

基于SSM框架的《超市订单管理系统》Web项目开发(第二天)完成登录模块和用户退出模块

《超市订单管理系统》&#xff08;第二天&#xff09; 基于SSM框架的Web项目开发 ​ 昨天我们实现了登录功能&#xff0c;但是用的是模拟数据。今天我们要链接数据库整合SpirngMybatis&#xff0c;读取数据库中的真实数据&#xff0c;用来跟我们输入的userCode和userPassword进…

制作立体图像实用软件:3DMasterKit 10.7 Crack

3DMasterKit 软件专为创建具有逼真 3D 和运动效果的光栅图片而设计&#xff1a;翻转、动画、变形和缩放。 打印机、广告工作室、摄影工作室和摄影师将发现 3DMasterKit 是一种有用且经济高效的解决方案&#xff0c;可将其业务扩展到新的维度&#xff0c;提高生成的 3D 图像和光…

Git - Git Merge VS Git Rebase

文章目录 概述Flow View小结 概述 Git merge和Git rebase是两种不同的版本控制工作流程&#xff0c;它们用于将一个分支的更改合并到另一个分支。它们有不同的工作原理和应用场景&#xff0c;下面是它们的主要区别&#xff1a; 合并的方式&#xff1a; Git Merge&#xff1a;合…

用c++实现五子棋小游戏

五子棋是一款经典小游戏&#xff0c;今天我们就用c实现简单的五子棋小游戏 目录 用到的算法&#xff1a; 思路分析 定义变量 开始写代码 完整代码 结果图&#xff1a; 用到的算法&#xff1a; 合法移动的判断&#xff1a;isValidMove 函数通过检查指定位置是否在棋盘范…