《Java程序设计项目案例化教程》课件第6章-Java图形用户界面.ppt

上传人(卖家):momomo 文档编号:4325080 上传时间:2022-11-29 格式:PPT 页数:56 大小:853KB
下载 相关 举报
《Java程序设计项目案例化教程》课件第6章-Java图形用户界面.ppt_第1页
第1页 / 共56页
《Java程序设计项目案例化教程》课件第6章-Java图形用户界面.ppt_第2页
第2页 / 共56页
《Java程序设计项目案例化教程》课件第6章-Java图形用户界面.ppt_第3页
第3页 / 共56页
《Java程序设计项目案例化教程》课件第6章-Java图形用户界面.ppt_第4页
第4页 / 共56页
《Java程序设计项目案例化教程》课件第6章-Java图形用户界面.ppt_第5页
第5页 / 共56页
点击查看更多>>
资源描述

1、Java面向对象程序设计第第6章章 Java图形用户界面图形用户界面教学内容掌握AWT抽象窗口工具的一些和简单使用掌握窗体的多种布局设计的简单使用掌握Swing GUI工具包的使用掌握图形用户界面的事件处理的简单使用理解事件适配器的原理以及简单的使用AWTAWT(Abstract Window Toolkit)抽象窗口工具包,是API为Java程序提供的创建图形用户界面GUI(Graphics User Interface图形用户界面)的工具集,该包包含了很多类和接口,用于Java Application的GUI编程。使用AWT的类和接口一般在java.awt包及其子包中,AWT包含两个核心类

2、Container(容器)和Component(组件)类。其类的层次结构如图6.1所示:容器和组件容器Container是用来组织和容纳其他界面成份和元素的组件,Java提供了相应的容器类,例如框架(JFrmae/Frame)、面板(JPanel/Panel)等类。组件Component是图形用户界面的基本单位,里面不再包含其他成份。组件是一个可以以图形化的方式显示在屏幕上并能与用户进行交互的对象,例如一个按钮、一个标签等。组件不能独立显示出来,必须将组件放在一定的容器中才可以显示出来。有两种常用的Container:Window:其对象表示自由停泊的顶级窗口Panel:其对象可作为容纳其他C

3、omponent对象,不能独立存在,必须被添加到其他Container中(如Window或Applet)Frame类Frame类是window的子类,由Frame或其子类创建的对象为一个窗体。1、Frame类的常用构造方法如表6.1所示:表6.1构造方法主要功能()构造一个最初不可见的 Frame 新实例(title)构造一个新的、最初不可见的、具有指定标题的 Frame 对象 1、Frame类的常用方法如表6.2所示:表6.2方法主要功能public void setBounds(int x,int y,int width,int height)设置窗体的位置和大小。由 x 和 y 指定窗体

4、左上角的相对于父窗体的位置,由 width 和 height 指定窗体的大小public void setSize(int width,int height)设置窗体的大小public void setLocation(int x,int y)设置窗体的位置public void setTitle(title)设置窗体的标题public void setBackground(c)设置窗体的背景颜色public void setResizable(boolean resizable)设置此窗体是否可由用户调整大小,resizable-如果此窗体是可调整大小的,则为 true;否则为 falsep

5、ublic void setVisible(boolean b)根据参数 b 的值显示或隐藏此窗体【例6-1】:通过案例来掌握Frame的使用:基本窗口的显示import java.awt.Color;import java.awt.Frame;public class Demo6_01 public static void main(String args)Frame f=new Frame(My First TestFrame);f.setLocation(300,300);f.setSize(170,100);f.setBackground(Color.blue);f.setResiza

6、ble(false);f.setVisible(true);程序运行的结果:该窗体左上角的位置离它的父窗体左边、上边的坐标点是(300,300)。【例6-2】:通过案例来掌握Frame的使用:显示多个不同背景颜色的窗体。import java.awt.Color;import java.awt.Frame;class MultiFrame extends Framestatic int id=0;MultiFrame(int x,int y,int w,int h,Color color)super(MultiFrame +(+id);setBackground(color);setLayou

7、t(null);setBounds(x,y,w,h);setVisible(true);public class Demo6_02 public static void main(String args)MultiFrame frame1=new MultiFrame(100,100,200,200,Color.MAGENTA);MultiFrame frame2=new MultiFrame(300,100,200,200,Color.GREEN);MultiFrame frame3=new MultiFrame(100,300,200,200,Color.YELLOW);MultiFram

8、e frame4=new MultiFrame(300,300,200,200,Color.BLUE);程序运行的结果:Panel类Panel类是Container的子类,Panel对象可以看成可以容纳Component的空间。1、Panel类的常用构造方法如表6.3所示:表6.32、Panel类的常用方法(从父类继承过来的方法)如表6.4所示:表6.4构造方法主要功能()使用默认的布局管理器创建新面板(layout)创建具有指定布局管理器的新面板方法主要功能public void setBounds(int x,int y,int width,int height)设置Panel的位置和大小

9、。由 x 和 y 指定窗体左上角的相对于父窗体的位置,由 width 和 height 指定窗体的大小public void setSize(int width,int height)设置Panel的大小public void setLocation(int x,int y)设置Panel的位置public void setBackground(c)设置Panel的背景颜色public void setLayout(mgr)设置Panel的布局管理器【例6-3】:通过案例来掌握Panel的基础用法。import java.awt.Color;import java.awt.Frame;impo

10、rt java.awt.Panel;public class Demo6_03 public static void main(String args)Frame f=new Frame(Java Frame with Panel);Panel p=new Panel(null);f.setLayout(null);f.setBounds(300,300,500,500);f.setBackground(new Color(0,0,102);p.setBounds(50,50,400,400);p.setBackground(new Color(204,204,255);f.add(p);f.

11、setVisible(true);程序运行的结果:【例6-4】:通过案例来掌握Panel的使用:显示多个不同背景颜色的Panel。import java.awt.Color;import java.awt.Frame;import java.awt.Panel;class MultiPanel extends Frame private Panel p1,p2,p3,p4;MultiPanel(String s,int x,int y,int w,int h)super(s);setLayout(null);p1=new Panel(null);p2=new Panel(null);p3=ne

12、w Panel(null);p4=new Panel(null);p1.setBounds(0,0,w/2,h/2);p2.setBounds(0,h/2,w/2,h/2);p3.setBounds(w/2,0,w/2,h/2);p4.setBounds(w/2,h/2,w/2,h/2);p1.setBackground(Color.BLACK);p2.setBackground(Color.BLUE);p3.setBackground(Color.YELLOW);p4.setBackground(Color.RED);add(p1);add(p2);add(p3);add(p4);setBo

13、unds(x,y,w,h);setVisible(true);public class Demo6_04 public static void main(String args)new MultiPanel(FrameWithMultiPanel,200,200,300,200);程序运行的结果:【例6-5】:通过案例来掌握Frame和Panel的使用:Panel显示在Frame中间且占Frame大小的一半。import java.awt.Color;import java.awt.Frame;import java.awt.Panel;class FrameWithPanel extends

14、 Frame private Panel p;FrameWithPanel(int x,int y,int w,int h,Color c)super(FrameWithPanel);setLayout(null);setBounds(x,y,w,h);setBackground(c);p=new Panel(null);p.setBounds(w/4,h/4,w/2,h/2);p.setBackground(Color.RED);add(p);setVisible(true);public class Demo6_05 public static void main(String args)

15、new FrameWithPanel(200,200,300,200,Color.BLUE);程序运行结果:布局设计Container可以存放组件,组件的排列方式一般情况下有两种,一种是人工排列,一种是利用Java提供的布局管理器对这些组件进行排列,布局管理器直接设置这些组件的位置、大小和排列顺序,不同的布局管理器采用不同的算法和策略。Java提供的布局管理器主要有5中:FlowLayout、BorderLayout、GridLayout、CardLayout、GridBagLayout布局。FlowLayout流布局,是Panel、Applet的默认布局,该布局对组件从上到下,从左到右进行布

16、置,一行排满后换行。不改变组件的大小,按组件的原有尺寸显示组件,可设置不同的组件的间距、行距以及对齐方式。FlowLayout默认的对齐方式是居中对齐。FlowLayout的构造方法如表6.5所示:表6.5FlowLayout布局构造方法主要功能()构造一个新的 FlowLayout,它是居中对齐的,默认的水平和垂直间隙是 5 个单位(int align)构造一个新的 FlowLayout,它具有指定的对齐方式,默认的水平和垂直间隙是 5 个单位(int align,int hgap,int vgap)创建一个新的流布局管理器,它具有指定的对齐方式以及指定的水平和垂直间隙【例6-6】:通过案例

17、来掌握FlowLayout布局管理器的使用:import java.awt.Button;import java.awt.FlowLayout;import java.awt.Frame;public class Demo6_06 public static void main(String args)Frame f=new Frame(Flow Layout);Button Open=new Button(Open);Button Continue=new Button(Continue);Button Close=new Button(Close);Button Exit=new Butt

18、on(Exit);f.setLayout(new FlowLayout(FlowLayout.LEFT);f.add(Open);f.add(Continue);f.add(Close);f.add(Exit);f.setSize(100,100);f.setVisible(true);程序运行的结果:如果改变Frame的大小,Frame中的组件的布局也会随之改变BorderLayout是Window类及其子类的默认布局管理器,它将容器分为5个部分,分别命名为EAST、WEST、SOUTH、NORTH和CENTER。每个部分只能放一个组件,如果希望在某个部分放置多个组件,可以先放一个容器对象,

19、然后在容器里面放置多个组件和容器。BorderLayout类提供了的构造方法如表6.6所示:表6.61、如不指定组件的加入部位,则默认加入到CENTER区,每个区域只能加入一个组件,如加入多个,则先前加入的会被覆盖。2、BorderLayout型布局容器尺寸缩放原则:北、南两个区域在水平方向缩放。东、西两个区域在垂直方向缩放。中部区域可在两个方法上都缩放。BorderLayout布局构造方法主要功能()构造一个组件之间没有间距的新边框布局。(int hgap,int vgap)构造一个具有指定组件间距的边框布局。【例6-7】:通过案例来掌握BorderLayout布局管理器的使用:import

20、 java.awt.BorderLayout;import java.awt.Button;import java.awt.Frame;public class Demo6_07 public static void main(String args)Frame borderLayoutFrame;borderLayoutFrame=new Frame(BorderLayout);Button EAST=new Button(EAST);Button SOUTH=new Button(SOUTH);Button WEST=new Button(WEST);Button NORTH=new Bu

21、tton(NORTH);Button CENTER=new Button(CENTER);borderLayoutFrame.add(EAST,BorderLayout.EAST);borderLayoutFrame.add(SOUTH,BorderLayout.SOUTH);borderLayoutFrame.add(WEST,BorderLayout.WEST);borderLayoutFrame.add(NORTH,BorderLayout.NORTH);borderLayoutFrame.add(CENTER,BorderLayout.CENTER);borderLayoutFrame

22、.setSize(200,200);borderLayoutFrame.setVisible(true);程序运行的结果:GridLayout布局GridLayout布局管理器是将空间划分成规则的矩形网格,每个单元格区域大小相等。组件被添加到每个单元格中,先从左到右填满一行后换行,再从上到下。GridLayout类的构造方法如表5-2所示:表6.7构造方法主要功能()创建具有默认值的网格布局,即每个组件占据一行一列。(int rows,int cols)创建具有指定行数和列数的网格布局。(int rows,int cols,int hgap,int vgap)创建具有指定行数和列数的网格布局。

23、【例6-8】:通过案例来掌握GridLayout布局管理器的使用:import java.awt.*;public class Demo6_08 public static void main(String args)Frame frame=new Frame(GridLayout);Button btn1=new Button(btn1);Button btn2=new Button(btn2);Button btn3=new Button(btn3);Button btn4=new Button(btn4);Button btn5=new Button(btn5);Button btn6=

24、new Button(btn6);frame.setLayout(new GridLayout(2,3);frame.add(btn1);frame.add(btn2);frame.add(btn3);frame.add(btn4);frame.add(btn5);frame.add(btn6);frame.pack();frame.setSize(300,150);frame.setVisible(true);程序运行的结果:CardLayout布局CardLayout布局CardLayout类的常用方法:表6.8方法主要功能public CardLayout()创建一个间距大小为0的新卡片

25、布局public CardLayout(int h,int v)创建一个具有指定水平间距和垂直间距的新卡片布局。水平间距置于左右边缘。垂直间距置于上下边缘public void first(Container p)翻转到容器的第一张卡片public void last(Contain p)翻转到容器的最后一张卡片public void next(Contain p)翻转到指定容器的下一张卡片public void previous(Containp)翻转到指定容器的前一张卡片public void show(Contain p,String name)翻转到使用addLayoutCompone

26、nt添加到此布局的具有指定name的组件【例6-7】:通过案例来掌握CardLayout布局import java.awt.BorderLayout;import java.awt.CardLayout;import java.awt.Color;import java.awt.Insets;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;imp

27、ort javax.swing.JPanel;public class Demo6_09 extends JFrame private JPanel pane=null;private JPanel p=null;private CardLayout card=null;private JButton button_1=null;private JButton button_2=null;private JButton b_1=null,b_2=null,b_3=null;private JPanel p_1=null,p_2=null,p_3=null;public Demo6_09()su

28、per(CardLayout Test);card=new CardLayout(5,5);pane=new JPanel(card);p=new JPanel();button_1=new JButton();b_1=new JButton(1);b_2=new JButton(2);b_3=new JButton(3);b_1.setMargin(new Insets(2,2,2,2);b_2.setMargin(new Insets(2,2,2,2);b_3.setMargin(new Insets(2,2,2,2);p.add(button_1);p.add(b_1);p.add(b_

29、2);p.add(b_3);p.add(button_2);p_1=new JPanel();p_2=new JPanel();p_3=new JPanel();p_1.setBackground(Color.GREEN);p_2.setBackground(Color.BLUE);p_3.setBackground(Color.RED);p_1.add(new JLabel(JPanel_1);p_2.add(new JLabel(JPanel_2);p_3.add(new JLabel(JPanel_3);pane.add(p_1,p1);pane.add(p_2,p2);pane.add

30、(p_3,p3);button_1.addActionListener(new ActionListener()/上一步的按钮动作 public void actionPerformed(ActionEvent e)card.previous(pane););button_2.addActionListener(new ActionListener()/下一步的按钮动作 public void actionPerformed(ActionEvent e)card.next(pane););b_1.addActionListener(new ActionListener()/直接翻转到p_1 p

31、ublic void actionPerformed(ActionEvent e)card.show(pane,p1););b_2.addActionListener(new ActionListener()/直接翻转到p_2 public void actionPerformed(ActionEvent e)card.show(pane,p2););b_3.addActionListener(new ActionListener()/直接翻转到p_3 public void actionPerformed(ActionEvent e)card.show(pane,p3););this.get

32、ContentPane().add(pane);this.getContentPane().add(p,BorderLayout.SOUTH);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setSize(300,200);this.setVisible(true);public static void main(String args)new Demo6_09();程序运行的结果:wing Java Swing是JDK 1.2后版本引入的第二代GUI类库,具有更好的可移植性,提供了更完整的组件,增加了许多功能和特性。Swin

33、g可以扩展和简化跨平台应用程序的开发。Swing系列由17个包组成,每个包都有其独特的用途。正如您将在短期课程中学到的一样,这些软件包使您可以轻松整合各种具有高度复杂性和用户友好性的应用程序。Swing的特点:1、纯JAVA实现轻量级,不依赖操作系统,具有更好的跨平台性,2、采用MVC设计思想3、采用要插入式外观感觉,在同一平台可有不同的外观展示4、建立在AWT基础之上,不能完全舍弃AWTSwing基本组件组件分为容器类和非容器类,容器类是指那些能放入其它组件的组件,而非容器类是指 JButton Label等。容器类分为顶层容器和非顶层容器。顶层容器是指有独立窗口诸如Window这样的,而W

34、indwo最常用的子类是JFrame和JDialog顶层容器可以独立存在,包括JFrame、JDialog、JApplet、JWindow(JDialog不可以独立存在)。JFrame是大多数应用程序的基本窗口,有边框、标题和按钮,允许程序员把其他组件添加到它里面,把它们组织起来,并把它们呈现给用户。中间容器不能独立存在,必须放在顶层容器内,且能够容纳其他控件,包括JPanel、JScrollPane、JToolBar、JSplitPane、JTabbedPane。用法都是New出对应的面板,可以向其中添加组件,之后放到JFrame中即可,这里不再做一一截图。表6.9主要中间容器及功能方法主要

35、功能JPanel最普通的面板,没有特殊功能,主要用来容纳其它控件JScrollPane滚动面板,即带有长宽滚动条,主要用来容纳大型控件JToolBar工具栏面板,包含图标按钮。可以在程序的主窗口之外浮动或是托拽JSplitPane分割式面板JTabbedPane选项卡面板【例6-10】:通过案例来掌握JComboBox类import java.awt.Container;import java.awt.Dimension;import java.awt.FlowLayout;import javax.swing.AbstractListModel;import javax.swing.Comb

36、oBoxModel;import javax.swing.JComboBox;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.WindowConstants;public class Demo6_10 public static void main(String args)new JComboBoxDemo();class JComboBoxDemo extendsJFrame JComboBox jc=new JComboBox(new ComboBoxDemo();JLabel jl=new JL

37、abel(您最喜欢的图书类型:);public JComboBoxDemo()setSize(new Dimension(250,350);setVisible(true);setTitle(下拉列表框案列);setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);Container cp=getContentPane();cp.setLayout(new FlowLayout();cp.add(jl);cp.add(jc);class ComboBoxDemo extends AbstractListModel implement

38、s ComboBoxModel String selecteditem=null;String test=文学,政治,经济,科技,医学;public Object getElementAt(int index)return testindex;public int getSize()return test.length;public void setSelectedItem(Object item)selecteditem=(String)item;public Object getSelectedItem()return selecteditem;public int getIndex()f

39、or(int i=0;i test.length;i+)if(testi.equals(getSelectedItem()return i;break;return 0;程序运行的结果:事件处理图形界面上的事件是指在某个组件上发生用户操作。例如,用户单击了界面上的某个按钮,就说在这个按钮上发生了事件,这个按钮对象就是事件的击发者。对事件作监视的对象称为监视器,监视器提供响应事件的处理方法。为了让监视器与事件对象关联起来,需要对事件对象作监视器注册,告诉系统事件对象的监视器。其整个处理过程是这样的,事件源可以注册事件监听器对象,并可以向事件监听器对象发送事件对象。事件发生后,事件源将事件对象发给

40、已经注册的所有事件监听器。监听器对象随后会根据事件对象内的相应方法响应这个事件。Java事件处理三要素:1、事件源(Event Source):即事件发生的场所,就是指各个组件,如按钮等,点击按钮其实就是组件上发生的一个事件;2、事件(Event):事件封装了组件上发生的事情,比如按钮单击、按钮松开等等;3、事件监听器(Event Listener):负责监听事件源上发生的特定类型的事件,当事件到来时还必须负责处理相应的事件;事件处理机制在 java 语言中,为了便于系统管理事件,也为了便于程序作监视器注册,系统将事件分类,称为事件类型。系统为每个事件类型提供一个接口。要作为监视器对象的类必须

41、实现相应的接口,提供接口规定的响应事件的方法。以程序响应按钮事件为例,JButton类对象button可以是一个事件的激发者。当用户点击界面中与 button对应的按钮时,button对象就会产生一个ActionEvent类型的事件。如果监视器对象是obj,对象obj的类是Obj,则类Obj必须实现AWT中的 ActionListener接口,实现监视按钮事件的actionPerformed方法。button对象必须用addActionListener方法注册它的监视器obj。程序运行时,当用户点击 button 对象对应的按钮时,系统就将一个ActionEvent对象从事件激发对象传递到监视

42、器。ActionEvent对象包含的信息包括事件发生在哪一个按钮,以及有关该事件的其他信息。实际事件发生时,通常会产生一系列的事件,例如,用户点击按钮,会产生 ChangeEvent 事件提示光标到了按钮上,接着又是一个 ChangeEvent 事件表示鼠标被按下,然后是 ActionEvent 事件表示鼠标已松开,但光标依旧在按钮上,最后是ChangeEvent事件,表示光标已离开按钮。但是应用程序通常只处理按下按钮的完整动作的单个ActionEvent 事件。每个事件类型都有一个相应的监视器接口,下面列出了每个接口的方法。实现监视器接口的类必须实现所有定义在接口中的方法。外部类实现监听器【

43、例6-11】通过案例来掌握外部类实现监听器import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Demo6_11 extends JFrame JButton button1,button2;JPanel pane1,pane2,p1,p2;CardLayout card1=new CardLayout();Demo6_11()this.setTitle(外部类实现事件监听);this.setBounds(200,200,300,200);this.setDefaultCloseOperation

44、(JFrame.EXIT_ON_CLOSE);this.setVisible(true);init();public void init()p1=new JPanel();p1.add(new JLabel(第一个面板);p1.setBackground(Color.red);p2=new JPanel();p2.add(new JLabel(第二个面板);p2.setBackground(Color.green);pane1=new JPanel(card1);pane1.add(红色,p1);pane1.add(绿色,p2);button1=new JButton(红色);button2=

45、new JButton(绿色);pane2=new JPanel();pane2.add(button1);pane2.add(button2);this.add(pane1,BorderLayout.CENTER);this.add(pane2,BorderLayout.SOUTH);button1.addActionListener(new ColorEvent(card1,pane1);button2.addActionListener(new ColorEvent(card1,pane1);public static void main(String args)new Demo6_11

46、();class ColorEvent implements ActionListener CardLayout card1=new CardLayout();JPanel pane1=new JPanel();ColorEvent(CardLayout card1,JPanel pane1)this.card1=card1;this.pane1=pane1;public void actionPerformed(ActionEvent e)if(e.getActionCommand().equals(红色)card1.show(pane1,红色);elseif(e.getActionComm

47、and().equals(绿色)card1.show(pane1,绿色);程序运行的结果类本身实现监听器【例6-12】通过案例来掌握类本身实现监听器import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Demo6_12 extends JFrame implements ActionListener JButton button1,button2;JPanel pane1,pane2,p1,p2;CardLayout card1=new CardLayout();Demo6_12()this.se

48、tTitle(自身类实现事件监听);this.setBounds(200,200,300,200);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);init();public void init()p1=new JPanel();p1.add(new JLabel(第一个面板);p1.setBackground(Color.red);p2=new JPanel();p2.add(new JLabel(第二个面板);p2.setBackground(Color.green);pane1=new J

49、Panel(card1);pane1.add(红色,p1);pane1.add(绿色,p2);button1=new JButton(红色);button2=new JButton(绿色);pane2=new JPanel();pane2.add(button1);pane2.add(button2);this.add(pane1,BorderLayout.CENTER);this.add(pane2,BorderLayout.SOUTH);button1.addActionListener(new ColorEvent(card1,pane1);button2.addActionListen

50、er(new ColorEvent(card1,pane1);public void actionPerformed(ActionEvent e)if(e.getActionCommand().equals(红色)card1.show(pane1,红色);elseif(e.getActionCommand().equals(绿色)card1.show(pane1,绿色);public static void main(String args)new Demo6_12();程序运行的结果:运行结果与上个案例相同 内部类实现监听器【例6-13】通过案例来掌握内部类实现监听器import java.

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 大学
版权提示 | 免责声明

1,本文(《Java程序设计项目案例化教程》课件第6章-Java图形用户界面.ppt)为本站会员(momomo)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|