第18章Swing程序设计

  Swing程序设计

        Swing用于开发桌面窗体程序用于JDK的第二代GUI框架,其功能比JDK第一代GUI框架AWT更为强大,性能更加优良。但因为Swing技术推出时间太早,七性能,开发效率等不及一些其他的留下技术,所以目前市场大多数桌面窗体都不是由java开发的,Swing技术也书简被广大开发人员放弃了

        不过Swing是JDK自带的功能,并且能非常好的体现出java语言在面对对象,接口时间等方面设计模式,又能提供直观的呈现运行效果,有所以本书还能纳入此内容,本章不能深入的讲解Swing技术,仅会介绍一些常用组件的使用方法

        Swing中大多数数组件均为轻量级组件,使用Swing开发出的窗体风格与当前平台(如WindowsLinux等)的窗体风格保持一致  本章讲解了主要介绍了Swing的基本要素,包括窗体的布局,容器,常用组件,如何创建表格等内容

 18.2常用窗体

创建一个不可的,具有标题的窗体如下:

JFrame jf =new JFrame("登入系统");
Container container = jf.getContenPane();

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

JButton okBtn = new JButton("确定");
container.add(okBth);//添加按钮
container.remove(okBth);//删除容器中的按钮

创建窗体后,要对窗体惊醒设置  设置大小 位置,是否可见等等

setBounds(int x,int y,int width,int leight)
//设置窗体左上角在屏幕中的坐标(x,y),窗体的宽度为widttth,窗体的高度为height。
setLocation(int x,int y);//设置窗体左上角在屏幕中的坐标为(x,y)
setSize(int width,int heigth);设置窗体的宽度为width,高度为height
setVisibale(boolean b);//设置窗体是否可见。b为true时窗体为可见;b为false时窗体为不可见
setDefaultCloseOperation(int operation);
//设置窗体的关闭方式,默认值为DISPOSE_ON_CLOSE  Java语言提供了多种窗体的关闭方式,

 JFrame窗体关闭的几种方式

窗体关闭方式实现功能
DO_NOTHING_ON_CLOSE关闭窗体时,不触发任何操作
DISPOSE_ON_CLOSE关闭窗体时,释放窗体资源,窗体会消失但是程序不会停止
HIDE_ON_CLOSE关闭窗体时,仅隐藏舱体,不释放资源
EXIT_ON_CLOSE关闭窗体时,释放窗体资源并关闭程序

 创建一个JFreamTest类 在JFreamTest类中创建一个内容为“这是JFrame窗体”后把这个白哦前添加到窗体中  代码如下:

import java.awt.Container;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import javax.swing.WindowConstants;

public class jFreamTest {

	public static void main(String[] args) {
		JFrame jf = new JFrame();//创建一个窗口对象
		jf.setTitle("创建一个JFrame 窗体");//设置窗口标题
		Container container = jf.getContentPane();//获取主容器
		JLabel jl = new JLabel("这是一个JFrame 窗体");//一个文本标签
		jl.setHorizontalAlignment(SwingConstants.CENTER);//将标签上的文字居中
		container.add(jl);//将标签添加到著容器中
		jf.setSize(300,150);//设置窗体宽高
		jf.setLocation(320,240);//设置窗体在屏幕中出现的位置
		jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//关闭窗体则停止程序
		jf.setVisible(true);//让窗体展示出来
	}
}

 代码图如下:

 运行结果如下:

18.2.2JDialog对话框

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

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

 例题在弹窗中弹出对话框:


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;


class MyJDialog extends JDialog{//自定义对话框类  继承了JDialog
	public MyJDialog(MyFrame frame) {
		//调用父类构造方法,第一个参数是父窗体,第二个参数是窗体标题  //第三个参数是表示阻塞父窗体
		super(frame,"第一个JDialog窗体",true);
		Container container=getContentPane();//获取主容器
		container.add(new JLabel("这是一个对话框"));//在容器中添加标签
		setBounds(120,120,100,100);//设置对话框在桌面先是的坐标和大小
	}
}
public class MyFrame extends JFrame {//自定义窗体类  继承JFrame
	public MyFrame() {//窗体的构造方法
		Container container=getContentPane();//获得窗体的构造方法
		container.setLayout(null);//容器使用绝对布局
		JButton bl=new JButton("弹出对话框");//创建一个按钮
		bl.setBounds(10,10,100,21);//定义按钮在容器中的坐标和大小
		bl.addActionListener(new ActionListener() {//为按钮添加单击事件
			public void actionPerformed(ActionEvent e) {//单机事件的触发方法
				MyJDialog dialog=new MyJDialog(MyFrame.this);//创建MYJDialo对话框
				dialog.setVisible(true);//使对话框可见
			}
		});
		container.add(bl);//将按钮添加到容器中
		setSize(200,200);//窗体的宽高
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//关闭窗体则停止程序
		setVisible(true);//使窗体可见
		;}
		public static void main(String[] args){
			new MyFrame();
		}
	}

 代码图如下:

 运行结果图:

18.2.3JOptionPane小型对话框

一个非常便捷的小型对话框,该类用于创建对话框的方法都是静态方法,无需创建对象即可弹出,在日常开发中经常使用该类唐初提示确认用户需求  

4种创建对话框的方法

        方法描述
showConfirmDialog()确认框,询问一个确认问题,如yes/no/cancel
showIputDialog()输入框,可以让用户向程序输入某些之
showMessageDialog()通知框,告知用户某事已经发生
showOptionDialog()自定义对话框,集合了上述3种对话框的全部功能

自定义对话框:

public static int showOptionDialog( Component parentComponent
	Oject message;
	String title;
	int optionType;
	int messageType;
	lcon icon; 
	Object[] options;
	Object initialValue)
}

参数如下:

parentComponent:知名对话框在哪个窗体上显示,如果传入就提的窗体对象和,
对话框会在该窗体居中位置先是  如果传入的是null则会在屏幕中间弹出对话框
message:提示信息
title:对话框的标题
optionType:指定可用对话框的选项的整数
messageType:指定消息种类的整数,主要确定来字可插入外观的图标
options:只是用户可能选择的对象组成的数组。如果对象是组件,则可以正确的呈现,非String对象使用toString方法呈现,如果此参数为null,则由外观确定选项
initiaIValueL表示对话框默认的对象只用options时才有意义,可以为null

以下有四种对话框的例题  代码如下:

弹出会话框

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) {
		Object o[]= {new JButton("是的"),new JButton("再想想")};//按钮对象的Object数组
		Icon icon = new ImageIcon("src/注意.png");//获取图标对象
		JOptionPane.showOptionDialog(null,
				"你准备好了吗?",
				"注意了!",
				JOptionPane.DEFAULT_OPTION,
				JOptionPane.DEFAULT_OPTION,
				icon,o,null);
	}

}

代码图以及运行结果图:

 确认框:

import javax.swing.JOptionPane;

public class Demo1 {

	public static void main(String[] args) {
		int answer=JOptionPane.showConfirmDialog
(null, "确定离开吗?","标题",JOptionPane.YES_NO_OPTION);
		//18.4
			}

	}

代码图以及运行结果图:

 输入框:

import javax.swing.JOptionPane;

public class Demo3 {

	public static void main(String[] args) {
		String name=JOptionPane.showInputDialog(null,"请输入您的姓名");

	}

}

代码图以及运行结果图: 

 警告对话框:

import javax.swing.JOptionPane;

public class Demo2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		JOptionPane.showConfirmDialog(null,
				"您与服务器断开了链接",
				"发生错误",
				JOptionPane.ERROR_MESSAGE);
	}
	}

运行结果图以及代码图

 18.3.1null绝对布局

绝对布局也叫做null布局,其特点是影星质地的那个组件在容器中的位置和大小,组件的位置是通过绝对坐标的方式来制定的,使用绝对布局首先要Container.setLayout(null)方法取消容器中的布局管理器,然后再用Componnent,setBounds(int x,int y ,int width ,int height)方法来设置每个组件在容器中的位置和大小,如以下例题所示:

使用绝对布局定位按钮位置和大小:

import java.awt.Container;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.WindowConstants;

public class AbsoulutePosition extends  JFrame{
	public AbsoulutePosition() {
		setTitle("本窗体使用绝对布局");//窗体标签
		setLayout(null);//使用null布局  绝对布局
		setBounds(0,0,300,150);//设置窗体的坐标与宽高
		Container c =getContentPane();//获取主容器
		JButton b1 =new JButton("按钮1");//创建按钮1
		JButton b2 =new JButton("按钮2");//创建按钮2
		b1.setBounds(10,30,80,30);//这是按钮1的位置和大小
		b2.setBounds(60,70,100,20);//设置按钮2 的位置和大小
		c.add(b1);//向容器内添加按钮1
		c.add(b2);//向容器内添加按钮2
		setVisible(true);//使窗体可见
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//关闭窗体则停止程序
		
	}
	public static void main(String[]args) {
		new AbsoulutePosition();
	}
}

代码图以及运行结果图:

 18.3.2FlowLayout流布局管理器-

流布局(FlowLayout)管理器是Swing种最基本的布局管理器。使用流布局管理器拜访组件,组件时被从左到右拜访。当组件占据了当前的所有弓箭是 ,溢出的组件会被移动到当前行的下一行,默认情况下,行组建的排列方式被指定为剧中对其,但是通过设置可以更改没有行组建的排序方式

FlowLayout类具有以下常用的构造方法:

public FlowLayout()
public FlowLayout(int alignment)
public FlowLayout(int alignment,interestinghorizGap,int vertGap)
构造方法种alignment参数表示使用流布局管理器是每一行组建的排列方式,
该参数可以被赋予FlowLayout.LEFT,flowLayout.CENTER或Flow Layout。RIGHT
alignment参数值说明
FlowLayout.LEFT每一行组件的排列方式被指定为左对齐
FlowLayout.CENTER每一行组件的排列方式被指定为剧中对齐
FlowLayout.RIGHT每一行组件的排列方式被指定为右对其

 在public FlowLayout(int alignnment,int horizGap,int vertGap)还存在horizGap和vertGap两个参数,这两个参数分别以像素为单位指定组件与组件之间的水平间隔和垂直间隔

例题如下:

import java.awt.Container;
import java.awt.FlowLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.WindowConstants;

public class FlowLayoutPosition extends JFrame{
	public FlowLayoutPosition() {
		setTitle("本窗体使用流布局管理器");//设置窗体标签
		Container c =getContentPane();
		//窗体使用流布局  组件右对齐,组件之间的水平间隔为10像素,垂直间隔为10像素
		setLayout(new FlowLayout(FlowLayout.RIGHT,10,10));
		for(int i=0;i<10;i++) {//在容器中循环添加10按钮
			c.add(new JButton("button"+i));
		}
		setSize(300,200);//设置窗体大小
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//关闭窗体则停止程序
		setVisible(true);//使窗体可见
	}
	public static void main(String[] args) {
			new FlowLayoutPosition();
	}

}

代码图以及运行结果图如下:

18.3.3BorderLayout边界布局管理器 

使用Swing创建窗体后,容器默认的布局管理器是边界布局(BorderLayout)管理器,边界布局管理把容器规划为东西南北中五个区域使用方法如下

代码如下:

import java.awt.BorderLayout;
import java.awt.Container;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.WindowConstants;

public class BorderLayoutPosition extends JFrame {
	public BorderLayoutPosition() {
	setTitle("这个窗体使用边界布局管理器");//获取主容器
	Container c = getContentPane();//容器使用边界布局
	setLayout(new BorderLayout());
	JButton centerBtn = new JButton("中");
	JButton northBth = new JButton("北");
	JButton southBut = new JButton("南");
	JButton westBtn = new JButton("西");
	JButton eastBth = new JButton("东");
	c.add(centerBtn,BorderLayout.CENTER);//中部添加按钮
	c.add(northBth,BorderLayout.NORTH);//北部添加按钮
	c.add(southBut,BorderLayout.SOUTH);//南部添加按钮
	c.add(westBtn,BorderLayout.WEST);//西部添加按钮
	c.add(eastBth,BorderLayout.EAST);//东部添加按钮
	setSize(350,200);//设置窗体大小
	setVisible(true);//设置可见
	setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);//关闭窗体则定制程序
}
public static void main(String[] args) {
	new BorderLayoutPosition();
}
}

代码图即允许结果如下:

 18.3.4GridLayout网络布局管理器

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

代码如下:

import java.awt.*;
import javax.swing.*;

public class GridLayoutPositon extends JFrame{
	public GridLayoutPositon() {
		Container c=getContentPane();
		setLayout(new GridLayout(7,3,5,5));
		//设置容器使用网格布局管理器,设置7行3列的网格,组件件水平间距为5像素,垂直间距为5像素
		for(int i=0;i<20;i++) {//循环添加按钮
			c.add(new JButton("button"+i));
		}
		setTitle("这是一个使用网格布局管理器的窗体");
		setSize(300,300);//窗体大小
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//关闭窗体则停止程序
		setVisible(true);//设为可见
		
	}
	public static void main(String[] args) {
		new GridLayoutPositon();
	}

}

代码图以及允许结果图如下:

 18.4常用面板

在Swing程序设计中  面板是一个容器,被用于容纳其他组件但是面板必须添加到其他容器中Swing中常用的面板包括了JPanel面板和JScrollPane面板

18.4.1JPanel面板

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

如下例题所示:

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.GridLayout;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.WindowConstants;

public class JPanelTest extends JFrame{
	public JPanelTest() {
		Container c =getContentPane();
		//将整个容器设置为2行2列的网格布局,组件水平间距隔10像素,垂直间距为10px;
		c.setLayout(new GridLayout(2,2,10,10));
		//初始化一个面板,此面板使用1行4列的网格布局组件水平间隔10px  垂直间隔为10px
		JPanel p1 =new JPanel (new GridLayout(1,4,10,10));
		//初始化一个面板  此面板使用边界布局
		JPanel p2 =new JPanel (new BorderLayout());
		//初始化一个面板,此面板使用1行2列的网格布局组件水平间隔10px  垂直间隔为10px
		JPanel p3 =new JPanel (new GridLayout(1,2,10,10));
		//初始化一个面板,此面板使用2行1列的网格布局组件水平间隔10px  垂直间隔为10px
		JPanel p4 =new JPanel (new GridLayout(2,1,10,10));
		//给每个面板都添加边框和标题,使用BorderFactory工厂类生成带标题边框的对象
		p1.setBorder(BorderFactory.createTitledBorder("面板1"));
		p2.setBorder(BorderFactory.createTitledBorder("面板2"));
		p3.setBorder(BorderFactory.createTitledBorder("面板3"));
		p4.setBorder(BorderFactory.createTitledBorder("面板4"));
		//向面板1中添加按钮
		p1.add(new JButton("b1"));
		p2.add(new JButton("b1"));
		p3.add(new JButton("b1"));
		p4.add(new JButton("b1"));
		//向面板2中添加按钮
		p2.add(new JButton("b2"),BorderLayout.WEST);
		p2.add(new JButton("b2"),BorderLayout.EAST);
		p2.add(new JButton("b2"),BorderLayout.NORTH);
		p2.add(new JButton("b2"),BorderLayout.SOUTH);
		p2.add(new JButton("b2"),BorderLayout.CENTER);
		//向面板3中添加按钮
		p3.add(new JButton("b3"));
		p3.add(new JButton("b3"));
		//向面板4中添加按钮
		p4.add(new JButton("b4"));
		p4.add(new JButton("b4"));
		//向容器中添加面板
		c.add(p1);
		c.add(p2);
		c.add(p3);
		c.add(p4);
		setTitle("在这个窗体中使用面板");
		setSize(500,300);
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//关闭窗体则停止程序
	}
	public static void main(String[] args) {
		JPanelTest test = new JPanelTest();
		test.setVisible(true);
	}

}

 代码图以及允许结果图如下:

 18.4.2JScrollPane滚动面板

JScrollPane面板时带动滚动条的面板,是被用于在较小的窗体中先是较大的篇幅内容,需要注意JScrollPane滚动面板不能使用布局管理器,且只能容纳一个组件。如果需要向JScrollPane面板中添加多个组件,那么需要先将多个逐渐添加到JPanel面板,在将JPanel面板添加到滚动面板  实际使用如下:

import java.awt.Container;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.WindowConstants;

public class JScrollPaneTest  extends JFrame {
	public JScrollPaneTest(){
		Container c =getContentPane();//获取主容器
			//创建一个文本域组件  文本域默认大小为20行50列
		JTextArea ta = new JTextArea(20,50);
		//创建一个JScrollPane滚动面板,并将文本域放到滚动面板中
		JScrollPane sp = new JScrollPane(ta);
		c.add(sp);//将该面板添加到竹筒其中
		setTitle("带有滚动条的文字编辑器");
		setSize(400,200);
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//关闭窗体则停止程序
	}
	public static void main(String[] args) {
		JScrollPaneTest test =new JScrollPaneTest();
		test.setVisible(true);

	}

}

代码图以及允许结果图如下:


18.5文字标签组件与图标

在Swing程序设计中,标签(JLabel)被用于先是文本,图标等内容,在Swing应用程序中用户界面中,用户能通过标签上的文本,图标等内容获得相应的提示信息

18.5.1JLabel标签

baioqain (JLabel)的弗雷什JCompont类,虽然标签不能被添加监听器,但是标签显示的文本图标内容可以被知道那个对齐方式

        通过JLabel类的构造方法们可以创建多种标签,如显示只有文本的标签,只有图标的标签以及同时包含文本和图标的标签等  使用方法如下:

public JLabel();//创建一个不带图标和文本的标签
public JLabel(Icon icon);//创建一个带图标的标签
public JLabel(Icon icon ,int aligment);创建以恶给带图标的标签,并设置图标的水平对齐方式
public JLabel(String text,int aligment);//创建一个带文本标签,并设置文本的水平对齐方式
public JLabel(Icon icon ,String text, int aligment);
//创建一个带文本和图标的JLabel对于宣布发,并设置文本和图标的水平对齐方式

 具体使用方法如下代码所示:

import java.awt.Container;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import javax.swing.WindowConstants;

public class jFreamTest {

    public static void main(String[] args) {
        JFrame jf = new JFrame();//创建一个窗口对象
        jf.setTitle("创建一个JFrame 窗体");//设置窗口标题
        Container container = jf.getContentPane();//获取主容器
        JLabel jl = new JLabel("这是一个JFrame 窗体");//一个文本标签
        jl.setHorizontalAlignment(SwingConstants.CENTER);//将标签上的文字居中
        container.add(jl);//将标签添加到著容器中
        jf.setSize(300,150);//设置窗体宽高
        jf.setLocation(320,240);//设置窗体在屏幕中出现的位置
        jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//关闭窗体则停止程序
        jf.setVisible(true);//让窗体展示出来
    }
}

 代码图以及允许结果图如下:

 18.5.2图标的使用

在Swing程序设计中,图标经常被添加到标签,按钮组件,使用javax.Swing.ImageIcon类可以根据现有的图片创建图片,UmageIcon类实现了Icon接口,他有多个构造方法  构造方法使用如下:

18.6按钮组件

在Swing程序设计中蛮牛是较见的组件,被用于出发特定的动作  ,Swing提供了多种按钮组件,按钮,单选按钮, 复选框等,

18.6.1JButton按钮
Swing按钮由JButton对象标识JButton常用的构造方法如下:

public JBtton();//创建一个不带文本或者图标的按钮
public JBtton(String text);创建一个带文本的按钮
public JBtton(Icon icon);//创建一个带图标的按钮
public JBtton(String  text ,Icon icon);//创建一个带文本和图标的按钮

 JButton类的常用方法以及说明

方法说明
SetIcon(Icon defauItIcon)设置按钮图案
setToolTipText(String text)为按钮设置提示文字
setBorderPainted(boolean b)如果b的值为true且按钮又边框,那么绘制边框borderPainted属性的默认值为true
setEnable(boolean b)这是按钮释放可用。b的值为true时,表示按钮可用;b的值为false时表示按钮不可用

​18.6.2JRadioButton单选按钮:

Swing单选按钮由JRadioButton对象表示,在Swing程序设计中,需要把多个单选按钮添加到按钮组中,当用户选中某哥单选按钮时,按钮组中的其他单选按钮将不能被同时选中

创建一个JRadioButton对象需要使用JRadioButton类的构造方法。JRadioButton类常用的构造方法如下:

public JRadioButton()//创建一个未被选中,文本违背定义的,具有指定图标的单选按钮
public JRadioButton(Icon icon)//创建一个违背选中的。文本违背选设定的,具有指定图标的单选按钮
public JRadioButton(Icon icon ,boolean selected)
//创建一个具有指定图标。选择状态,但文本未被选定的单选按钮
public JRadioButton(String text)//创建一个具有指定文本,单位本选定的单选按钮
public JRadioButton(String  text , Icon icon)//创建一个具有指定的文本,指定图标,但未被选中的单选按钮
public JRadioButton(Stirng text,Icon icon ,boolean selected)//创建一个具有指定文本,指定图标和选择状态的单选按钮

如下代码所示:

import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JRadioButton;

public class RadioButtonTest extends JFrame {
	public RadioButtonTest(){
	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	setTitle("单选按钮的使用");
	setBounds(100,100,240,120);
	getContentPane().setLayout(null);//设置绝对布局
	JLabel lblNewLabel = new JLabel("请选择性别");
	lblNewLabel.setBounds(5,5,120,15);
	getContentPane().add(lblNewLabel);
	JRadioButton rbtnNormal = new JRadioButton("楠");
	rbtnNormal.setSelected(true);
	rbtnNormal.setBounds(40,30,75,22);
	getContentPane().add(rbtnNormal);
	JRadioButton rbthPwd = new JRadioButton("女");
	rbthPwd.setBounds(120,30,75,22);
	getContentPane().add(rbthPwd);
	ButtonGroup group =new ButtonGroup();//创建按钮组 把交互买哪般中的单选按钮添加到按钮组中
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		RadioButtonTest frame =new RadioButtonTest();//创建窗体对象
		frame.setVisible(true);//使窗体可见
	}

}

 代码图以及允许结果图如下:

 18.6.3JCheckBox复选框

复选框组件由JCeckBox对象标识,与单选按钮不同的时,窗体中的复选框可以被选中多个这是因为每一个复选框“被选中”和"不被选中"两种状态:

public JCeckBox();创建一个文本,图标未被设定为默认未被选中的复选框
public JCeckBox(Icon icon,Boolean checked)创建一个具有指定图标的,指定初始时释放被选中,但图标违背社厅复选框
public JCeckBox(String text Boolean checked);创建一个具有指定文本,指定初始时释放被选中,但图标设定的复选框

使用代码如下:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class CheckBoxTest extends JFrame{
	public CheckBoxTest() {
		setBounds(100,100,170,110);//窗口坐标和大小
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		Container c=getContentPane();//获取主容器
		c.setLayout(new FlowLayout());//容器使用流布局
		JCheckBox c1=new JCheckBox("1");//创建复选框
		JCheckBox c2=new JCheckBox("2");
		JCheckBox c3=new JCheckBox("3");
		c.add(c1);//添加复选框
		c.add(c2);
		c.add(c3);
		JButton btn=new JButton("打印");//添加打印按钮
		btn.addActionListener(new ActionListener() {//打印按钮动作时间
			public void actionPerformed(ActionEvent e) {
		System.out.println(c1.getText()+"按钮选中状态"+c1.isSelected());
		System.out.println(c2.getText()+"按钮选中状态"+c2.isSelected());
		System.out.println(c3.getText()+"按钮选中状态"+c3.isSelected());
				
			}
		});
		c.add(btn);
		setVisible(true);//容器添加了打印按钮
	}
	public static void main(String[] args) {
	new	CheckBoxTest();

	}

}

代码图以及允许结果图如下:

18.7列表组件 

Swing中提供两种列表组件,分别是下拉列表框与列表框。下拉列表框与列表框都是带有一系列列表组件,用户可以从中选择需要列表项,列表框较下拉列表框更直观,他将所有的列表向罗列在俩表中,但是,下拉列表框比较列表框更为便捷,美观,他将所有列表项隐藏起来,当用户选用其中列表向才会显现出来

18.7.1JcomboBox第一次使用下拉列表框,会感觉Swing中下拉列表框与Windows系统中下拉列表框有一些相似,实质上两种并不完全相同,因为Swing中下来列表框不仅可以供用户从中选择,也提供了编辑列表项的功能  如下所示:

public JComboBox(ComboBoxModel dataModel)//创建一个JComboBox类是java.Swing.JCmboBox类的子类
public JComboBox(Object[]arrayData)//创建一个包含数组中的元素的JComboBox对象
public JComboBox(Vector vector)//创建一个包含指定Vector对象中的元素的JComboBox对象

使用方法如下:


import java.awt.event.*;
import javax.swing.*;
public class JComboBoxText extends JFrame {
	public JComboBoxText() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setTitle("下拉列表框的使用");
		setBounds(100,100,317,147);
		getContentPane().setLayout(null);//设置绝对布局
		JLabel lblNewlabel=new JLabel("请选择证件:");
		lblNewlabel.setBounds(28,14,80,15);
		getContentPane().add(lblNewlabel);
		JComboBox<String>comboBox=new JComboBox<String>();//创建一个下来列表框
		comboBox.setBounds(110,11,80,21);//设置坐标
		comboBox.addItem("身份证");//为下来列表中添加项
		comboBox.addItem("军人证");
		comboBox.addItem("学生证");
		comboBox.addItem("工作证");
		comboBox.setEditable(true);
		getContentPane().add(comboBox);//将下拉列表添加到容器中
		JLabel IblResult=new JLabel("");
		IblResult.setBounds(0,57,146,15);
		getContentPane().add(IblResult);
		JButton btnNewButton=new JButton("确定");
		btnNewButton.setBounds(200,10,67,23);
		getContentPane().add(btnNewButton);
		
		btnNewButton.addActionListener(new ActionListener() {//为按钮添加监听事件
			@Override
			public void actionPerformed(ActionEvent e) {
				IblResult.setText("您选择的是:"+comboBox.getSelectedItem());
			}
		});
		
	}
	public static void main(String[] args) {
		JComboBoxText frame=new JComboBoxText();//创建窗体对象
		frame.setVisible(true);
	}
	

}

 代码图以及允许结果图:

 18.8文本组件

文本组件在开发Swing程序过程中经常被用到,尤其是文本框组件和密码框组件,使用文本组件可以轻松的操作单行文字,多行文字口令字段等文本内容

18.8.1JTextField文本框

文本框组件由JFextField对象表示JTextField类的常用构造方法如下:

public JTextField();创建一个文本未被指定的文本框
public JTextField(String text);创建一个指定文本的文本框
public JTextField(int fieldwidth);创建一个只当列宽的文本框
public JTextField(String text,int fieldwidth);创建以恶给指定为呢本列宽的文本框
public JTextField(Document docModel,String text,int fieldwidth);
//创建一个定制文本模型,文本内容和列宽的文本框 

 以下代码讲解使用方法:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class JTextFieldTest extends JFrame{

	public JTextFieldTest() {
		Container c=getContentPane();//获取窗体工期
		c.setLayout(new FlowLayout());
		JTextField jt=new JTextField("请点击清除按钮");//设定文本框初始值
		jt.setColumns(20);//设置文本框长度
		jt.setFont(new Font("宋体",Font.PLAIN,20));//设置字体
		JButton jb=new JButton("清除");
		jt.addActionListener(new ActionListener() {//为文本框添加回车事件
			public void actionPerformed(ActionEvent e) {//
				jt.setText("触发事件");//设置文本框中的值
			}
		});
		jt.addActionListener(new ActionListener() {//为按钮添加时间
			public void actionPerformed(ActionEvent e) {
System.out.println(jt.getText());//输出当前文本框的值
				jt.setText("");//将文本框置空
				jt.requestFocus();//焦点回到文本框
			}
		});
		c.add(jt);//窗体容器添加文本框
		c.add(jb);//窗体添加按钮
		setBounds(100,100,250,110);
		setVisible(true);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
	}
	public static void main(String[] args) {
		new JTextFieldTest();
	}

}

 代码图以及允许结果图如下:

18.8.2JPasswordField密码框

密码框组件由JPasswordField对象表示,其作用十八用户输入的字符串以某种符号进行加密类的常用构造方法如下JPasswordField类的构造方法如下:

public JPasswordField();创建一个文本未被指定的密码框
public JPasswordField(String text);创建一个指定的密码框
public JPasswordField(int fieldwidth);创建一个指定列宽的密码框
public JPasswordField(String text,int fieldwidth);创建个只当文本和列宽的密码框
public JPasswordField(Document docModel,String text,int fieldWidth);//创建一个指定文本模型和列宽的密码框

18.8.3JTextArea文本域

文本与组键JTextArea对象表示,起作用是接受用户多行文本输入,类的常用构造方法

JTextArea

public JTextArea();创建一个文本违背指定的文本域
public JTextArea(String tsxt);//创建一个指定文本的文本域
public JTextArea(int rows ,int columns);创建一个指定行高和列宽,但文本未被指定的文本域
public JTextArea(Docunment doc);//创建一个指定文档模型的文本域
public JTextArea(Document doc ,String Text ,int rows, intcolumns);创建一个指定文档母校,文本内容以及行高和列狂的文本域

主要的使用方法 如下例题所示:

import java.awt.Container;

import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.WindowConstants;

public class JTextAreaTest  extends JFrame {
	public JTextAreaTest() {
		setSize(200,100);//定义文本域长宽
		setTitle("定义自动换行的文本域");
		setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
		Container cp =getContentPane();//获得窗体容器
		//创建一个文本内容为"为文本域"行高和列宽均为6的文本域
		JTextArea jt =new JTextArea("文本域",6,6);
		jt.setLineWrap(true);//可以自动换行
		cp.add(jt);
		setVisible(true);
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new JTextAreaTest();
	}

}

 代码如图以及运行结果如下所示

 18.9表格组件

Swing表格JTable对象表示 其作用是把数据以表格的形式显示给用户

18.9.1创建表格

JTable类除了提供了默认的构造方法外,还提供了被用于显示二维数组中的元素的构造方法如下所示

JTable(Object[][] rowDate,Object[]columnNames)
rowDate//存储表格数据的二维数组
cilumnNames;//存储表格列明的一维数组

主要的使用方法如下所示:


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
public class SortingTable extends JFrame {
private static final long serialVersionUID=1L;

	public static void main(String[] args) {
		SortingTable frame=new SortingTable();
		frame.setVisible(true);
	}
public SortingTable() {
	setTitle("表格模型与表格");
	setBounds(100,100,240,150);
	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	JScrollPane scrollPane=new JScrollPane();
	getContentPane().add(scrollPane,BorderLayout.CENTER);
	String[]columnNames= {"A","B"};//定义表格列名数组
	String[][]tableValues= {{"A1","B1"},{"A2","B2"},{"A3","B3"}};
	//定义表格数据数组
	DefaultTableModel tableModel=new DefaultTableModel(tableValues,columnNames);
	//创建指定列明和数据的表格
	JTable table=new JTable(tableModel);
	//创建显示表格的滚动面板
	table.setRowSorter(new TableRowSorter<>(tableModel));
	//将滚动面板添加到边界布局的中
	scrollPane.setViewportView(table);
	
}
}

 代码图以及运行结果图如下:

18.9.2DefultTableModel表格数据模型

Swing使用TableModel接口定义了一个表格模型 AbstactTableModel抽象类实现了TableModel接口的大部分方法

public int getTowCount();
public intgetCikumnCount();
public Object getValueAt(int rowIndex,intcolumnIndex)

为了实现表格模型创建表格的功能,Swing提供了表格模型,即DefaultTableModel类继承了AbstractTableMode抽象类且显示了上述3个抽象方法类提供了常DefaultTableModel用构造方法

以下例题所示使用方法:


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
public class SortingTable extends JFrame {
private static final long serialVersionUID=1L;

	public static void main(String[] args) {
		SortingTable frame=new SortingTable();
		frame.setVisible(true);
	}
public SortingTable() {
	setTitle("表格模型与表格");
	setBounds(100,100,240,150);
	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	JScrollPane scrollPane=new JScrollPane();
	getContentPane().add(scrollPane,BorderLayout.CENTER);
	String[]columnNames= {"A","B"};//定义表格列名数组
	String[][]tableValues= {{"A1","B1"},{"A2","B2"},{"A3","B3"}};
	//定义表格数据数组
	DefaultTableModel tableModel=new DefaultTableModel(tableValues,columnNames);
	//创建指定列明和数据的表格
	JTable table=new JTable(tableModel);
	//创建显示表格的滚动面板
	table.setRowSorter(new TableRowSorter<>(tableModel));
	//将滚动面板添加到边界布局的中
	scrollPane.setViewportView(table);
}
}

 代码图以及运行结果图如下所示:

18.9.3维护表模型

表格中的数据内容要予以维护,如果使用getValueAt()方法获得表格中的某一俄国单元格的值,使用addRow()方法向表格中添加新的行,使用setValueAt()方法修改表格中的某一个单元格的值removeRow()方法从表格中删除指定行等

以下例题使用了对表格内容进行增删改查如下所示:

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableRowSorter;

public class AddAndDeleteDemo extends JFrame{
	private DefaultTableModel tableModel;
	private JTable table;
	private JTextField aTextField;
	private JTextField bTextField;
	public static void main(String[] args) {
		AddAndDeleteDemo frame =new AddAndDeleteDemo();
		frame.setVisible(true);
	}
	public AddAndDeleteDemo() {
		setTitle("维护表格模型");
		setBounds(100,100,520,200);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		final JScrollPane scrollPane =new JScrollPane();
		getContentPane().add(scrollPane,BorderLayout.CENTER);
		String[] columnNames= {"A","B"};
		//定义表格数据数组
		String[][] tableValues= {{"A1","B1"},{"A2","B2"},{"A3","B3"}};
		//创建指定表格列明和表格数据的表格模型
		tableModel =new DefaultTableModel(tableValues,columnNames);
		table =new JTable(tableModel);
		table.setRowSorter(new TableRowSorter<>(tableModel));
		//设置表格的原则模式为单选
		table.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
		//为表格添加鼠标事件监听器
		table.addMouseListener(new MouseAdapter(){
			public void mouseClicked(MouseEvent e) {
				int selectedRow= table.getSelectedRow();
				//从表格模型中获得指定单元格的值
				Object oa =tableModel.getValueAt(selectedRow, 0);
				//从表格模型中获得指定单元格的值
				Object ob =tableModel.getValueAt(selectedRow, 1);
				aTextField.setText(oa.toString());
				bTextField.setText(ob.toString());
			}
		});
		scrollPane.setViewportView(table);
		JPanel panel = new JPanel();
		getContentPane().add(panel,BorderLayout.SOUTH);
		panel.add(new JLabel("A:"));
		aTextField =new JTextField("A14",10);
		panel.add(aTextField);
		panel.add(new JLabel("B:"));
		bTextField=new JTextField("B4",10);
		panel.add(bTextField);
		JButton addButton =new JButton("添加");
		addButton.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e) {
			String[] rowValues = {aTextField.getText(),
					bTextField.getText()};
			tableModel.addRow(rowValues);
			int rowCount =table.getRowCount()+1;
			aTextField.setText("A"+rowCount);
			bTextField.setText("B"+rowCount);
			}
			});
		panel.add(addButton);
		JButton updButton=new JButton("修改");
		updButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				int selectedRow =table.getSelectedRow();
				if(selectedRow !=-1) {
					//修改表格模型中的指定值
					tableModel.setValueAt(aTextField.getText(), selectedRow, 0);
					//修改表格模型中的指定值
					tableModel.setValueAt(aTextField.getText(), selectedRow, 1);
				}
			}
		});
		panel.add(updButton);
		JButton delButton =new JButton("删除");
		delButton.addActionListener(new ActionListener() {
			public void  actionPerformed(ActionEvent e) {
				int selecedRow=table.getSelectedRow();
				if(selecedRow !=-1)
					tableModel.removeRow(selecedRow);
			}
		});
		panel.add(delButton);
	}
		
	}

代码图以及运行结果图如下:

 18.10ActionEvent动作事件

动作时间(ActionEvent)监听器是Swing中比较常用的事件监听器 很多组件的动作都会使用它监听,如下三种

相关定义实现方式相关定义实现方式
事件名ActionEvent添加监听方法addAtionListener()
事件源JButton,Jlist,STextField等组件删除监听方法reniveActuibListener()
监听接口ActionListener

下面单击按钮事件例子来说明动作时间监听器,当用户单击按钮时,将触发动作事件 如下立体所示:

代码如下:


import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;
public class SimpleEvent extends JFrame {
	private JButton jb=new JButton("我是按钮,点击我");
	public SimpleEvent() {
		setLayout(null);
		setSize(200,100);
		setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
		Container cp=getContentPane();
		cp.add(jb);
		jb.setBounds(10,10,150,30);
		jb.addActionListener(new jbAction());
	
		setVisible(true);
				}
	class jbAction implements ActionListener{
		public void actionPerformed(ActionEvent arg0) {
			jb.setText("我被点击了");
		}
	}
	public static void main(String[] args) {
		new SimpleEvent();
	}

}

 代码图以及运行结果图如下:

18.10.2KeyEvent键盘事件

当想文本框中输入内容是,将发生键盘事件,keyEvent类赋值捕获键盘事件,而可以通过为组件添加实现KeyListener接口的监听器类里处理相印的键盘事件  如下三种抽象方法 

public inteface KeyListener extends ExventListener{

public  void ketTyped(KeyEvent e)//发生击键事件时被触发
public  void ketPressed(KeyEvent  e)//案件被按下按时触发
public void keyReleased(KeyEvent  e)}//按键被释放时触发

如下例题所示:

textField = new JTextField();
		textField.addKeyListener(new KeyAdapter() { // 文本框添加键盘事件的监听
		char word;
		@Override
		public void keyPressed(KeyEvent e) { // 按键被按下时被触发
		word = e.getKeyChar();// 获取按下键表示的字符
		for (int i = 0; i < btns.size(); i++) {// 遍历存储按键ID的ArrayList集合
		// 判断按键是否与遍历到的按键的文本相同
		if (String.valueOf(word).equalsIgnoreCase(btns.get(i).getText())) {
		btns.get(i).setBackground(green);// 将指定按键颜色设置为绿色
		}
		}
		}
		@Override
		public void keyReleased(KeyEvent e) { // 按键被释放时被触发
		word = e.getKeyChar();// 获取释放键表示的字符
		for (int i = 0; i < btns.size(); i++) {// 遍历存储按键ID的ArrayList集合
		// 判断按键是否与遍历到的按键的文本相同
		if (String.valueOf(word).equalsIgnoreCase(btns.get(i).getText())) {
		btns.get(i).setBackground(white);// 将指定按键颜色设置为白色
		}
		}
		}
		});
		panel.add(textField, BorderLayout.CENTER);
		textField.setColumns(10);
		}
		}

代码图以及运行结果图如下:

 18.10.3MouseEvent鼠标事件

所有组件都能发生鼠标事件MouseEvent类赋值捕捉鼠标事件,可以通过为组件添加了MouseListener接口的监听器类来处理像相应的鼠标事件   如下所示:

public inerfacce MouseListener extendx EventListener{
public void mouseEntered(NouseEvent e);//光标一如组件时被触发
public void mousePressed(NouseEvent e)//光标案件被按下触发
public void mouseReleased(NouseEvent e)//鼠标案件被释放时触发
public void mouseClicke(NouseEvent e)//发生单击事件时被触发
public void mouseExited(NouseEvent e)//光标溢出组件时被触发
}

如下例题所示:


import java.awt.BorderLayout;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JFrame;
import javax.swing.JLabel;

public class MouseEventDemo extends JFrame { // 继承窗体类JFrame

	public static void main(String args[]) {
		MouseEventDemo frame = new MouseEventDemo();
		frame.setVisible(true); // 设置窗体可见,默认为不可见
	}

	/**
	 * 判断按下的鼠标键,并输出相应提示
	 * 
	 * @param e 鼠标事件
	 */
	private void mouseOper(MouseEvent e) {
		int i = e.getButton();
		if(i==MouseEvent.BUTTON1)
		System.out.println("按下的时鼠标左键");
		else if(i==MouseEvent.BUTTON2)
		System.out.println("按下的时鼠标滚轮");
		else if(i==MouseEvent.BUTTON3)
		System.out.println("按下的时鼠标右键");
	}

	public MouseEventDemo() {
		super(); // 继承父类的构造方法
		setTitle("鼠标事件示例"); // 设置窗体的标题
		setBounds(100, 100, 500, 375); // 设置窗体的显示位置及大小
		// 设置窗体关闭按钮的动作为退出
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		final JLabel label = new JLabel();
		label.addMouseListener(new MouseListener() {
			@Override
			public void mouseEntered(MouseEvent e) {
				
				System.out.println("光标移入组件");
			}
		
			

			@Override
			public void mousePressed(MouseEvent e) {
				System.out.println("鼠标按键被按下");
				mouseOper(e);
			}

			@Override
			public void mouseReleased(MouseEvent e) {
				System.out.println("鼠标按键被释放");
				mouseOper(e);
			}

			@Override
			public void mouseClicked(MouseEvent e) {
				System.out.println("单击了鼠标按键");
				mouseOper(e);
				int clickCount=e.getClickCount();
				System.out.println("单机次数为"+clickCount+"下");
			}

			@Override
			public void mouseExited(MouseEvent e) {
				System.out.println("光标移出组件");
				
			}
		
		});
		getContentPane().add(label, BorderLayout.CENTER);
	}

}

代码图以及运行结果图:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Windows系统下本地MQTT服务器搭建(保姆级教程)

Windows系统下本地MQTT服务器搭建 1.下载并安装emqx服务器 1. 访问Eqmx官网 2. 选中合适的MQTT服务器版本 由于我们使用的是本地部署MQTT服务器&#xff0c;而且只使用基础功能的MQTT服务器功能&#xff0c;所以选中“大规模分布式MQTT消息服务器”即可&#xff0c;如下如图…

【Copilot】登录报错 Extension activation failed: “No auth flow succeeded.“(VSCode)

问题描述 Visual Studio Code 登录 GitHub Copilot 插件报错。 在浏览器中成功授权 GitHub 账户&#xff0c;返回 VSCode 后仍然报错。 [ERROR] [default] [2023-11-06T12:34:56.185Z] Extension activation failed: "No auth flow succeeded."原因分析 网络环境问…

mongo实际业务场景实战

业务场景 有四个业务信息,分别是适用部门、适用岗位、适用职级、适用专业。 1.适用部门有三个层级类似D001表示一级部门、D001002表示二级部门、D001002001表示三级部门,ALL表示所有部门。 2.适用岗位有岗位A、岗位B、ALL等,ALL表示适用所有岗位。 3.适用职级有M-1,M-2、AL…

csharp写一个招聘信息采集的程序

csharp爬虫是一种用于自动化抓取网页内容的程序。它可以通过模拟人类浏览器的行为&#xff0c;自动访问网站并抓取所需的数据。csharp爬虫可以用于各种场景&#xff0c;例如数据挖掘、搜索引擎优化、竞争情报等。但是&#xff0c;使用csharp爬虫需要注意一些问题&#xff0c;例…

再获5G RedCap能力认证!宏电5G RedCap工业智能网关通过中国联通5G物联网OPENLAB开放实验室测试验证

​近日&#xff0c;中国联通5G物联网OPENLAB开放实验室携手宏电股份完成5G RedCap工业智能网关端到端的测试验证&#xff0c;并颁发OPENLAB实验室面向RedCap终端的认证证书&#xff0c;为RedCap产业规模推广、全行业赋能打下坚实基础。 中国联通5G物联网OPENLAB开放实验室是中国…

【kylin】使用nmtui软件配置网桥

文章目录 一、什么是网桥二、如何配置网桥域名解析失败 一、什么是网桥 网桥也叫桥接器&#xff0c;是连接两个局域网的一种存储/转发设备&#xff0c;它能将一个大的LAN分割为多个网段&#xff0c;或将两个以上的LAN互联为一个逻辑LAN&#xff0c;使LAN上的所有用户都可访问服…

Selenium切换窗口句柄及调用Chrome浏览器

一. 调用Chrome浏览器 首先,假设通过Firefox()浏览器定向爬取首页导航栏信息,审查元素代码如下图所示,在div class="menu"路径的ul、li、a下,同时可以定位ul class="clearfix"。 # coding=utf-8 import os from selenium import webdriver #…

react antd message多条数据展示样式

最终效果&#xff1a; 前言&#xff1a; 平时我们经常用到message来做一些错误提示&#xff0c;最常见的就是单行提示。如下图&#xff1a; 实现代码&#xff1a; message.error(This is an error message)多行动态message实现 参考文献&#xff1a;antd message 链接地址&a…

java版本转换小工具

工作之余写了一个转换小工具&#xff0c;具有以下功能&#xff1a; 时间戳转换Base64编码/解码URL编码/解码JSON格式化 时间戳转换 package org.binbin.container.panel;import javax.swing.*; import java.awt.*; import java.text.DateFormat; import java.text.SimpleDat…

【verilog】verilog语法刷题知识点总结

verilog语法刷题知识点总结 1.状态机2.任务和函数的区别3.case&#xff0c;casez和casex4.随机数产生关键字5.运算符优先级6.特殊运算符(1)移位运算符(2)等式运算符(3)动态位宽截取运算符 7.testbench知识点 1.状态机 &#xff08;1&#xff09;三段式状态机的组成&#xff1a…

Vue.Draggable 踩坑:add 事件与 change 事件中 newIndex 字段不同之谜

背景 最近在弄自定义表单&#xff0c;需要拖动组件进行表单设计&#xff0c;所以用到了 Vue.Draggable(中文文档)。Vue.Draggable 是一款基于 Sortable.js 实现的 vue 拖拽插件&#xff0c;文档挺简单的&#xff0c;用起来也方便&#xff0c;但没想到接下来给我遇到了灵异事件……

钉钉API与集简云无代码开发连接:电商平台与营销系统的自动化集成

连接科技与能源&#xff1a;钉钉API与集简云的一次集成尝试 在数字化时代&#xff0c;许多公司面临着如何将传统的工作方式转变为更智能、高效的挑战。某能源科技有限公司也不例外&#xff0c;他们是一家专注于能源科技领域的公司&#xff0c;产品包括节能灯具、光伏逆变器、电…

山西电力市场日前价格预测【2023-11-11】

日前价格预测 ​ 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2023-11-11&#xff09;山西电力市场全天平均日前电价为311.30元/MWh。其中&#xff0c;最高日前电价为417.73元/MWh&#xff0c;预计出现在08: 00。最低日前电价为151.48元/MWh&#xff0c…

媒体转码软件Media Encoder 2024 mac中文版功能介绍

Media Encoder 2024 mac是一款媒体转码软件&#xff0c;它可以将视频从一种格式转码为另一种格式&#xff0c;支持H.265、HDR10等多种编码格式&#xff0c;同时优化了视频质量&#xff0c;提高了编码速度。此外&#xff0c;Media Encoder 2024还支持收录、创建代理和输出各种格…

Spark 读取ES采坑系列

目录 一、使用的插件 二、ES集群和Elasticsearch-hadoop版本问题 三、Elasticsearch-hadoop 和Scala版本以及Spark版本&#xff08;版本不匹配会有各种异常信息 一、使用的插件 <dependency><groupId>org.elasticsearch</groupId><artifactId>elas…

广告原生化发展,助力开发者收益更上一层楼

什么是原生广告&#xff1f; 原生广告&#xff0c;Native Advertising (Native Ads)&#xff0c;有广义和狭义之分&#xff0c;广义的原生广告是一种让广告作为内容的一部分植入到实际页面设计中的广告形式&#xff0c;狭义的原生广告是指通过在信息流里发布具有相关性内容的广…

史上最细,Jenkins插件Allure生成自动化测试报告详细...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、Allure介绍 A…

浅谈安科瑞直流表在沙特基站的应用

摘要&#xff1a;本文介绍了安科瑞直流电表在沙特基站的应用。主要用于沙特某基站的电流电压电能的计量&#xff0c;配合分流器对基站进行计量。 Abstract: This article introduces the application of Acrel DC meters in base station in Saudi Arabia.The device is meas…

CDN是什么?

一.CDN的概念 内容分发网络&#xff08;Content Delivery Network&#xff0c;简称CDN&#xff09;是建立并覆盖在承载网之上&#xff0c;由分布在不同区域的边缘节点服务器群组成的分布式网络。CDN应用广泛&#xff0c;支持多种行业、多种场景内容加速&#xff0c;例如&#…

导轨式安装压力应变桥信号处理差分信号输入转换变送器0-10mV/0-20mV/0-±10mV/0-±20mV转0-5V/0-10V/4-20mA

主要特性 DIN11 IPO 压力应变桥信号处理系列隔离放大器是一种将差分输入信号隔离放大、转换成按比例输出的直流信号导轨安装变送模块。产品广泛应用在电力、远程监控、仪器仪表、医疗设备、工业自控等行业。此系列模块内部嵌入了一个高效微功率的电源&#xff0c;向输入端和输…