当前位置: 首页 > news >正文

Java_Swing程序设计

swing组件允许编程人员在跨平台时指定统一的外观和风格。

Swing组件通常被称为轻量级组件,

JFrame在程序中的语法格式:

JFrame jf=new JFrame(title);

Container container=jf.getContentPane();

jf:JFrame类的对象 container:Container类的对象。

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

 public JFrame()  创建一个初始不可见、没有标题的新窗体

public JFrame(String title) 在实例化该Frame对象时可以创建一个不可见但具有标题的窗体。

setVisible(true) 方法使窗体可见

setDefaultCloseOperation()方法关闭窗体。

DO_NOTHING_ON_CLOSE 什么都不做就将窗体关闭

DISPOSE_ON_CLOSE 代表任何注册监听程序对象后会自动隐藏并释放窗体

HIDE_ON_CLOSE 隐藏窗口的默认关闭

EXIT_ON_CLOSE 退出应用程序默认窗口关闭

JDialog窗体

JDialog窗体是Swing组件中的对话框,它继承了AWT组件中的Java.awt.Dialog类。

其功能是从一个窗体中弹出另一个窗体,在使用时也使用调用getContentPane()方法将窗体转换为容器,然后在容器中设置窗体的特性。

public JDialog() 创建一个没有标题和父窗体的对话框。

public JDialog(Frame f) : 创建一个指定父窗体的对话框,但该窗体没有标题。

public JDialog(Frame f, boolean model): 创建一个指定类型的对话框,并指定父窗体,但该窗体没有指定标题。

public JDialog(Frame f,boolean model): 创建一个指定类型的对话框,并指定父窗体,但该窗体没有指定标题。

public JDialog(Frame f,String title,boolean model):创建一个指定标题、窗体和模式的对话框。

JFrame类中的两种构造方法分别为无参的构造方法和有参的构造方法。

第一种形式的构造方法可以创建一个初始不可见、没有标题的新窗体,第二种形式的构造方法在实例化该JFrame对象时可以创建一个不可见但具有标题的窗体。

package Procedures;import javax.swing.*;
import java.awt.*;public class Example1 extends JFrame{public void CreateJFrame(String title){JFrame jf=new JFrame(title); //实例化一个JFrame对象Container container= jf.getContentPane(); //获取一个容器JLabel jl=new JLabel("这是一个JFrame窗体"); //创建一个JLable标签jl.setHorizontalAlignment(SwingConstants.CENTER); //使标签上的文字居中container.add(jl); //将标签添加到容器中container.setBackground(Color.white); //设置容器的背景颜色jf.setVisible(true); //使窗体可视jf.setSize(200,150); //设置窗体大小jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); //设置窗体关闭方式}public static void main(String args[]){ //在主方法中调用CreateJFrame()方法new Example1().CreateJFrame("创建一个JFrame窗体");}}

setSize(int x,int y)方法设置窗体大小,其中x,y代表窗体的宽与高。

创建窗体后,给予窗体一个关闭方式,可以调用setDefaultCloseOperation()方法。Java常用窗体关闭方法有以下4种。

DO_NOTHING_ON_CLOSE  代表什么都不做就将窗体关闭

DISPOSE_ON_CLOSE  任何注册监听程序对象后会自动隐藏并释放窗体

HIDE_ON_CLOSE  EXIT_ON_CLOSE 隐藏窗口的默认窗口关闭

EXIT_ON_CLOSE 退出应用程序默认窗口关闭

JDialog窗体

JDialog窗体是Swing组件中的对话框,他继承了AWT组件中的java.awt.Dialog类

JDialog窗体的功能是从一个窗体中弹出另一个窗体,它与JFrame窗体类似,在使用时也需要调用getContentPane()方法将窗体转换为容器,然后在容器中设置窗体的特性。

public JDialog(): 创建一个没有标题和父窗体的对话框。

public JDialog(Frame f):创建一个指定父窗体的对话框,但该窗体没有标题。

public JDialog(Frame f,boolean model):创建一个指定类型的对话框,并指定父窗体,但该窗体没有指定标题。

public JDialog(Frame f,String title):创建一个指定标题和父窗体的对话框。

public JDialog(Frame f,String title,boolean model):创建一个指定标题、窗体和模式的对话框)

标签组件与图标

在Swing中显示文本或提示信息的方法是使用标签,它支持文本字符串和图标。在应用程序的用户界面中,一个简短的文本标签可以使用户知道这些组件的目的,所以标签在Swing中是比较常用的组件。

标签的使用

标签由JLable类定义,它的父类为JComponent类。

标签可以显示一行只读文本、一个图像或带图像的文本,它并不能产生任何类型的事件,只是简单的显示文本和图片,但是可以使用标签的特性指定标签上文本的对其方式。

JLabel类提供了多种构造方法,可以创建多种标签,如显示只有文本的标签、只有图标的标签或包含文本与图标的标签。JLabel类常用的几个构造方法如下。

public JLabel(): 创建一个不带图标和文本的JLabel对象。

public JLabel(Icon icon): 创建一个带图标的JLabel对象。

public JLabel(Icon icon,int aligment): 创建一个带图标的JLabel对象,并设置图标水平对齐方式。

public JLabel(String text,int aligment): 创建一个带文本的JLabel对象,并设置文字水平对齐方式。

public JLabel(String text,Icon icon,int aligment): 创建一个带文本、带图标的JLabel对象,并设置标签内容的水平对齐方式。

图标的使用

Swing中的图标可以放置在按钮、标签等组件上,用于描述组件的用途。图标可以用Java支持的图片文件类型进行创建,也可以使用java.awt.Graphics类提供的功能方法来创建。

创建图表

在Swing中通过Icon接口来创建图标,可以在创建时给定图标的大小、颜色等特性。如果使用Icon接口,必须实现Icon接口中的3个方法:

public int  getIconHeight()

public int getIconWidth()

public void paintIcon(Component arg0,Graphics arg1,int arg2,int arg3)

getIconHeigth()与getIconWidth()方法用于获取图标的长与宽,paintIcon()方法用于实现在指定坐标位置画图。

public ImageIcon(): 该构造方法构建一个通用的ImageIcon对象,当真正需要设置图片时再使用ImageIcon对象调用setImage(Image image)方法;来操作。

public ImageIcon(Image image,String description): 除了可以从图片源创建图标之外,还可以为这个图标添加简短的描述,但这个描述不会在图标上显示,可以使用getDescripion()这个方法获取这个描述。

public ImageIcon(URL url):该构造方法利用位于计算机网络上的图像创建图标

常用布局管理器:

布局管理器提供了Swing组件安排、展示在容器中的方法及基本的布局功能。

Swing提供的常用布局管理器包括流布局管理器、边界布局管理器和网格布局管理器。

绝对布局:

在Swing中,除了使用布局管理器外还可以使用绝对布局。绝对布局,就是硬性指定组件在容器中的位置和大小,可以使用绝对坐标的方式来指定组件的位置。

使用绝对布局的步骤如下:

1.使用Container.setLayout(null)方法取消布局管理器。

2.使用Component.setBounds()方法设置每一个组件的大小与位置。

流布局管理器

流布局管理器是最基本的布局管理器,在整个容器中的布局正如其名,像流水一样从左到右摆放组件,直到占据这一行的所有空间。然后再向下移动一行,组件默认居中排列。

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

public FlowLayout()

public FlowLayout(int alignment)

public FlowLayout(int aligment,int horizGap,int vertGrap)

alignment参数表示流布局管理器后组件在每一行的具体摆放位置。

FlowLayout.LEFT=0   行组件左对齐排列

FlowLayout.CENTER=1; 

FlowLayout.RIGHT=2; 行组件被指定为右对齐排列

horizFGap与vertGap两个参数分别以像素为单位指定组件之间的水平间隔与垂直间隔。

边界布局管理器

在默认不指定窗体布局的情况下,Swing组件的布局模式是边界布局管理器。

边界布局管理器的功能不止如此,边界布局管理器还可以将容器划分为东、南、西、北、中5个区域,可以将组件加入到者5个区域中。


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 {//定义组件摆放位置的数组String[] border= {BorderLayout.CENTER,BorderLayout.NORTH,BorderLayout.SOUTH,BorderLayout.WEST,BorderLayout.EAST};String[] buttonName= {"center button","north button","south button","west button","east button"};public BorderLayoutPosition() {setTitle("这个窗体使用边界布局管理器");Container c=getContentPane(); //定义一个容器setLayout(new BorderLayout()); //设置容器为容器为边界布局管理器for(int i=0;i<border.length;i++) {//在容器中添加按钮,设置按钮布局c.add(border[i],new JButton(buttonName[i]));}setSize(350,200); //设置窗体大小setVisible(true); //设置窗体可见//设置窗体关闭方式setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);}public static void main(String[] args) {new BorderLayoutPosition();}}

add()方法提供在容器中添加组件的功能,并同时设置组建的摆放位置。

网格布局管理器

网络布局管理器将容器划分为网格,所以组件可以按行和列进行排列。

在网格布局管理器中,每一个组件的大小都相同,并且网格中空格的个数由网格的行数和列数决定。

组件从网格的左上角开始,按照从左到右、从上到下的顺序加入到网格中,而且每一个组件都会填满整个网格,改变窗体的大小,组件的大小也会改变。

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

public GridLayout(int rows,int columns)

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

rows与columns参数代表网格的行数与列数,这两个参数只有一个参数可以为0,代表一行或一列可以排列任意多个组件;参数horizGap与vertGap指定网格之间的距离,其中horizGap参数指定网格之间的水平距离,vertGap参数指定网络之间的垂直距离。

网格组布局管理器

由GridBagLayout类实现的布局管理器称为网格组布局管理器,

它实现了一个动态的矩形网格,可以根据实际需要随意增减矩形网格的行数和列数。

向GridBagLyout类管理的容器中添加组件时,需要为每个组件创建一个与之关联的GridBagConstants类的对象,通过该类的属性可以设置组件的布局信息。 

通过GridBagLayout类实现的矩形网格的绘制方向由容器决定。 如果容器的方向是从左到右,则位于矩形网格左上角的单元格的列索引为0,此时组件左上角的点为起始点;如果容器的方向是从右到左,则位于矩形网格右上角的单元格的列索引为0,此时组件右上角的点为起始点。

详细讲解GridBagLayout类中各个属性的功能和使用方法,以及在使用过程中需要注意的一些事项。

1.grid和gridy属性

这两个属性用来设置组件起始点所在单元格的索引值。需要注意的是,属性gridx设置的是x轴,所以它表示的是组件起始点所在列的索引;属性gridy设置的是Y轴的索引值,所以它表示的是组件起始点所在行的索引。     

     

gridwidth和gridheight属性

这两个属性用来设置组件占用网格组的行数和列数。属性gridwidth为组件占用网格组的列数,也可以理解为以单元格为单位组件的宽度:属性gridheight为组件占用网格组的行数,也可以理解为以单元格为单位组件的高度。

anchor属性

属性anchor用来设置组件在其所在显示区域的显示位置。通常将显示区域从方向上划分为9个方位。

fill属性

属性fill用来设置组件的填充方式。当单元格显示区域的面积大于组件面积,或者开一个组件占用多个单元格时,显示组件可能不必占用所有显示区域,在这种情况下可以通过fill属性设置组件的填充方式。可以利用4个静态常量设置该属性,默认情况下是将该属性设置为静态常量NONE,既不调整组件大小至填满显示区域;如果该属性设置为静态常量HORIZONTAL,表示只调整组件水平方向的大小(组件宽度)至填满显示区域;如果将该属性设置为静态常量VERTICAL,表示只调整组件垂直方向的大小(组件高度)至填满显示区域;如果将该属性设置为静态常量BOTH,则表示同时调整组件的宽度和高度至填满显示区域。

         inserts属性

属性insets用来设置组件四周与单元格边缘之间的最小距离。该属性的类型为Insets.Insets类仅有一个构造方法Insets(int top,int left,int bottom,int right),它的4个入口参数以此为组件上方、左侧、下方和右侧的最小距离,单位为像素。   

         ipadx和ipady属性

这两个属性用来修改组件的首选大小,属性ipadx用来修改组建的宽度,属性ipady用来修改组件的高度,如果为正数,则在首选大小的基础上增加指定的宽度和高度,如果为负数,则在首选大小的基础上减小指定的宽度和高度。 

weightx和weighty属性

这两个属性用来设置网格组的每一行和每一列对额外空间的分布方式。在不设置属性weightx和weighty的情况下,当窗体调整到足够大时,组件全部聚集在窗体的中央,在组件四周出现了大片的额外空间,为了避免,可以通过这两个属性设置网格组的每行每列对额外空间的分布方式。如果在该行中设置了多个weighty属性,则取它们的最大值为该行的分布方式。

在设置网格组的每一行和每一列对额外空间的分布方式时,建议只设置第一行的weightx属性和第一列的weighty属性,这样会方便前期调试和后期维护。

网格组的行和列对额外空间的分布方式完全相同,下面以网格组的行为为例详细讲解对额外空间的分布方式。网格组布局管理器首先计算出每一行的分布方式,即获取每一行的weighty属性的最大值,然后计算每个最大值占所有最大值总和的百分比,最后将额外空间的相应百分比分配给对应行。

在设置网格组的每一行和每一列对额外空间的分布方式时,建议为各个属性按百分比取值。

常用面板

面板也是一个Swing容器,它可以作为容器容纳其他组件,但它也必须被添加到其他容器中。Swing中常用的面板包括JPanel面板以及JScrollPane面板。

JPanel面板

JPanel面板可以聚集一些组件来布局。面板也是一种容器,因为它继承自java.awt.Container类。

JScrollPane面板

在设置面板时,可能会遇到在一个较小的容器窗体中显示一个较大部分的内容的情况,这时可以使用JScrllPane面板。此面板是带滚动条的面板,它也是一种容器,但是只能放置一个组件,并且不可以使用布局管理器。如果需要在JScrollPane面板中放置多个组件,需要将多个组件放置在JPanel面板上,然后将JPanel面板作为一个整体组件添加在JScrollPane组件上。

按钮组件

按钮在Swing组件中是较为常见的组件,用于触发特定动作。Swing中提供多种按钮,包括提交按钮、复选框、单选按钮等,这些按钮都是从AbstarctButon类中继承而来的。

提交按钮组件

Swing中的提交按钮(JButton)由JButton对象表示,其构造方法主要有以下几种方式:

public JButton()  //可以生成不带任何文本组件的对象和图标,能在以后使用相应方法为按钮设置指定的文本和图标

public JButton(String text) 

public JButton(Icon icon)

public JButton(String text,Icon icon)

通过使用上述构造方法,在Swing按钮上不仅能显示文本标签,还可以显示图标。

单选按钮组件

单选按钮(JRadioButton)显示一个圆形图标,并且在该图标旁放置一些说明性文字,而在应用程序中,一般将多个单选按钮放置在按钮组中,使这些单选按钮表现出某种功能,当用户选中某个单选按钮后,按钮中其他按钮将被自动取消。控制按钮的诸多方法都是从AbstractButton类中的方法

1.单选按钮

可以使用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)。

在初始化单选按钮时,可以同时设置单选按钮的图标、文字以及默认是否被选中等属性。

按钮组

在Swing中存在一个ButtonGroup类,用于产生按钮组,如果希望将所有的单选按钮放置在按钮组中,需要实例化一个JRadioButton对象,并使用该对象调用add()方法添加单选按钮。

JRadioButton jr1=new JRadioButton();
JRadioButton jr2=new JRadioButton();
JRadioBUtton jr3=new JRadioButton();
ButtonGroup group=new ButtonGroup();
group.add(jr1);
group.add(jr2);
group.add(jr2);
group.add(jr3);

复选框组件

复选框在Swing组件中的使用也非常广泛,它具有一个方块图标,外加一段描述性文字。与单选按钮唯一不同的是,复选框可以进行多选设置,每一个复选框都提供选中与不选中两种状态。

复选框用JCheckBox类对象表示

JcheckBox的常用构造方法如下:

public JCheckBox()

public JCheckBox(Icon icon,boolean checked)

public JCheckBox(String text,boolean checked)

列表组件

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

下拉列表框组件

JComboBox类

Swing中的下拉列表框不仅可以供用户从中选择项目,也提供编辑项目中内容的功能。

下拉列表框是一个带条状的显示区,它具有下拉功能。在下拉列表框的右方存在一个倒三角形的按钮,当用户单击该按钮时,下拉列表框中的项目将会以列表形式显示出来。

Swing中的下拉列表框使用JComboBox类对象来表示,它是javax.swing.JComponent类的子类。它的常用构造方法如下:

public JComboBox()

public JComboBox(ComboBoxModeldataModel)

public JComboBox(Object[] arrayData)

public JComboBox(Vector vector)

在初始化下拉列表框时,可以选择同时下拉列表框中的项目内容,也可以在程序中使用其他方法设置下拉列表框中的内容。

JComboBox模型

在开发程序中,一般将下拉列表框中的项目封装为ComboBoxModel的情况比较多。ComboBoxModel为接口,它代表一般模型,可以自定义一个类实现该接口,然后再初始化JComboBoxModel接口类型,但是必须实现以下两种方法:

public void setSelectedItem(Object item)

public ObjectgetSelectedItem()

其中setSelectedItem()方法用于设置下拉列标框中的选中项,getSelectedItem()方法用于返回下拉列表框中的选中项。

getSize():返回列表的长度

getElementAt(int index):返回指定索引处的值

列表框组件

列表框与下拉列表框的区别不仅表现在外观上,当激活下拉列表框时,还会出现下拉列表框中的内容,;但列表框只是在窗体上占据固定的大小,如果需要列表框具有滚动效果,可以将列表框放入滚动面板中。

Swing中使用JList类对象来表示列表框,下面列举几个常用的构造方法。

public void JList()

public void JList(Object[] listData)

public void JList(Vector listData)

public void JList(ListModel dataModel)

存在一个没有此参数的构造方法,可以通过在初始化列表框后使用setListData()方法对列表框进行设置。设置的方式由3种类型,包括数组、Vector类型和ListModel没模型。

当使用数组作为构造方法的参数时,首先需要创建列表项目的数组,然后再利用构造方法来初始化列表框。

使用数组作为初始化列表框的参数

String contents={"列表1“,"列表2“,"列表3”,"列表4“};

JList jl=new JList(contents);

使用Vector类型数据作为初始化列表框的参数

Vector contents=new Vector();

JList jl=new JList(contents);

JList jl=new JList(contents);

contents.add("列表1”);

contents.add("列表2");

使用ListModel模型为参数,需要创建ListModel对象。ListModel是Swing包中的一个接口它提供了获取列表框属性的方法。通常情况下,为了使用户不完全实现ListModel接口中的方法,通常先自定义一个类继承实现该接口的抽象类AbstractListModel。在这个类中提供了getElementAt()与getSize()方法,其中getElementAt()方法代表根据项目的索引获取列表框中的值,而getSize()方法用于获取列表框中的项目个数。

public class JListTest extends JFrame {public JListTest() {Container cp=getContentPane();cp.setLayout(null);JList<String> jl=new JList<>(new MyListModel()); //JDK7新特性JScrollPane js=new JScrollPane(jl);js.setBounds(10,10,100,100);cp.add(js);setTitle("在这个窗体中使用了列表框");setSize(200,150);setVisible(true);setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);}public static void main(String[] args) {JListTest a=new JListTest();}
}
class MyListModel extends AbstractListModel<String>{private static final long serialVersionUID=1L;private String[] contents= {"列表1","列表2","列表3","列表4","列表5","列表6"};public String getElementAt(int x) {if(x<contents.length) {return contents[x];}elsereturn null;}public int getSize() {return contents.length;}
}

       使用DefaultListModel类创建列表框,该类扩展了AbstractListModel类,也可以通过DefaultListModel对象向上转型为ListModel接口初始化列表框,同时DefaultListMoel类提供了addElement()方法实现将内容添加到列表框中。

使用DefaultListModel类创建列表框

final String[] flavors={"列表1","列表2","列表3","列表4","列表5","列表6"};
fianl DefaultListModel iItems=new DefaultListModel();
final JList Ist=new JList(Items); //实例化JList对象
for(int i=0;i<4;i++){iltems.addElement(flavors[i]); //为模型增加内容
}

         文本组件

文本组件在实际项目中使用最为广泛,尤其是文本框与密码框组件。通过文本组件可以很轻松的处理单行文字、多行文字、口令字段。

文本框组件

文本框用来显示或编辑一个单行文本,在Swing中通过java.swing.JTextField类对象创建,该类继承了javax.swing.text.JTextComponent类,下面列举了一些创建文本框常用的构造方法。

public JTextField()

public JTextField(String text)

public JTextField(int fieldeidth)

public JTextField(String text,int fieldwidth)

public JTextField(Document docModel,String text,int fieldWidth)

通过在初始化文本框时设置文本框的默认文字、文本框的长度。

密码框组件

  密码框与文本框的定义与用法基本相同,唯一不同的是密码框将用户输入的字符串以某种符号进行加密,密码框对象是通过javax.swing.JPasswordField类来创建的,JPasswordField类的构造方法与JTextField类的构造方法非常相似。

public JPasswordField()

public JPasswordField(String text)

public JPasswordField(int fieldwidth)

public JPasswordField(String text,int fieldwidth)

public JPasswordField(Document docModel,String text,int fieldWidth)

  在程序中定义密码框
JPasswordField jp=new JPasswordField(); jp.setEchoChar('#'); //设置回显字符

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

  文本域组件

Swing中任何一个文本区域都是JTextArea类型的对象。JTextArea常用的构造方法如下:

public JTextArea()

public JTexArea(String text)

public JTextArea(int rows,int columns)

public JTextArea(Document doc)

public JTextArea(Document doc,String Text,int rows,int columns)

上述构造方法可以在初始化文本域时提供默认文本以及文本域的长与宽     

JTextArea类中存在一个setLineWrap()方法,该方法用于设置文本域是否可以自动换行。如果将该方法的参数设置为true,文本域将自动换行,否则不自动换行。

常用事件监听器

监听事件简介

在Swing事件模型中由3个分离的对象完成对事件的处理,分别为事件源、事件以及监听程序。事件源触发一个事件,它被一个或多个“监听器"接收,监听器负责处理事件。

所谓事件监听器,实质上就是一个”实现特定类型监听器接口"的类对象。事件几乎都以对象来表示,它是某种事件类的对象,事件源(如按钮)会在用户做出相应的动作(如按钮被按下)时产生事件对象,如动作事件对应ActionEvent类对象,同时要编写一个监听器的类必须实现相应的接口,如ActionEvent类对应的是ActionListener接口,需要获取某个事件对象必须实现相应的接口,同时需要将接口中的方法一一实现。最后事件源(按钮)调用相应的方法加载这个"实现特定类型监听器接口"的类对象,所有的事件源都可以为组件添加或移除相应的事件监听器。

动作事件监听器

动作事件监听器是Swing中比较常用的事件监听器,很多组件的动作都会使用它监听,如按钮被单击。   

     

一般情况下,为事件源做监听事件应使用匿名类形式。

焦点事件监听器

焦点事件监听器在实际项目开发中应用也比较广泛,如将光标焦点离开一个文本框时需要弹出一个对话框,或将焦点返回给该文本框等。

                                            

相关文章:

Java_Swing程序设计

swing组件允许编程人员在跨平台时指定统一的外观和风格。 Swing组件通常被称为轻量级组件&#xff0c; JFrame在程序中的语法格式&#xff1a; JFrame jfnew JFrame(title); Container containerjf.getContentPane(); jf:JFrame类的对象 container:Container类的对象。 J…...

ZeroBind:DTI零样本预测器

现有的药物-靶点相互作用&#xff08;DTI&#xff09;预测方法通常无法很好地推广到新的&#xff08;unseen&#xff09;蛋白质和药物。 在这项研究中&#xff0c;作者提出了一种具有子图匹配功能的蛋白质特异性元学习框架 ZeroBind&#xff0c;用于根据其结构预测蛋白质-药物相…...

Win10子系统Ubuntu实战(一)

在 Windows 10 中安装 Ubuntu 子系统&#xff08;Windows Subsystem for Linux&#xff0c;简称 WSL&#xff09;有几个主要的用途和好处&#xff1a;Linux 环境的支持、跨平台开发、命令行工具、测试和验证、教育用途。总体而言&#xff0c;WSL 提供了一种将 Windows 和 Linux…...

[足式机器人]Part3 机构运动学与动力学分析与建模 Ch00-2(3) 质量刚体的在坐标系下运动

本文仅供学习使用&#xff0c;总结很多本现有讲述运动学或动力学书籍后的总结&#xff0c;从矢量的角度进行分析&#xff0c;方法比较传统&#xff0c;但更易理解&#xff0c;并且现有的看似抽象方法&#xff0c;两者本质上并无不同。 2024年底本人学位论文发表后方可摘抄 若有…...

云计算历年题整理

目录 第一大题 第一大题HA计算 给出计算连接到EC2节点的EBS的高可用性(HA)的数学公式&#xff0c;如场景中所述&#xff1b;计算EC2节点上的EBS的高可用性(HA)&#xff1b;场景中80%的AWS EC2节点用于并行处理&#xff0c;总共有100个虚拟中央处理单元(vCPUs)用于处理数据&a…...

2401vim,vim重要修改更新大全

原文 2023 更好的UTF-16支持 添加strutf16len()和utf16idx(),并在byteidx(),byteidxcomp()和charidx()中添加utf16标志,在内置.txt文档中. 添加crypymethod xchacha20v2 与xchacha20基本相同,但更能抵御libsodium的变化. 2022 添加"smoothscroll" 用鼠标滚动…...

安卓多用户管理之Userinfo

目录 前言Userinfo----用户信息1.1 属性1.2 构造器1.3 信息的判断及获取方法1.3.1 获取默认用户类型1.3.2 基础信息判断 1.4 序列化部分 总结 前言 UserManagerService内部类UserData中有一个Userinfo类型的info参数&#xff0c;在UserData中并未有所体现&#xff0c;但在后续…...

JavaScript-流程控制-笔记

1.流程语句的分类 顺序结构 分支结构 循环结构 2.if语句 1&#xff09;if结构 if( 条件 ){ // 条件成立执行的代码 } 2&#xff09;if else 结构 if( 条件 ){ // 条件成立执行的代码 }else{ // 条件不成…...

springboot + vue3实现增删改查分页操作

springboot vue3实现增删改查分页操作 环境最终实现效果实现功能主要框架代码实现数据库后端前端 注意事项 环境 jdk17 vue3 最终实现效果 实现功能 添加用户&#xff0c;禁用&#xff0c;启用&#xff0c;删除&#xff0c;编辑&#xff0c;分页查询 主要框架 后端 spri…...

leetcode01-重复的子字符串

题目链接&#xff1a;459. 重复的子字符串 - 力扣&#xff08;LeetCode&#xff09; 一般思路&#xff1a; 如果存在k是S的字串&#xff0c;记k的长度为s&#xff0c;S的长度为n&#xff0c;则一定有n是s的倍数&#xff0c;且满足对于j∈[s,n]&#xff0c;一定存在s[j]s[j-s]; …...

目标检测数据集 - 夜间行人检测数据集下载「包含VOC、COCO、YOLO三种格式」

数据集介绍&#xff1a;夜间、低光行人检测数据集&#xff0c;真实场景高质量图片数据&#xff0c;涉及场景丰富&#xff0c;比如夜间街景行人、夜间道路行人、夜间遮挡行人、夜间严重遮挡行人数据&#xff1b;适用实际项目应用&#xff1a;公共场所监控场景下夜间行人检测项目…...

【YOLO系列】 YOLOv4思想详解

前言 以下内容仅为个人在学习人工智能中所记录的笔记&#xff0c;先将目标识别算法yolo系列的整理出来分享给大家&#xff0c;供大家学习参考。 本文未对论文逐句逐段翻译&#xff0c;而是阅读全文后&#xff0c;总结出的YOLO V4论文的思路与实现路径。 若文中内容有误&#xf…...

查询json数组

步骤一&#xff1a;创建表格 首先&#xff0c;我们需要创建一个表格来存储包含JSON对象数组的数据。可以使用以下代码创建一个名为 my_table 的表格&#xff1a; CREATE TABLE my_table (id INT PRIMARY KEY AUTO_INCREMENT,json_data JSON ); 上述代码创建了一个包含两个列的…...

Docker mysql 主从复制

目录 介绍&#xff1a;为什么需要进行mysql的主从复制 主从复制原理&#xff1a; ✨主从环境搭建 主从一般面试问题&#xff1a; 介绍&#xff1a;为什么需要进行mysql的主从复制 在实际的生产中&#xff0c;为了解决Mysql的单点故障已经提高MySQL的整体服务性能&#xff…...

第7章-第1节-Java中的异常处理

1、异常Exception概述&#xff1a; 1&#xff09;、异常的概念&#xff1a; 现实生活中万物在发展和变化会出现各种各样不正常的现象。 例如&#xff1a;人的成长过程中会生病。 实际工作中&#xff0c;遇到的情况不可能是非常完美的。 比如&#xff1a;你写的某个模块&…...

使用python生成一个月度账单消费金额柱状图表

阿里云月度账单根据月份、消费金额&#xff08;可开票&#xff09;生成一个柱状图表 import pandas as pd import matplotlib.pyplot as plt import os# 设置中文字体 plt.rcParams[font.sans-serif] [SimHei] # 用于显示中文的宋体# 获取当前工作目录下所有CSV文件 csv_fil…...

将一个独立的磁盘添加到已有的 `/` 分区

将一个独立的磁盘添加到已有的 / 分区是比较复杂的&#xff0c;因为 / 分区已经是一个逻辑卷&#xff08;LVM&#xff09;。在这种情况下&#xff0c;可以扩展现有的 LVM 体积组&#xff08;Volume Group&#xff09;&#xff0c;然后扩展 / 逻辑卷&#xff08;Logical Volume&…...

AI智能电销器人需要注意哪些问题呢

随着科技的不断发展&#xff0c;人们出行变得越来越方便&#xff0c;市面上很多产品也越来越智能化&#xff0c;高科技的产品不仅改变了我们的生活方式而且也改变了企业的竞争方式&#xff0c;很多的企业尤其是电销行业中的大佬己经意识到了AI电销机器人的好处&#xff0c;因此…...

呼叫中心研究分析:到2027年市场规模预计将达4966亿美元

由于业务运营中以客户为中心的方法的兴起&#xff0c;呼叫中心市场近年来出现了显着增长。随着对客户满意度的日益重视&#xff0c;全球对呼叫中心服务的需求猛增。在本次分析中&#xff0c;我们将从全球和中国的角度审视呼叫中心市场的发展趋势。全球市场&#xff1a; 到 2027…...

工业数据采集分析——工厂大脑 提升综合经济效益

随着企业对数字化的认知越来越清晰&#xff0c;对工业数智化的战略越来越明确&#xff0c;企业的诉求也在发生转变。中国的工业企业经过近几十年的发展&#xff0c;自动化、信息化&#xff0c;以及一些基础的数据系统建设在不同的行业中慢慢地推进。近几年&#xff0c;工业企业…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下&#xff1a; struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽&#xff0c;大家好&#xff0c;我是左手python&#xff01; Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库&#xff0c;用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

微信小程序云开发平台MySQL的连接方式

注&#xff1a;微信小程序云开发平台指的是腾讯云开发 先给结论&#xff1a;微信小程序云开发平台的MySQL&#xff0c;无法通过获取数据库连接信息的方式进行连接&#xff0c;连接只能通过云开发的SDK连接&#xff0c;具体要参考官方文档&#xff1a; 为什么&#xff1f; 因为…...

网络编程(UDP编程)

思维导图 UDP基础编程&#xff08;单播&#xff09; 1.流程图 服务器&#xff1a;短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode&#xff1a; 2.利用 authorizationCode 获取 accessToken&#xff1a;文档中心 3.获取手机&#xff1a;文档中心 4.获取昵称头像&#xff1a;文档中心 首先创建 request 若要获取手机号&#xff0c;scope必填 phone&#xff0c;permissions 必填 …...

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...

绕过 Xcode?使用 Appuploader和主流工具实现 iOS 上架自动化

iOS 应用的发布流程一直是开发链路中最“苹果味”的环节&#xff1a;强依赖 Xcode、必须使用 macOS、各种证书和描述文件配置……对很多跨平台开发者来说&#xff0c;这一套流程并不友好。 特别是当你的项目主要在 Windows 或 Linux 下开发&#xff08;例如 Flutter、React Na…...

相关类相关的可视化图像总结

目录 一、散点图 二、气泡图 三、相关图 四、热力图 五、二维密度图 六、多模态二维密度图 七、雷达图 八、桑基图 九、总结 一、散点图 特点 通过点的位置展示两个连续变量之间的关系&#xff0c;可直观判断线性相关、非线性相关或无相关关系&#xff0c;点的分布密…...