Swing 程序设计

news2024/12/28 19:00:13

概述

String包的层次结构和继承关系如下 

常用的Swing组件如下表

Swing常用窗体 

JFrame 窗体

JFrame 类的常用构造方法包括以下两种形式:

  • public JFrame():创建一个初始不可见、没有标题的窗体。
  • public JFrame(String title):创建一个不可见、具有标题的窗体。

例如,创建一个不可见、具有标题的窗体,关键代码如下:

JFrame jf = new JFrame(“登录系统”);

Container container = jf.getContentPane();

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

JButton okBtn= new JButton(“确定“)

container.add(okBtn);

删除容器中的按钮,关键代码如下:

container.remove(okBtn);

创建窗体后,要对窗体进行设置,如设置窗体的位置、大小、是否可见等。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时,表示不可见。setDefaultCloseOperation(int operation):设置窗体的关闭方式,默认值为DISPOSE_ON_CLOSE 

Java 语言提供了多种窗体的关闭方式,常用的有4种,如表18.2所示。

例题18.1

import java.awt.*;			//导入AWT包
import javax.swing.*;		//导入Swing包
public class JFreamTest {
	public static void main(String args[]) {		//主方法
		JFrame jf=new JFrame();						//创建窗体对象
		jf.setTitle("创建一个JFream 窗体");				//设置窗体标题
		Container container=jf.getContentPane();	//获取主容器
		JLabel jl=new JLabel("这是一个JLrame 窗体");		//一个文本标签
		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.1

运行结果如下:

JDialog 对话框 

JDialog 类常用的构造方法如下:

  • public JDialogO:创建一个没有标题和父窗体的对话框。
  • 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):创建一个指定标题、父窗体和模式的对话框。

例题18.2

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);	//创建MyJDialog对话框
			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

运行结果如下: 

JOptionPane 小型对话框 

JOptionPane提供了4种创建对话框的方法,如下:

下面分别介绍这4种对话框的外观样式和使用方法

 1.自定义对话框

参数说明如下:

  • parentComponent:指明对话框在哪个窗体上显示,如果传入具体的窗体对象,对话框会在该窗体居中位置显示,如果传入null则在屏幕中间弹出对话框。
  • message:提示的信息。
  • title:对话框的标题。
  • optionType:指定可用于对话框的选项的整数:DEFAULT_OPTION、YES NO_OPTION.YES NO_CANCEL_OPTION 或 OK_CANCEL_OPTION。
  • messageType:指定消息种类的整数,主要用于确定来自可插入外观的图标ERRORMESSAGE、INFORMATION_MESSAGE、WARNING_MESSAGE、QUESTION_MESSAGE 或 PLAIN_MESSAGE。
  • icon:在对话框中显示的图标。
  • options:指示用户可能选择的对象组成的数组。如果对象是组件,则可以正确呈现,非String对象使用其toString方法呈现;如果此参数为null,则由外观确定选项。
  • initialValue:表示对话框的默认选择的对象,只有在使用options 时才有意义,可以为null。

例题18.3

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JOptionPane;//例题18.3

public class Demo{
	public static void main(String[] args){
		Object o[] ={ new JButton("是的"),new JButton("再想想")};		//按钮对象的Object数组
		Icon icon = new ImageIcon("src/pic.png");					//获取图标对象
		JOptionPane.showOptionDialog(null,
				"你做好准备了吗?",
				"注意了!",
				JOptionPane.DEFAULT_OPTION,
				JOptionPane.DEFAULT_OPTION,
				icon, o, null);
	}
}	

运行结果如下:

2.确认框 

  • 调出带有选项 Yes、No 和Cancel的对话框;标题为 Select an Option。

static int showConfirmDialog(Component parentComponent, Object message)

  • 调出一个由optionType参数确定其中选项数的对话框。

static int showConfirmDialog(Component parentComponent, Object message, String title, int optionType)

  • 调用一个由optionType参数确定其中选项数的对话框,messageType参数确定要显示的图标。

static int showConfirmDialog(Component parentComponent,

        Object message,

        String title,

        int optionType,

        int messageType)

  • 调出一个带有指定图标的对话框,其中的选项数由optionType 参数确定。

static int showConfirmDialog(Component parentComponent,

        Object message,

        String title,

        int optionType,

        int messageType,

        Icon icon)

例题18.4


import javax.swing.JOptionPane;

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

运行结果如下:

3.输入框 

输入框已经封装好了一套外观样式,弹出后要求用户在文本框中输入文本,用户完成输入操作后,输入框可以返回用户输入的结果。创建输入框的方法有以下几种重载形式:

  • 显示请求用户输入内容的问题消息对话框,它以parentComponent为父级。

static String showlnputDialog(Component parentComponent, Object message)

  • 显示请求用户输入内容的问题消息对话框,它以parentComponent为父级。

static String showlnputDialog(Component parentComponent, Object message, Object initialSelectionValue)

  • 显示请求用户输入内容的对话框,它以parentComponent为父级,该对话框的标题为title,消息类型为messageType。

static String showlnputDialog(Component parentComponent, Object message, String title, int messageType)

  • 提示用户在可以指定初始选择、可能选择及其他所有选项的模块化的对话框中输入内容。

static Object showInputDialog(Component parentComponent,

                Object message,

                String title,

                int messageType,

                Icon icon,

                Objectü selectionValues,

                Object initialSelectionValue)

  • 显示请求用户输入的问题消息对话框。

static String showInputDialog(Object message)

  • 显示请求用户输入的问题消息对话框,它带有已初始化为initialSelectionValue的输入值。

static String showInputDialog(Object message, Object initialSelectionValue)

例题18.5


import javax.swing.JOptionPane;

public class Demo{
	public static void main(String[] args){
		String name = JOptionPane.showInputDialog(null,"请输入您的名字");
	}
}//例题18.5

运行结果如下:

4.通知框 

创建通知框方法有以下几种重载形式:

  • 调出标题为Message的信息消息对话框。

static void showMessageDialog(Component parentComponent, Object message)

  • 调出对话框,它显示使用由messageType 参数确定的默认图标的message。

static void showMessageDialog(Component parentComponent,

                Object message,

                String title,

                int messageType)

  • 调出一个显示信息的对话框,为其指定了所有参数。

static void showMessageDialog(Component parentComponent,

                Object message,

                String title,

                int messageType,

                Icon icon)

例题18.6


import javax.swing.JOptionPane;

public class Demo{
	public static void main(String[] args){
		JOptionPane.showMessageDialog(null, 
				"您与服务器断开连接",
				"发生错误",
				JOptionPane.ERROR_MESSAGE);
	}
}//例题18.6

运行结果如下:

常用布局管理器 

null绝对布局

例题18.7

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

运行结果如下:

 FlowLayout 流布局管理器

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

  • public FlowLayout()。
  • public FlowLayout(int alignment)。
  • public FlowLayout(int alignment,int horizGap,int vertGap)。

例题18.8

import java.awt.*;
import javax.swing.*;
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.DISPOSE_ON_CLOSE); //关闭窗体则停止程序
			setVisible(true);			//设置窗体可见
	}
	public static void main(String[] args){
		new FlowLayoutPosition();
	}
}//例题18.8

运行结果如下:

BorderLayout 边界布局管理器 

addo方法被用于实现向容器中添加组件的功能,它可以设置组件的摆放位置。addO方法常用的语

法格式如下:

public void add(Component comp, Object constraints)

  • comp:被添加的组件。
  • constraints:被添加组件的布局约束对象。

例题18.9

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

			


 运行及如果如下:

GridLayout 网络布局管理器

网格布局管理器主要有以下两个常用的构造方法:

  • public GridLayout(int rows, int columns)。
  • public GridLayout(int rows, int columns, int horizGap, int vertGap)。

其中,参数rows 和columns分别代表网格的行数和列数,这两个参数只允许有一个参数可以为0,被用于表示一行或一列可以排列任意多个组件;参数horizGap和vertGap分别代表网格之间的水平间距和垂直间距。

例题18.10

import java.awt.*;
import javax.swing.*;
public class GridLayoutPosition extends JFrame{
	public GridLayoutPosition(){
			Container c = getContentPane();
			//设置容器使用网格布局管理器,设置7行3列的网格。组件间水平间距为5像素,垂直间距为5像素
			setLayout(new GridLayout(7, 3, 5, 5));
			for (int i=0;i<20; i++){
				c.add(new JButton("button"+i));			//循环添加按钮
			}
			setSize(300, 300);
			setTitle("这是一个使用网格布局管理器的窗体");
			setVisible(true);
			setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
		}
			public static void main(String[] args){
				new GridLayoutPosition();
			}
		}//例题18.10

运行结果如下:

常用面板 

JPanel  面板

JPanel面板必须在窗体容器中使用,无法脱离窗体显示

例题18.11

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.WindowConstants;

public class JPaneITest extends JFrame{
	public JPaneITest(){
		Container c = getContentPane();
		//将整个容器设置为2行2列的网格布局,组件水平间隔10像素,垂直间隔10像素
		c.setLayout(new GridLayout(2, 2, 10, 10));
		//初始化一个面板,此面板使用1行4列的网格布局,组件水平间隔10像素,垂直间隔10像素
		JPanel p1= new JPanel(new GridLayout(1, 4, 10, 10));
		//初始化一个面板,此面板使用边界布局
		JPanel p2 = new JPanel(new BorderLayout());
		//初始化一个面板,此面板使用1行2列的网格布局,组件水平间隔10像素,垂直间隔10像素
		JPanel p3 = new JPanel(new GridLayout(1, 2, 10, 10));
		//初始化一个面板,此面板使用2行1列的网格布局,组件水平间隔10像素,垂直间隔10像素
		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"));
		p1.add(new JButton("b1"));
		p1.add(new JButton("b1"));
		p1.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.DISPOSE_ON_CLOSE); //关闭动作
	}
	public static void main(String[] args){
		JPaneITest test = new JPaneITest();
		test.setVisible(true);
	}
}//例题18.11
				

				

			

运行结果如下:

 

JScrollPane 滚动面板 

JScrollPane 滚动面板 不能使用布局管理器,且只能容纳一个组件

 例题18.12

import java.awt.Container;

import javax.swing.*;

public class JScrollPaneTest extends JFrame{
	public JScrollPaneTest() {
		Container c	=getContentPane();			//获取主容器
		JTextArea ta = new JTextArea(20,50);
		JScrollPane sp =new JScrollPane(ta);
		c.add(sp);								//将该面板添加到主容器中
		setTitle("带滚动条的文字编译器");
		setSize(40,200);
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
	}

	public static void main(String[] args) {
		JScrollPaneTest test= new JScrollPaneTest();
		test.setVisible(true);
	}

}//例题18.12

 运行结果如下:

文字标签组件与图标

JLable 标签

  • JLabel类常用的构造方法如下:
  • public JLabel0:创建一个不带图标或文本的标签。
  • public JLabel(Icon icon):创建一个带图标的标签。
  • public JLabel(Icon icon, int aligment):创建一个带图标的标签,并设置图标的水平对齐方式。
  • public JLabel(String text, int aligment):创建一个带文本的标签,并设置文本的水平对齐方式。
  • public JLabel(String text, Icon icon, int aligment):创建一个带文本和图标的JLabel对象,并设置文本和图标的水平对齐方式。

例题18.13

import java.awt.Container;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.WindowConstants;

public class JLableITest extends JFrame{
	public JLableITest(){
		Container container = getContentPane();
		JLabel jI= new JLabel("这是一个 JFrame 窗体");					//创建标签
		container.add(jI);											//将标签添加到容器中
		setSize(200, 100);											//设置窗体大小
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);	//设置窗体关闭模式
		setVisible(true);											//使窗体可见
	}
public static void main(String args[]){
	new JLableITest();
	}
}//例题18.13









 运行结果如下:

图标的使用

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

  • public ImagelconO:创建一个 Imagelcon 对象,创建 ImageIcon对象后,使用其调用 setImage(Image image)方法设置图片。
  • public Imagelcon(Image image):依据现有的图片创建图标。
  • public ImageIcon(URL url):依据现有图片的路径创建图标。

例题18.14

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

public class MyImageIcon extends JFrame{
	public MyImageIcon() {
		Container container = getContentPane();
		JLabel jl = new JLabel("这是一个JLabel 窗体");					//创建标签
		URL url =MyImageIcon.class.getResource("pic.png");			//获取图片所在的URL
		Icon icon = new ImageIcon(url);		//获取图片的Icon对象
		jl.setIcon(icon);		//为标签设置图片
		jl.setHorizontalAlignment(SwingConstants.CENTER);			//设置文字放置在标签中间
		jl.setOpaque(true);		//设置标签为不透明状态
		container.add(jl);		//将标签添加到容器中
		setSize(300,200);		//设置窗体大小
		setVisible(true);		//使窗体可见
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);	//关闭窗体则停止程序
	}

	public static void main(String[] args) {
		new MyImageIcon();

	}

}//例题18.14

 运行结果如下:

按钮组件 

JButton 按钮

Swing 按钮由JButton对象表示,JButton常用的构造方法如下:

  • public JButtonO:创建一个不带文本或图标的按钮。
  • public JButton(String text):创建一个带文本的按钮。
  • public JButton(Icon icon):创建一个带图标的按钮。
  • public JButton(String text, Icon icon):创建一个带文本和图标的按钮。

创建JButon 对象后,如果要对JButton 对象进行设置,那么可以使用JButton类提供的方法。

JButton 类的常用方法及其说明如表18.6所示:

例题18.15

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class JButtonTest extends JFrame {
	public JButtonTest(){
		Icon icon = new ImageIcon("src/pic.jpg");			//获取图片文件
		setLayout(new GridLayout(3, 2, 5, 5));				//设置网格布局管理器
		Container c = getContentPane();						//获取主容器
		JButton btn[]=new JButton[6];						//创建按钮数组
		for (int i= 0; i< btn.length; i++){
			btn[i]= new JButton();							//实例化数组中的对象
			c.add(btn[i]);									//将按钮添加到容器中
		}
		btn[0].setText("不可用");
		btn[0].setEnabled(false);							//设置按钮不可用
		btn[1].setText("有背景色");
		btn[1].setBackground(Color.YELLOW);
		btn[2].setText("无边框");
		btn[2].setBorderPainted(false);						//设置按钮边框不显示
		btn[3].setText("有边框");
		btn[3].setBorder(BorderFactory.createLineBorder(Color.RED));	//添加红色线型边框
		btn[4].setIcon(icon);								//为按钮设置图标
		btn[4].setToolTipText("图片按钮");						//设置鼠标悬停时提示的文字
		btn[5].setText("可点击");
		btn[5].addActionListener(new ActionListener(){		//为按钮添加监听事件
		public void actionPerformed(ActionEvent e){
			JOptionPane.showMessageDialog(JButtonTest.this,"点击按钮");	//出确认对话框
			}
		});
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setVisible(true);
		setTitle("创建不同样式的按钮");
		setBounds(100, 100, 400,200);
	}
		public static void main(String[] args){
			new JButtonTest();
		}
}//例题18.15

 运行结果如下:

JRadinButton 单选按钮 

1.单选按钮

创建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(String text, Icon icon, boolean selected):创建一个具有指定的文本、指定图标和选择状态的单选按钮。

根据上述构造方法的相关介绍,不难发现,单选按钮的图标、文本和选择状态等属性能够被同时设定。例如,使用JRadioButton 类的构造方法创建一个文本为“选项 A”的单选按钮,关键代码如下:

JRadioButton rbtn = new JRadioButton("选项 A");

2.按钮组

Swing 按钮组由 ButtonGroup对象表示,多个单选按钮被添加到按钮组后,能够实现“选项有多个,

但只能选中一个”的效果。ButtonGroup 对象被创建后,可以使用addO方法把多个单选按钮添加到

ButtonGroup对象中。

例题18.16

import javax.swing.*;
public class RadioButtonTest extends JFrame {
	public RadioButtonTest() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setTitle("单选按钮的使用");
		setBounds(100, 100, 240, 120);
		getContentPane().setLayout(null);
		JLabel IblNewLabel= new JLabel("请选择性别:");
		IblNewLabel.setBounds(5, 5, 120, 15);
		getContentPane().add(IblNewLabel);
		JRadioButton rbtnNormal = new JRadioButton("男");
		rbtnNormal.setSelected(true);
		rbtnNormal.setBounds(40, 30, 75, 22);
		getContentPane().add(rbtnNormal);
		JRadioButton rbtnPwd = new JRadioButton("女");
		rbtnPwd.setBounds(120, 30, 75, 22);
		getContentPane().add(rbtnPwd);
		ButtonGroup group = new ButtonGroup();//创建按钮组,把交互面板中的单选按钮添加到按钮组中
		group.add(rbtnNormal);
		group.add(rbtnPwd);
	}
	public static void main(String[] args){
		RadioButtonTest frame = new RadioButtonTest();		//创建窗体对象
		frame.setVisible(true);								//使窗体可见
	}
}//例题18.16

运行结果如下:

JCheckBox 复选框 

JCheckBox的常用构造方法如下:

  • public JCheckBox():创建一个文本、图标未被设定且默认未被选中的复选框。
  • public JCheckBox(Icon icon, Boolean checked):创建一个具有指定图标、指定初始时是否被选中,但文本未被设定的复选框。
  • public JCheckBox(String text, Boolean checked):创建一个具有指定文本、指定初始时是否被选中,但图标未被设定的复选框。

例题18.17

import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.WindowConstants;
import javax.swing.event.AncestorListener;

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.17

运行结果如下:

选中复选框后运行结果如下:

列表组件 

JComboBox 下拉列表框

JComboBox 类的常用构造方法如下:

  • public JComboBox(ComboBoxModeldataModel):创建一个 JComboBox对象,下拉列表中的列表项使用ComboBoxModel中的列表项,ComboBoxModel 是一个用于组合框的数据模型。
  • public JComboBox(Object[]arrayData):创建一个包含指定数组中的元素的JComboBox对象。
  • public JComboBox(Vector vector):创建一个包含指定 Vector 对象中的元素的JComboBox 对象.Voetor对象中的元素可以通过整数索引进行访问,而且 Vector 对象中的元素可以根据需求被添加或者移除。

JComboBox类的常用方法及其说明如表18.7所示。

例题18.18

import java.awt.event.*;
import javax.swing.*;
public class JComboBoxTest extends JFrame{
	public JComboBoxTest() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setTitle("下拉列表框的使用");
		setBounds(100, 100, 317,147);
		getContentPane().setLayout(null);							//设置绝对布局
		JLabel IbINewLabel= new JLabel("请选择证件:");					//设置坐标
		IbINewLabel.setBounds(28, 14, 80, 15);						//为下拉列表中添加项
		getContentPane().add(IbINewLabel);
		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 argo){
				//获取下拉列表中的选中项
				IblResult.setText("您选择的是:"+comboBox.getSelectedItem());
			}
		});
	}
	public static void main(String[] args){
		JComboBoxTest frame = new JComboBoxTest();					//创建窗体对象
		frame.setVisible(true);										//使窗体可见
	}
}//例题18.18

运行结果如下:

JList 列表框 

JList类的常用构造方法如下:

  • public void JList():创建一个空的JList对象。
  • public void JList(Object[] listData):创建一个显示指定数组中的元素的JList对象。
  • public void JList(Vector listData):创建一个显示指定 Vector 中的元素的JList对象。
  • public void JList(ListModel dataModel):创建一个显示指定的非 null模型的元素的JList对象。

例题18.19

import java.awt.Container;
import java.awt.event.*;
import javax.swing.*;
public class JListTest extends JFrame {
	public JListTest(){
		Container cp = getContentPane();		//获取窗体主容器
		cp.setLayout(null);//容器使用绝对布局
		//创建字符串数组,保存列表中的数据
		String[] contents ={"列表 1","列表 2","列表 3","列表 4","列表 5","列表6"};
		JList<String> jl = new JList<>(contents);	//创建列表框,并将字符串数组作为构造参数
		JScrollPane js = new JScrollPane(jl);		//将列表框放入滚动面板
		js.setBounds(10, 10, 100, 109);				//设没定滚动面板的坐标和大小
		cp.add(js);
		JTextArea area = new JTextArea();			//创建文本域	
		JScrollPane scrollPane = new JScrollPane(area);		//将文本域放入滚动面板
		scrollPane.setBounds(118, 10, 73, 80);
		cp.add(scrollPane);
		JButton btnNewButton=new JButton("确认");		//创建"确认"按钮
		btnNewButton.setBounds(120,96, 71, 23);		//设定按钮的坐标和大小
		cp.add(btnNewButton);
		btnNewButton.addActionListener(new ActionListener() {	添加按钮事件
			public void actionPerformed(ActionEvent e) {
				//获取列表中选中的元素,返回java.util.List类型
				java.util.List<String> values = jl.getSelectedValuesList();
				area.setText("");					//清空文本域
					for (String value : values){
						area.append(value + "n");	//在文本域循环追加列表框中选中的值
					}
			}
		});
		setTitle("在这个窗体中使用了列表框");
		setSize(217,167);
		setVisible(true);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
	}
		public static void main(String args[]) {
			new JListTest();
		}
}//例题18.19

 运行结果如下:

文本组件 

JTextField文本框

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

  • public JTextFieldO:创建一个文本未被指定的文本框。
  • public JTextField(String text):创建一个指定文本的文本框。
  • public JTextField(int fieldwidth):创建一个指定列宽的文本框。
  • public JTextField(String text, int fieldwidth):创建一个指定文本和列宽的文本框。
  • public JTextField(Document docModel, String text, int fieldWidth):创建一个指定文本模型、本内容和列宽的文本框。

如果要为一个文本未被指定的文本框设置文本内容,那么需要使用 setTextO方法。setText0方法的语法如下:

public void setText(String t)

其中,t表示文本框要显示的文本内容。

例题18.20

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

public class JTextFieldText extends JFrame{
	public JTextFieldText() {
		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 arg0) {
				jt.setText("触发事件");					//设置文本框中的值
			}
		});
		jb.addActionListener(new ActionListener() {		//为按钮添加事件
			public void actionPerformed(ActionEvent arg0) {
				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 JTextFieldText();

	}

}//例题18.20

运行结果如下:

JPasswordField 密码框

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

  • public JPasswordFieldO:创建一个文本未被指定的密码框。
  • public JPasswordFiled(String text):创建一个指定文本的密码框。
  • public JPasswordField(int fieldwidth):创建一个指定列宽的密码框。
  • public JPasswordField(String text, int fieldwidth):创建一个指定文本和列宽的密码框。
  • public JPasswordField(Document docModel, String text, int fieldWidth):创建一个指定文本模型和列宽的密码框。

JPasswordField 类提供了setEchoCharO方法,这个方法被用于改变密码框的回显字符。setEchoCharO方法的语法如下:

public void setEchoChar(char c)

其中,c表示密码框要显示的回显字符

JTextArea 文本域

文本城组件曲 JTextArea 对象表示,其作用是接受用户的多行文本输入。JTextArea类的常用构造方法如下:

  •  patie TextArea0:创建一个文本未被指定的文本域。
  • publie NTtextArea(String text):创建一个指定文本的文本域。
  • pabic leatAesfint rows,int columns):创建一个指定行高和列宽,但文本未被指定的文本域。
  • public JTextArea(Document doc): 创建一个指定文档模型的文本域。

  • public JTextArea(Document doc,String Text,int rows,int columns):创建内容以及行高和列宽的文本域。

例题18.21

import java.awt.*;
import javax.swing.*;
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) {
			new JTextAreaTest();
		}
	}//例题18.21

运行结果如下:

表格组件

创建表格

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

构造方法的语法如下:

JTable(Object[][] rowData, Objectl columnNames)

  • rowData:存储表格数据的二维数组。
  • columnNames:存储表格列名的一维数组。

例题18.22

import java.awt.*;
import javax.swing.*;
public class JTableDemo extends JFrame {
	public static void main(String args[]) {
		JTableDemo frame = new JTableDemo();
		frame.setVisible(true);
	}
	public JTableDemo(){
		setTitle("创建可以滚动的表格");
		setBounds(100, 100, 240, 150);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		String[] columnNames = {"A","B"};				//定义表格列名数组
		//定义表格数据数组
		String[][] tableValues = {{"A1","B1"},{"A2","B2"},{"A3","B3"},
				{"A4","B4"}, {"A5", "B5"}};
		//创建指定列名和数据的表格
		JTable table = new JTable(tableValues, columnNames);
		//创建显示表格的滚动面板
		JScrollPane scrollPane = new JScrollPane(table);
		//将滚动面板添加到边界布局的中间
		getContentPane().add(scrollPane, BorderLayout.CENTER);
	}
}//例题18.22

运行结果如下:

DefaultTableModel 表格数据模型

Swing 使用 TableModel 接口定义了一个表格模型,AbstractTableModel 抽象类实现了 TableModel接口的大部分方法,只有以下3个抽象方法没有实现:

  • public int getRowCountO);
  • public int getColumnCountO);
  • public Object getValueAt(int rowIndex, int columnIndex);

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

例题18.23

import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;
public class SortingTable extends JFrame {
	private static final long seriaIVersionUID= 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.23

运行结果如下:

维护表格模型 

例题18.24

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;//例题18.24
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_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("A4", 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(bTextField.getText(), selectedRow, 1);
				}
			}
		});				
		panel.add(updButton);
		JButton delButton = new JButton("删除");
		delButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e){
				int selectedRow = table.getSelectedRow();		//获得被选中行的索引
				if (selectedRow !=-1);							//判断是否存在被选中行
					tableModel.removeRow(selectedRow);			//从表格模型中删除指定行
			    }
		});
		panel.add(delButton);
	}
}

		
		
		

运行结果如下:

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

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

相关文章

Java并发编程第11讲——AQS设计思想及核心源码分析

Java并发包&#xff08;JUC&#xff09;中提供了很多并发工具&#xff0c;比如前面介绍过的ReentrantLock、ReentrantReadWriteLock、CountDownLatch、Semaphore、FutureTask等锁或者同步部件&#xff0c;它们的实现都用到了一个共同的基类——AbstractQueuedSynchronizer&…

element分页

获取数据信息&#xff0c;这是表格和分页内容 <el-col :span"24"><div class"grid-content bg-purple-dark"><el-table :data"tableData" stripe style"width: 100%"><el-table-column prop"xuhao" l…

WorkPlus:企业数字化底座,统一数字化办公入口

在企业数字化转型的潮流下&#xff0c;统一入口的移动数字化底座成为了企业提高工作效率和迈向数字化时代的关键要素。在这个领域&#xff0c;WorkPlus凭借其独特的定位和功能&#xff0c;成为了企业微信、钉钉、飞书等类似产品中的完美选择&#xff0c;为企业提供了统一入口的…

旋转矩阵-数学理论

目录 概述 一、固定旋转&#xff08;Fix Angles&#xff09; 二、欧拉旋转&#xff08;Euler Angle&#xff09; 三、旋转矩阵小结 四、参考 概述 旋转矩阵是姿态的一种数学表达方式&#xff0c;或者笼统说变换矩阵是一种抽象的数学变量。其抽象在于当你看到…

【深度学习】卷积层填充和步幅以及其大小关系

参考链接 【深度学习】&#xff1a;《PyTorch入门到项目实战》卷积神经网络2-2&#xff1a;填充(padding)和步幅(stride) 一、卷积 卷积是在深度学习中的一种重要操作&#xff0c;但实际上它是一种互相关操作&#xff0c;&#xff0c;首先我们来了解一下二维互相关&#xff…

Redis主从配置和哨兵模式

主从简介 1、主从 – 用法 像MySQL一样&#xff0c;redis是支持主从同步的&#xff0c;而且也支持一主多从以及多级从结构。 主从结构&#xff0c;一是为了纯粹的冗余备份&#xff0c;二是为了提升读性能&#xff0c;比如很消耗性能的SORT就可以由从服务器来承担。 redis的主…

oracle-sql语句解析类型

语句执行过程&#xff1a;1. 解析(将sql解析成执行计划) 2.执行 3.获取数据(fetch) 1. shared pool的组成。 share pool是一块内存池。 主要分成3块空间。free&#xff0c; library(库缓存&#xff0c;缓存sql以及执行计划)&#xff0c;row cache(字典缓存) select * from v…

云贝教育 |【PostgreSQL PGCA】pg15安装pg_hint_plan扩展包

pg15安装pg_hint_plan扩展包 pg当前是支持HINT固定执行计划&#xff0c;需要通过扩展包pg_hint_plan来实现 一、扩展包下载&#xff1a; Releases ossc-db/pg_hint_plan GitHub 二、选择v15版本 pg_hint_plan15 1.5.1 is released pg_hint_plan15 1.5.1 is released. This…

SLAM从入门到精通(安全避障)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 在工业生产中&#xff0c;安全是底线。没有安全性的技术&#xff0c;一般也不会在工业生产中进行部署、使用。对于slam来说&#xff0c;同样也是这…

机器人制作开源方案 | 行星探测车实现云端控制

1. 功能描述 本文示例所实现的功能为&#xff1a;手机端控制R261样机行星探测车的显示屏显示心形图。 2. 电子硬件 在这个示例中&#xff0c;我们采用了以下硬件&#xff0c;请大家参考&#xff1a; 3. 功能实现 编程环境&#xff1a;Milxy 0.999及以上版本 下面提供一个手机…

TerraNoise for 3dMax插件教程

TerraNoise for 3dMax插件教程 创建地形&#xff1a; - 从列表中拖动生成器并将其放到画布上 - 将导出器拖放到画布上 - 通过将一条线从生成器黄色输出“拖动”到导出器绿色输入来连接 2 个组件 - 单击导出器中的“无”按钮用于选择输出名称和格式&#xff08;导出 terragen 地…

Python装饰器的艺术

文章目录 装饰器基础示例代码:执行结果:参数化装饰器示例代码:执行结果:类装饰器示例代码:执行结果:装饰器的堆栈示例代码:执行结果:在Python中,装饰器是一种非常强大的特性,允许开发人员以一种干净、可读性强的方式修改或增强函数和方法。以下是一个关于Python装饰器…

聊聊定时器 setTimeout 的时延问题

给大家推荐一个实用面试题库 1、前端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;web前端面试题库 全局的 setTimeout() 方法设置一个定时器&#xff0c;一旦定时器到期&#xff0c;就会执行一个函数或指定的代码片…

【开源】前后端分离后台管理系统

系统环境 JDK 17Maven 3.0.0MySQL 5.7.0Spring Boot 3.0.10 演示 橙子官网&#xff1a;http://hengzq.cnGitHub 代码下载&#xff1a;https://github.com/mmd0308/orangeGitee 代码下载&#xff1a;https://gitee.com/hengzq/orange 项目截图

Algorithms_LSM树(Log-Structured Merge Tree)

文章目录 引言1. LSM树的原理1.1 写入日志1.2 内存组件1.3 磁盘上的SSTable文件1.4 合并操作 2. LSM树的使用场景2.1 分布式数据库系统2.2 云存储系统2.3 日志和时间序列数据2.4 数据备份和归档 LSM VS BTree结论 引言 在当今信息时代&#xff0c;数据的存储和管理变得越来越重…

信息系统项目管理师第四版--风险管理--可搜索可编辑版本

1. 对目录进行了细化&#xff0c;从目录可以清晰看到每个过程的输入输出工具技术都有哪些&#xff0c;直接点击目录就可以跳转到相应的章节&#xff0c;免得自己在pdf文件里面一直翻一直翻&#xff0c;非常方便。是可编辑版本&#xff0c;还可以进行全文搜索。 下图是目录的部…

LoRaWAN物联网架构

与其他网关一样&#xff0c;LoRaWAN网关也需要在规定的工作频率上工作。在特定国家部署网关时&#xff0c;必须要遵循LoRa联盟的区域参数。不过&#xff0c;它是没有通用频率的&#xff0c;每个国家对使用非授权MHZ频段都有不同的法律规定。例如&#xff0c;中国的LoRaWAN频段是…

Centos7下搭建H3C log服务器

一、rsyslogH3C 安装rsyslog服务器 关闭防火墙 systemctl stop firewalld && systemctl disable firewalld关闭selinux sed -i s/enforcing/disabled/ /etc/selinux/config && setenforce 0centos7服务器&#xff0c;通过yum安装rsyslog yum -y install r…

如何用devtools快速开发一个R语言包?

如何用devtools快速开发一个R语言包&#xff1f; 1. 准备工作2. 如何完整开发一个R包3. 初始化新包4. 启用Git仓库5. 按照目标实现一个函数6. 在.R文件夹下创建文件并保存代码7. 函数测试8. 阶段性总结9. 时不时地检查完整工作状态10. 编辑DESCRIPTION文件11. 配置许可证12. 配…

vmware 启动qnx 环境下载配置

SDP QNX 安装手册 http://www.qnx.com/developers/docs/7.0.0/#com.qnx.doc.qnxsdp.quickstart/topic/install_host.html qnxsdp-6.5.0-x86-201007091524-nto.iso https://dude6.com/q/a/4990303.html http://www.qnx.com/download/feature.html?programid23647 vmarea …