组件和事件处理办法_第1页
组件和事件处理办法_第2页
组件和事件处理办法_第3页
组件和事件处理办法_第4页
组件和事件处理办法_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

组件和事件处理办法9.1图形用户界面概述一、Java语言平台无关性组件的实现

图形用户界面GUI可以通过键盘或鼠标来响应用户的操作,是当今流行的操作系统界面。

Java语言为了适应发展趋势,也具有开发图形化的用户界面的功能。

Java语言自身的特点要求其图形用户界面具有平台无关性。9.1图形用户界面概述早期的Java版本JDK1.0和JDK1.1采用的是AWT组件(抽象窗口工具)。特点是简单、易于理解。AWT是一组Java类,此组Java类允许创建图形用户界面(GUI)。AWT组件中采用了一种称为对等体(peer)的机制,每个组件都有一个对应的对等体,是用具体的操作系统平台的开发工具开发的,负责在AWT组件与本地平台之间进行交互。同一个AWT组件在不同的平台上显示出不同的外观,种类不可能太多,这大大限制了Java语言程序的使用和推广。9.1图形用户界面概述

Java1.2版,图形用户界面功能被大幅度地扩展,形成了称为Java基础类库(JavaFoundationClass,JFC)的一整套API集合,包括以下5个部分:

⑴抽象窗口工具;⑵Swing图形界面类库;⑶支持二维图形的类库(Java2D);⑷支持拖放的类库(DragandDrop);⑸支持易用性的类库(Accessibility)。

主要的部分是Swing图形界面类库。9.1图形用户界面概述Swing组件是用纯Java实现的,在不同的平台上其表现是一致的。这是它与AWT组件的最大区别.Swing组件实现了平台无关的Java语言。Swing组件是AWT组件的扩展,它提供了许多新的图形用户界面组件。因为大部分AWT组件都在Swing组件中进行了重写,所以本章后面我们在介绍组件的时候将以Swing组件为主。Swing组件的类以字母“J”开头,除了保留有与AWT类似的组件之外,又增加了丰富的高层组件。javx.swing包中的体系结构ObjectComponentJFrameContainerWindowFrameDialogJDialogJTextJComboBoxJLabelJListJMenuBarJOptionPaneJPanelJScrollBarAbstractButtonJToggleButtonJMenuItemJButtonJCheckBoxJRadioButtonJComponentJMenu注意:JComponent和Componet类之间的关系9.4Swing组件的使用一、组件的分类

Swing组件从功能上可以分成如下几类:⒈顶层容器:即JFrame、JApplet、JDialog、JWindow等四个重量级组件。基本的Swing组件(例如,JButton、JTextField等)不能直接添加在顶级容器内,需要一个内容面板Panel(普通容器)辅助。⒉普通容器(内容面板):使用在各种不同的情况下的中间容器,如JPanel、JScrollPane、JSplitPane、JTabbedPane等,一般可以被添加到顶层容器中。9.4Swing组件的使用一、组件的分类⒊特殊容器:在GUI上起特殊作用的中间层容器,如JInternalFrame、JLayeredPane、JRootPane、JToolBar、JOptionPane等。⒋基本组件:可以实现人机交互的组件,如JButton、JToggleButton、JRadioButton、JCheckBox、JComboBox、JList、JSlider、JScrollBar等,通常是界面上的主要角色。9.4Swing组件的使用⒌不可编辑信息显示:向用户显示不可编辑信息的组件,如JLabel、JProgressBar、JToolTip等,大多是起一个信息提示的作用。⒍可编辑的格式化信息的显示:向用户显示能被编辑的格式化信息的组件,如JTable,JTree,JColorChooser和J,用来实现用户与机器之间的信息交互工作。SwingGUI框架你好,世界菜单栏顶级容器FrameGUI组件GUI组件内容面板Panel普通容器基本的Swing应用程序importjavax.swing.*;publicclassHelloSwing{publicstaticvoidmain(String[]args){JFrameframe=newJFrame("HelloSwing");JLabellabel=newJLabel("你好,Swing");frame.getContentPane().add(label);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(300,200);frame.setVisible(true);}}

导入必要的包,一般还需导入:

importjava.awt.event.*;

importjava.awt.*;设置一个顶级容器创建一个Swing组件将组件添加到容器的内容面板实现了在单击“关闭”按钮时,可以关闭窗口。另外一种程序写法,推荐。importjava.awt.*;//使用Container类的对象最为上转型对象importjavax.swing.*;

publicclassHelloSwingextendsJFrame{ privateJLabellabel;

publicHelloSwing()//框架子类HelloSwing的构造函数

{ super("HelloSwing-2");//调用父类JFrame的构造函数

Containercon=getContentPane();//获得当前容器的内容面板

label=newJLabel("你好,Swing"); con.add(label); setSize(300,200); setVisible(true); }

publicstaticvoidmain(String[]args) { HelloSwingapp=newHelloSwing(); app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }}另外一种程序写法,极为推荐。classHelloSwingextendsJFrame{ privateJLabellabel;

publicHelloSwing()//框架子类HelloSwing的构造函数

{ super("HelloSwing-2");//调用父类JFrame的构造函数

Containercon=getContentPane();//获得当前容器的内容面板

label=newJLabel("你好,Swing"); con.add(label); setSize(300,200); setVisible(true); }} publicclassApp{ publicstaticvoidmain(String[]args) { HelloSwingapp=newHelloSwing(); app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }}JFrame类是放置其他

Swing组件的顶级容器JFrame组件用于在Swing程序中创建窗体它的构造函数:JFrame()JFrame(StringTitle)组件必须添加至内容面板Panel,而不是直接添加至JFrame对象,示例:

JLabelb=newJLabel();frame.getContentPane().add(b);JFrame类JFrame获得内容面板Panel的方式方法1:getContentPane()获得框架的默认内容面板方法2:创建内容面板(普通容器)对象b,使用setContentPane(b)方法设置.新的JFrame对象是一个外部尺寸为0的不可见的窗口框架,所以在程序中要用setSize()方法或pack()方法设定显示尺寸,用setVisible()方法将可见性设为真或用show()方法显示之。在JFrame对象实例中可能发生窗口事件(例如,鼠标、键盘点击)。§9.2.1JFrame常用方法publicvoidsetBounds(inta,intb,intwidth,intheight

设置窗口的初始位置是(a,b),即距屏幕左面a个像素、距屏幕上方b个像素;窗口的宽是width,高是height。publicvoidsetSize(intwidth,intheight)

设置窗口的大小。publicvoidsetLocation(intx,inty)

设置窗口的位置,默认位置是(0,0)。publicvoidsetVisible(booleanb)

设置窗口是否可见,窗口默认是不可见的。publicvoidsetResizable(booleanb)设置窗口是否可调整大小,默认可调整大小。publicvoiddispose()

撤消当前窗口,并释放当前窗口所使用的资源。publicvoidsetExtendedState(intstate)

设置窗口的扩展状态.publicvoidsetDefaultCloseOperation(intoperation)

该方法用来设置单击窗体右上角的关闭图标后,程序会做出怎样的处理。实验任务1:阅读教材例子1:编写程序:JPanel类JPanel是其中最有代表性、最为常用的普通容器,它只是在界面上圈定一个矩形范围而无明显标记,主要的用途是作内容面板或者为了更好地实现布局效果而作为中间容器。JPanel一般不处理事件。JPanel的缺省布局为FlowLayout(组件的排列方式)JPanel具有下列构造函数:JPanel()JPanel(LayoutManagerlm)其它普通容器类——JScrollPane我们可以把一个组件放到一个滚动窗格中,然后通过滚动条来观察这个组件。例如,JTextArea组件不自带滚动条,因此我们就需要把文本区放到一个滚动条容器面板中,实现带滚动条的文本域。JScorollPane的构造方法 JScorollPane(componentc)举例:JTextAreat=newJTextArea(5,20);//构造5行,20列的文本域组件getContentPane().add(newJScrorollPane(t));//把组件放在滚动条容器面板后,再添加到框架Frame的默认内容面板。菜单显示项目列表,指明各种任务。选择或单击某个选项时会打开另一个列表或子菜单。Swing菜单由菜单栏、菜单和菜单项构成。菜单栏是所有菜单和菜单项的根9.2.2菜单JMenuBar组件(类)JMenuBar是可通过JFrame、JWindow或JInternalFrame的根窗格添加至容器的组件。由多个JMenu组成,每个JMenu在JMenubar中都表示为字符串,例如“文件”菜单。主要函数:构造函数:JMenuBar()将JMenu加入JMenubar的方法

publicJMenuadd(JMenu

c)JFrame类有一个将菜单条放置到窗口中的方法:

publicvoidsetJMenuBar(JMenuBarmenubar);

需要注意的是,只能向窗口添加一个菜单条。JMenu组件(类)JMenu在JMenuBar下以文本字符串形式显示,而在用户单击它时,则以弹出式菜单显示。JMenu类的主要方法有以下几种:JMenu(Strings)

建立一个指定标题菜单,标题由参数s确定。publicvoidadd(MenuItemitem)

向菜单增加由参数item指定的菜单项对象。publicvoidadd(Strings)

增加指定字符串表示的菜单项。publicJMenuItemgetItem(intn)

得到指定索引处的菜单选项。publicintgetItemCount()

得到菜单选项数目。publicvoidaddSeparator()

//添加一个分隔线到菜单中JMenuItem组件(类)JMenu或JPopupMenu中的一个组件,以文本字符串形式显示,可以具有图标JMenuItem的外观可以修改,如字体、颜色、背景、边框等除字符串外,在JMenuItem中还可以添加图标JMenuItem组件(类)

菜单项将被放在菜单里。JMenuItem类的主要方法有以下几种:JMenuItem(Strings)构造有标题的菜单JMenuItem(Stringtext,Iconicon)构造有标题和图标的菜单项publicvoidsetEnabled(booleanb):设置当前菜单项是否可被选择。publicStringgetLabel()

得到菜单选项的名字。

publicvoidsetAccelerator(KeyStrokekeyStroke)

为菜单项设置快捷键。实验任务2新建一个简单窗口对象。采用JMenuBar,JMenu,JMenuItem等类,为窗口添加如下的菜单。阅读分析题:例题2newImageIcon(“a.gif”)作为函数参数ImageIcon类的使用匿名对象KeyStroke类的使用9.3基本的控制组件1.JButton组件(类)JButton类允许用图标、字符串或两者同时构造一个按钮。构造函数如下:JButton()JButton(Iconicon):icon表示使用的图标JButton(Stringtext):text表示使用的字符串JButton(Stringtext,Iconicon)//Icon接口,它的对象能够引用任何实现该接口的子类,例如ImageIcon,位于javax.swing包内JPanel和JButton使用示例importjava.awt.*;importjavax.swing.*;classPanelDemoextendsJFrame{publicPanelDemo(Stringtitle){super(title); Containerc=getContentPane();JPanelcpane=newJPanel();Iconic=newImageIcon(“bug.gif”);//必须和.class文件位于同一目录

JButtonok=newJButton(“确定”,ic);cpane.add(ok); JButtoncancel=newJButton("取消");cpane.add(cancel);c.add(cpane,BorderLayout.SOUTH);//组件的布局方式

}publicstaticvoidmain(Stringargs[]){PanelDemopd=newPanelDemo("JPanel测试");pd.setSize(300,200);pd.setVisible(true);}}

9.3基本的控制组件2.JToggleButton组件(类)切换按钮JToggleButton是一种具有两种状态的的按钮,当它打开时就像一个保持在按下状态的按钮,当它关闭时看上去便和一般的按钮一样了,JToggleButton也可以设置文本和图像标签。构造函数参考JDK6API文档9.3基本的控制组件3.标签JLabel组件(类)它既可以显示文本也可以显示图像构造函数如下:JLabel(Iconicon):icon表示使用的图标JLabel(Stringtext):使用字符串作为标签JLabel(Stringtext,Iconicon,intalign):text表示使用的字符串;icon表示使用的图标;align表示水平对齐方式,其值可以为:LEFT、RIGHT、CENTER。…ImageIconicon=newImageIcon("Calv.gif");JLabelcalv_label=newJLabel("这是

Calvin",icon,

SwingConstants.LEFT);…JLabel类的常用方法setText(Stringtext);setIcon(Iconc);setHorizontalTextPosition(inttextpos)//设置标签的文本相对其图像的水平位置,取值为SwingConstants.LEFT,…..CENTER,….RIGHTsetVerticalTextPosition(inttextpos)

//设置标签的文本相对其图像的垂直位置。

setToolTipText(Stringtext)

//设置图鼠标停留在Lable时,显示的提示字符串文本组件JtextComponent为所有Swing文本组件的根类JTextFieldJTextComponentJEditorPaneJTextAreaJTextPaneJPasswordField9.3基本的控制组件

4.文本框JTextField组件(类)JTextField组件允许输入或编辑单行文本此类的构造函数包括:JTextField()JTextField(Documentdoc,Stringtext,intcolumns)JTextField(intcolumns)JTextField(Stringtext)JTextField(Stringtext,intcolumns)…Containercon=getContentPane();con.setLayout(newFlowLayout());JLabeljl=newJLabel(“文本域”);con.add(jl);JTextFieldtf=newJTextField(20);con.add(tf);…JPasswordField类的使用与JTextField类似9.3基本的控制组件5.文本域——JTextArea组件(类)JTextArea组件用于接受来自用户的多行文本它可实现可滚动界面JTextArea组件可使用下列构造函数创建:JTextArea()JTextArea(introws,intcols)JTextArea(Stringtext)JTextArea(Stringtext,introws,intcols)JTextArea(Documentdoc)JTextArea(Documentdoc,Stringtext,introws,intcols)…JLabeljl=newJLabel(“文本区”);con.add(jl);JTextAreata=newJTextArea(5,10);con.add(ta);

…选择性输入为了简化表单填写过程,通常为用户提供多种可供选择的选项,而无需用户写出他们的响应。常用于选择性输入的组件有:复选框单选按钮列表框组合框9.3基本的控制组件6.复选框JCheckBox组件(类)复选框为用户提供一种二值的选项(选中、未选中)JCheckBox类具有下列构造函数:JCheckBox()JCheckBox(Iconicon)JCheckBox(Iconicon,booleanselected)JCheckBox(Stringtext)JCheckBox(Stringtext,booleanselected)JCheckBox(Stringtext,Iconicon)JCheckBox(Stringtext,Iconicon,booleanselected)9.3基本的控制组件6.单选按钮JRadioButton组件(类)单选按钮允许用户从多个选项中选择其中一个ButtonGroup用于在Swing中创建单选按钮组,加入该组的单选按钮成为一个整体。JRadioButton对象可使用下列构造函数创建:JRadioButton()JRadioButton(Iconicon)JRadioButton(Icon,booleanselected)JRadioButton(Stringtext)JRadioButton(Stringtext,booleanselected)JRadioButton(Stringtext,Iconicon)JRadioButton(Stringtext,Iconicon,booleanselected)JCheckBox和JRadioButton使用示例importjava.awt.*;importjavax.swing.*;classHobbyextendsJPanel{JCheckBoxc1=newJCheckBox("阅读",false);JCheckBoxc2=newJCheckBox("音乐",false);JCheckBoxc3=newJCheckBox("绘画",false);JRadioButtonrad1=newJRadioButton("大专");JRadioButtonrad2=newJRadioButton("本科");JRadioButtonrad3=newJRadioButton(“硕士”);ButtonGroupbg=newButtonGroup();JLabeljl=newJLabel("您有什么爱好?");JLabelj2=newJLabel("您的最高学历?");JButtonexitbtn=newJButton("退出");publicHobby(){//构造函数

bg.add(rad1);bg.add(rad2);bg.add(rad3);//添加按钮到组

setLayout(newGridLayout(9,1));add(jl);add(c1);add(c2);add(c3);add(j2);add(rad1);add(rad2);add(rad3);add(exitbtn);}}publicclassHobbytestextendsJFrame{Hobbytest()

{super();getContentPane().add(newHobby());setSize(300,200);setVisible(true);}publicstaticvoidmain(Stringargs[]){newHobbytest();}}9.3基本的控制组件8.列表JList组件(类)在可供选择的选项很多时,可向用户呈现一个列表来供他们选择JList组件依次排列项目列表,这些项目可以单选或多选JList类既可显示字符串,也可显示图标JList不支持双击JList构造函数publicJList():使用空模型构造JListpublicJList(ListModeldataModel):构造一个列表,用它显示指定模型中的元素。

publicJList(Object[]listData):构造一个列表以显示指定数组listData的元素。(常用)

JList不支持滚动。要启用滚动,可使用下列代码:

JScrollPanemyScrollPane=newJScrollPane(); myScrollPane.add(dataList);//dataList为列表框对象…Stringstars[]={"安东尼奥.班德拉斯","来昂纳多.迪卡普尼奥","桑德拉.布洛克","休.格兰特","朱莉亚.罗伯茨"};JListmoviestars=newJList(stars);…9.3基本的控制组件8.组合框JComboBox组件(类)文本域和下拉列表的组合在Swing中,组合框由JComboBox表示构造函数如下:publicJComboBox():此构造函数使用缺省数据模型创建JComboBoxpublicJComboBox(ComboBoxModelasModel):使用现有ComboBoxModel中的项目的组合框publicJComboBox(Object[]items):包含指定数组元素的组合框…Stringnames[]={"弗雷德里克.福西斯","约翰.克里沙姆","玛丽.希金斯.克拉克","帕特丽夏.康威尔"};JComboBoxauthors=newJComboBox(names);…组件的常见方法(自学)

JComponent类是所有组件的父类,介绍JComponent类的几个常用方法。组件都是矩形形状,组件本身有一个默认的坐标系,组件的左上角的坐标值是(0,0)。如果一个组件的宽是20(像素),高是10,那么,该坐标系中,x坐标的最大值是20;y坐标的最大值是10。如下图所示。

组件

组件上的坐标系组件的常见方法(自学)

参考JDK6API文档

1.组件的颜色publicvoidsetBackground(Colorc)设置组件的背景色。publicvoidsetForeground(Colorc)设置组件的前景色。publicColorgetBackground(Colorc)获取组件的背景色。publicColorgetForeground(Colorc)获取组件的前景色。上述方法中都涉及到Color类,Color类是java.awt包中的类,该类创建的对象称为颜色对象。用Color类的构造方法

publicColor(intred,intgreen,ingblue)

可以创建一个颜色对象,其中red、green、blue的取值在0到255之间。组件的常见方法(自学)2.组件透明组件默认是不透明的。

publicvoidsetOpaque(booleanisOpaque)

设置组件是否不透明,当参数isOpaque取false时组件被设置为透明,取值true时组件被设置为不透明。组件的常见方法(自学)3.组件的字体

publicvoidsetFont(Fontf)

组件调用该方法设置组件上的字体。例如,文本组件调用该方法可以设置文本组件中的字体。

publicFontgetFont(Fontf)

组件调用该方法获取组件上的字体。

上述方法中用到了java.awt包中的Font类,该类创建的对象称为字体对象。Font类的构造方法是:

publicFont(Stringname,intstyle,intsize);使用该构造方法可以创建字体对象,组件的常见方法(自学)

其中name是字体的名字,如果系统不支持字体的名字,将取默认的名字创建字体对象。

style决定字体的样式(粗体Font.BOLD,斜体Font.ITALIC),取值是一个整数。在创建字体对象时,应当给出一个合理的字体名字,也就是说,程序所在的计算机系统上有这样的字体名字。如果在创建字体对象时,没有给出一个合理的字体名字,那么该字体在特定平台的字体系统名称为默认名称。组件的常见方法(自学)4.组件的大小与位置

publicvoidsetSize(intwidth,intheight)

组件调用该方法设置组件的大小,参数width、height指定组件的宽度和高度。

publicvoidsetLocation(intx,inty)

组件调用该方法设置组件在容器中的位置,参数x,y是组件距容器的左边界x个像素,距容器的上边界y个像素。

publicDimensiongetSize()

组件调用该方法返回一个Dimension对象的引用,该对象实体中含有名字是width和height的成员变量,也就是当前组件的宽度和高度。组件的常见方法(自学)5.组件的激活与可见性

publicvoidsetEnabled(booleanb)

组件调用该方法可以设置组件是否可被激活,当参数b取值true时,组件可以被激活,当参数b取值false时,组件不可激活。默认情况下,组件是可以被激活的。

publicvoidsetVisible(boolean)

设置组件在该容器中的可见性,当参数b取值true时,组件在容器中可见,当参数b取值false时,组件在容器中不可见。除了Window型组件外,其它类型组件默认是可见的。JPanel类JPanel是其中最有代表性、最为常用的普通容器,它只是在界面上圈定一个矩形范围而无明显标记,主要的用途是作内容面板或者为了更好地实现布局效果而作为中间容器。JPanel一般不处理事件。JPanel的缺省布局为FlowLayout(组件的排列方式)JPanel具有下列构造函数:JPanel()JPanel(LayoutManagerlm)JScrollPane我们可以把一个组件放到一个滚动窗格中,然后通过滚动条来观察这个组件。例如,JTextArea组件不自带滚动条,因此我们就需要把文本区放到一个滚动条容器面板中,实现带滚动条的文本域。JScorollPane的构造方法 JScorollPane(componentc)举例:JTextAreat=newJTextArea(5,20);//构造5行,20列的文本域组件getContentPane().add(newJScrorollPane(t));//把组件放在滚动条容器面板后,再添加到框架Frame的默认内容面板。拆分窗格JSplitPane:窗格有两种类型:水平拆分和垂直拆分JSplitPane的两个常用的构造方法:

JSplitPane(inta,Componentb,Componentc)JSplitPane(inta,booleanb,Componentc,Componentd)注意:Frame类的add()成员函数,能够将内容面板对象加入到当前窗口中。内容面板对象中,可以使用add()成员函数加入任意组件对象,例如JList,JButton对象等。内容面板对象中,可以使用add()成员函数加入另外一个面板对象,实现复杂的组件排列。例如,将在一个JSplitPane对象中,加入2个JPane面板对象,然后,在面板对象中放置组件。9.3图形用户界面的构建与布局管理器

组件在容器中的定位与大小可以用两种方法确定:◆采用布局管理器来决定,是Java语言规定的方法,有很多优越性。Java语言目前提供有FlowLayout,BorderLayout,GridLayout,CardLayout,GridBagLayout等布局管理器。优先级高。◆采用Java语言提供的setLocation(),setSize(),setBounds()等方法成员,由程序员手工决定。会导致程序的系统相关性,但可以获得更令人满意的效果。优先级低。布局类型Java中的布局类型包括以下几种:FlowLayout(流式布局)BorderLayout(边界布局)GridLayout(网格布局)GridBagLayout(网格包布局)CardLayout(卡片布局)均属于java.awt包如何设置布局每个容器(Container对象)都有一个与它相关的缺省的布局管理器。JPanel的缺省布局是FlowLayoutJFrame的缺省布局是BorderLayout在没有设置新的布局前,在容器中添加组件都按照该容器的缺省布局排列。可以通过setLayout()方法为容器设置新的布局。

FlowLayout布局管理器是一种最简单的布局管理器,它的布局方式是将放入其中的组件按自左向右的顺序一排一排地依次放置,一排放完再放下一排,放入容器中的组件采用最佳尺寸(PreferredSize)来确定自身的尺寸。如果容器大小发生变化,则组件的位置会发生变化。在布局管理器中可将行对齐方式设为左对齐、居中对齐或右对齐,默认为居中对齐。FlowLayoutFlowLayout的构造函数有:FlowLayout():生成一个默认的流式布局FlowLayout(intalignment):可以设定每一行组件的对齐方式FlowLa

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论