收藏 分享(赏)

java项目实训文档.doc

上传人:精品资料 文档编号:10811270 上传时间:2020-01-10 格式:DOC 页数:10 大小:59KB
下载 相关 举报
java项目实训文档.doc_第1页
第1页 / 共10页
java项目实训文档.doc_第2页
第2页 / 共10页
java项目实训文档.doc_第3页
第3页 / 共10页
java项目实训文档.doc_第4页
第4页 / 共10页
java项目实训文档.doc_第5页
第5页 / 共10页
点击查看更多>>
资源描述

1、JAVA 项目实训文档项目名称:在 Netbeans 下实现记事本程序设计内容:仿照 windows 提供的记事本设计一个功能类似的程序具体设计:一、 建立项目1、 开始之前使用 NetBeans IDE 开发 JAVA 程序,需要安装如下软件:l J2SE(TM) Development Kit (JDK) ,版本最好是 1.5 以上l NetBeans IDE5.5.1这两个软件都是免费的,可以到网上下载。下载完毕后需要先安装好 JDK,然后再安装 NetBeans IDE5.5,安装完毕后,就可以打开 NetBeans IDE5.5.1,开始我们的学习历程了。2、 建立记事本项目NetB

2、eans 是以项目的方式来管理程序的,通常一个程序就是一个项目。所以我们创建 JAVA 程序的第一步就是建立项目。(1)选择 NetBeans 的文件菜单新建项目,根据向导(如图 1 所示)选择“常规”,“ java 应用程序”,然后转入下一步。(2)向导的第二步如图 2 所示,需要设置项目的一些信息。我们把项目名称定为 NoteSys,设置好项目保存位置,此时先不创建主类,所以去掉创建主类复选框的对号,单击完成即创建好一个项目(3)项目建立之后 NetBeans 界面如图 3:知识点整理:l 从图 1 可以看到,使用 NetBeans 还可以创建 web 程序和企业程序,我们这里创建的是桌面

3、应用程序。l 可以在建立项目时创建主类,也可以不创建,留到项目建立好后再创建l 项目建立好之后就可以在 NetBeans IDE 环境中看到刚才创建的项目(图 3)。NetBeans 的文件组织分为两种方式:项目组织方式和文件组织方式。项目组织方式中整个项目(NoteSys)包括:源包、测试包、库和测试库,源包再由若干 java 文件构成。文件组织方式按照实际的物理存放目录组织,即项目在硬盘上的存放路径。整个项目(NoteSys )包括 src、build 等几个文件夹。l 项目建立好后,在源包上单击右键可以创建包和其他的 java 文件,在创建的包上单击右键也可以创建各种 java 文件,见

4、图 4经过这样几个步骤,我们就建立了一个桌面程序项目 NoteSys,接下来就是在IDE 中对项目进行开发,首先我们先看如何建立程序的界面。二、 构建记事本 GUI 界面NetBeans IDE 的 GUI 生成器经过了不断的改进,截至 NetBeans 5.0 版本时,它已变得更为强大、更具直观性了。用户无需深入了解布局管理器,就可以生成具有专业外观的 GUI。在 NetBeans 中以可视化的方式来生成界面,我们只需将组件放置在所需的位置,就可以完成窗体布局的设置。下面的步骤将带领大家制作记事本的界面,也会让大家领略到 NetBeans 中构建 GUI 界面的方便和高效。1、 建立窗体在项

5、目视图的源代码包上单击右键创建一个包(包名为 qiu.notesys),然后在qiu.notesys 包上单击右键创建一个 jFrame 类(类名为 WinNote.java),此即为记事本的窗体,我们将在该窗体上添加其他组件构建记事本的界面。如图 5根据图 5,NetBeans 的 GUI 生成器的各种窗口包括: l 项目和文件区域:显示整个项目的文件,采用项目和文件两中方式组织。可以通过该窗口管理 java 文件,包括对 java 文件的新建,删除,编译,运行等操作l 检查器:提供所有组件的表示,包括在应用程序中表示为树状分层结构的可视和非可视组件。并允许您在可用面板中组织这些组件,而且添

6、加组件,设置组件的属性和事件也可以在检查器内完成。l 设计区域:GUI 生成器用于创建和编辑 Java GUI 窗体的主窗口。通过使用工具栏的“源”和“设计”切换按钮,可以查看类的源代码或其 GUI 组件的图形视图。l 组件面板:可用组件的可定制列表,包含 JFC/Swing、AWT 和 JavaBean 组件的标签以及布局管理器。此外,还可以使用定制器来创建、删除和重新排列组件面板中显示的类别。 l “属性 ”窗口。显示 GUI 生成器、“检查器” 窗口、“项目”窗口或“文件”窗口中当前选定组件的属性。 l 调试和输出窗口:位于窗口的最下方,显示调试程序的信息和输出信息。注意:如果单击“源”

7、 按钮,IDE 将在编辑器中显示应用程序的 Java 源代码,其中包含 GUI 生成器自动生成的代码部分,这部分以蓝色区域表示,称为 “被保护的块”。被保护的块是“源”视图中无法编辑的受保护区域。处于“源”视图中时,只能编辑出现在编辑器白色区域中的代码。如果需要对被保护的块中的代码进行更改,请单击“设计”按钮以便从 IDE 的编辑器切换到 GUI 生成器,然后在生成器中对窗体进行必要的调整。保存更改时,IDE 将更新文件的源代码窗体建立好了,整个界面的基础也就有了。下面我们就可以在该窗体上添加其他组件,来完成整个界面工作了。2、 添加菜单(1)加入菜单l 在组件面板中选择 JMenuBar,将

8、其拖拽入我们的 JFrame 主窗体。l 在设计视图时,屏幕右侧的检查器会检查出所有的可视组件,我们在检查器中找到刚才推拽的 JMenuBar,点击右键,在右键弹出菜单中选择 【更改变量名称】,此时弹出重命名窗体,我们在新建名称中填写 jmb,然后点击“完成”按钮,此时我们的 JMenuBar 就成功创建了。l 对于每个菜单来说,还需要创建一个菜单对象,然后把此顶层菜单添加到菜单栏中,接着在菜单对象中添加菜单项、分隔符以及子菜单。对于【文件】【新建】而言,我们应首先将【文件】这个菜单对象创建,然后将【新建】菜单项添加到【文件】菜单选项中。参考图 6,具体步骤如下:i. 在检查器中,右键点击 j

9、mb,在弹出菜单中,选择【添加 JMenu】,此时检查器中在 jmb 下面添加了一个新的 JMenu 菜单对象。ii. 右键点击 JMenu 菜单对象,在弹出的右键菜单中选择【更改变量名称】,将其新建名称更改为“fileMenu”。iii. 右键点击“fileMenu”菜单对象,在弹出菜单中选择【添加】 【JMenuItem】(可在此菜单中添加菜单项,分隔符,子菜单等),此时在“fileMenu”菜单对象中添加了一个菜单项,我们将此菜单项更名为“newMenu”。这样文件菜单和新建菜单项就建立好了。知识点整理:l 添加组件的方法(1)到组件面板单击需要的组件(2)移动鼠标到窗体,此时刚单击过的

10、组件会跟随鼠标移动,并且靠近窗体边缘或其他组件附近时,会出现虚线来指示放置组件的位置。(3)确定好放置位置后,再次单击鼠标即可把组件添加好l 修改组件大小添加组件之后,单击组件,组件周围会出现一些白色方块,把鼠标移动到其上,拖动鼠标则可改变组件大小右击组件,在菜单中选中“自动调整大小”的垂直和水平菜单,则运行程序时,组件会随着窗口的大小变化而变化。l 对齐组件添加组件时,NetBeans 提供了虚线指示,所以很容易对齐组件。此外,按住shift 键选择多个组件,使用设计区域上方的一组对齐按钮也可对齐组件l 菜单组件NetBeans 中通过 JMenuBar 组件来创建菜单,添加 JMenuBa

11、r 后,通过右击检查器中的 JMenuBar 可以添加顶层菜单,通过右击顶层菜单可以添加菜单项和分割线等,而顶层菜单和菜单项的变量名称和显示文字等可以通过其右键菜单来设置。(2)关于菜单的几个操作l 给菜单添加图标菜单项显示图标会使菜单看上去更加美观,而且含义清晰的图标也会增加程序的易用性,所以我们有时需要给菜单添加一些图标。方法如下:右击源包建立一个包(名称为 res),通过该包的物理路径向该包内放一些图标,然后打开菜单项的属性窗口,通过菜单的 ico 属性,指定类路径选项,然后选择包 res 中的图标文件就可以把图标加入到菜单中。下面以新建菜单为例:在检查器中,右键点击“newMenu”,

12、在弹出菜单中,选择【属性】,此时弹出一个可以修改属性和事件的对话框,我们选择属性选项卡,找到 ico 属性,点击 ico 属性对应的按钮,如图 7:此时弹出一个图片选择对话框,我们选择类路径,并在当前类路径下选择图片文件,点击“确定” 按钮,这时我们菜单的图片就添加上了l 给菜单设置加速键加速键的作用就是程序运行中可以通过使用 ALT 加字母的方式快速打开菜单。NetBeans 中,在菜单的 text 属性指定的名字后面加上一个括号和一个大写字母,例如新建的 text 为“ 新建(N)”然后把属性 mnemonic 设置成刚才指定的大写字母即可,此时通过 ALT 加该字母就可以访问该菜单了l

13、给菜单设置快捷键菜单的快捷键可以使用户用快捷键来执行某个菜单的操作。切换到代码编辑器窗口,在代码编辑器中创建一个方法 setMenuAccelerator ,在方法中为需要设置快捷键的菜单加入设置语句即可,新建菜单的快捷键设置如下这样,当我们按下 Ctrl+N 时,就可执行新建命令了。最后在主类(WinNote.java)的构造方法中调用该方法即可。知识点整理:l NetBeans 中,在可视化的方式中就可以顺利完成菜单的各种复杂设置,包括顶层菜单、菜单项、分割线等的添加以及其他菜单的相关设置l 菜单使用的图标我们事先放到了一个包内,然后以类路径的方式加入到了菜单中,这样类路径并不依赖某个具体

14、路径,所以使程序易于移植。(3)按照刚才的方法给记事本添加表 1 所示的菜单菜单项 菜单变量名 快捷键 加速器【文件】【 新建】 【fileMenu】【newMenu】 FN Ctrl+N【文件】【 打开】 【fileMenu】【openMenu】 FO Ctrl+O【文件】【 保存】 【fileMenu】【saveMenu】 FS Ctrl+S【文件】【 退出】 【fileMenu】【exitMenu 】 FX 【编辑】【 剪切】 【editMenu】【cutMenu 】 ET Ctrl+X【编辑】【 拷贝】 【editMenu】【copyMenu】 EC Ctrl+C【编辑】【 粘贴】 【

15、editMenu】【pasterMenu】 EP Ctrl+V【编辑】【 全选】 【editMenu】【selectAllMenu】 EA Ctrl+A【格式】【 颜色】 【editMenu】【colorMenu】 EF Alt+F【帮助】【 关于】 【helpMenu 】【aboutMenu】 HA 3、 添加工具栏NetBeans 中,工具栏由 JToolBar 组件和按钮(JButton)组件组合起来实现的。我们首先在组件面板中找到 JToolBar 组件,并将其拖入我们的主窗体,然后根据需要在 jtoolBar 中放置一些按钮,设置好按钮的 ico(图标)和tooltiptext(按钮

16、提示)属性设计表 2 所示的工具栏放置顺序 变量名称 功能 工具提示1 newButton 新建文件 新建2 openButton 打开本地文件 打开3 saveButton 保存文件到本地 保存4 cutButton 剪切 剪切5 copyButton 拷贝 复制6 plasterButton 粘贴 粘贴4、 加入文本框NetBeans 提供几个显示编辑文本的组件,我们使用 JTextArea 来实现。从面板中找到 JTextArea,加入到窗体上这样,我们的记事本界面就制作完毕了,在项目窗口中,找到 WinNote.java,右击选择编译文件,NetBeans 则对该文件进行编译,编译成功

17、后,在运行文件即可启动程序,运行效果如图 8:三、 打开与保存在上一节中我们已经完成了记事本的界面,也从中学习了一些构建 GUI 的方法和技巧。从本节开始将要讨论记事本的功能开发,先看如何打开和保存文件。当然在叙述过程中会讲解如何使用 NetBeans 的代码编辑器的一些用法。1、 打开文件使用记事本打开一个已有的文本文件需要涉及到如下问题:l 如何控制要打开文件的类型,即只能打开文本文件l 打开对话框如何实现l 如何从硬盘上读入文件内容到记事本中下面依次讨论这三个问题的解决方案(1) 控制要打开文件的类型FileFilter 类JAVA 中的 FileFilter 类可以很好的解决这个问题,

18、FileFilter 是一个没有默认实现的抽象类。 一经实现便可以设置在 JFileChoose 上,以阻止不需要的文件出现在目录清单中。所以我们自己写一个类继承自 FileFilter,然后实现FileFilter 类的方法即可,具体如下:l 右击 qiu.notesys 包新建一个类(名称为 TextFilter),此时该类的内容如下l 在类名 TextFilter 后输入 extends FileFilter,即继承自 FileFilter 类。此时NetBeans 代码编辑器会自动扫描代码,发现该行代码的错误并且用红线标出,这时把鼠标移动到该行,NetBeans 会提示你错误的原因:由

19、于我们并没有引入 FileFilter 类就直接使用了,所以这里提示“找不到 FileFilter 类”,单击该行任意位置会在行左边出现一个灯泡,单击灯泡,NetBeans 会给出你修改错误的方法,现在从提示里选择“添加 javax.swing.filechooser.FileFilter 的 import”, NetBeans 就会自动把对 FileFilter 类的引入加上,而不需要我们去手动添加。此外,因为 FileFilter 类是一个抽象类,所以必须实现其所有的抽象方法,因此现在还提示有错误,再次单击该行,从灯泡的提示中选择“实现所有抽象方法”,NetBeans 就会自动把 File

20、Filter 的所有抽象方法添加上,此时代码窗口内容如下:其中标红的都是代码编辑器自动添加的。从此处也可以看出使用 NetBeans 写代码会非常的省时省力。l 最后我们实现 TextFilter 类的抽象方法,代码如下这样就实现了一个只显示“txt”或“doc”类型文件的过滤器类 TextFilter,用他可是方便的过滤文件。知识点整理:l 代码编辑器可以自动查找代码错误,并标出红线提示,此时把鼠标放到错误行上面会出现错误原因的提示l 单击错误行前的小灯泡,代码编辑器会给出修改错误方案并能自动修复错误l 书写代码时可以不用过分考虑代码的缩进格式,代码写完后使用“Ctrl+Shift+F”组合

21、键,代码编辑器会自动调整代码格式(2) 打开已有文件 jFileChooser 组件NetBeans 提供了一个文件选择组件jFileChooser,为用户选择文件提供了一种简单的机制,使用他可以方便调用打开对话框和保存对话框。我们首先添加一个 jFileChooser,其用法在下一步中介绍。添加该组件的具体操作是:在项目中选择 WinNote,切换到设计视图,此时检查器中会显示 WinNote 的所有组件以及组件之间的组织层次,由于打开对话框是独立的,并不依附主窗口,所以我们把该组件添加到“其他组件”内,在“其他组件”上右击,从组件面板上添加SWINGjFileChooser ,即可把 jF

22、ileChooser 添加到项目中,此后我们就可以使用它了。(3) 读入文件 java 中的 I/O 操作JAVA 中为实现文本输入输出提供一些专门的类,常用的有FileReader、FileWriter 和 BufferedReader、BufferdWriter 几个类。这里我们综合利用 BufferedReader、FileReader 以及刚才的 jFileChooser 组件来完成对文件的打开操作,此外,打开操作是通过打开菜单来激发的,所以我们首先实现打开菜单的事件,参见图 9l 切换到 WinNote 的设计视图l 到检查器窗口找到“打开”菜单并选中(此时右击也可添加一个事件)l

23、右侧的属性窗口会显示该菜单的相关信息,选择事件,该窗口就列出了该菜单支持的所有的事件l 找到 actionPerformed 事件,单击后面的按钮,就可以打开添加事件的对话框,添加一个事件即可添加好事件后,给事件添加如下代码:知识点整理:l NetBeans 中通过属性窗口可以方便的给组件和菜单添加事件和管理事件,而不用考虑过多的事件内部细节l JAVA 中的输入输出(1) FileReader 类是用来读取字符文件的便捷类,在给定了需要读取数据的文件名的情况下创建一个新 FileReader,然后使用其 read 方法可以读取字符流,但其所作的每个读取请求都会导致对基础字符或字节流进行相应的

24、读取请求,效率很低。(2) BufferedReader 从字符输入流中读取文本,缓冲各个字符(3) 根据( 1)(2),我们可以用 BufferedReader 包装 read()操作效率很低的 FileReader,采用如下方式: BufferedReader in = new BufferedReader(new FileReader(filename);这样,用 FileReader 读取指定的文件,然后用 BufferedReader 来缓冲,最后在用 read 或 readline 方法读取文件。避免了每次调用 read() 或 readLine() 都会从文件中读取字节,并将其转

25、换为字符后返回的低效做法此外,FileWriter 是写入字符文件的便捷类,用于写入字符流。BufferdWriter类提供缓冲,因此也可以综合使用这两个类完成写入文件的操作。2、 保存文件保存文件的实现和打开非常类似,也是通过 TextFilter 类控制保存的文件类型,通过 jFileChooser 来调用保存对话框,通过文件输入输出操作来写文件。具体做法请读者自己研究。四、 其他功能的实现有了打开与保存,我们的记事本已经可以操作文件,本节将带领大家完成记事本剩余的几个重要功能。1、剪切操作添加好剪切菜单的 actionPerformed 事件,在事件内写如下代码editor.cut();

26、其中 editor 是文本框 jTextArea。这样就实现了剪切操作,其余的全选、复制、粘贴与此类似,不再细说2、文本颜色NetBeans 提供了一个 jColorChooser 组件,使用它可以方便的实现颜色设置。该组件显示有模式的颜色选取器,在隐藏对话框之前一直阻塞。如果用户按下“OK”按钮,则此方法隐藏/释放对话框并返回所选颜色。如果用户按下“Cancel”按钮或者在没有按“OK”的情况下关闭对话框,则此方法隐藏 /释放对话框并返回 null。因此,我们添加一个 jColorChooser,利用它选取颜色即可。参见图 10在检查器窗口内右击“其它组件”,添加一个 jColorChoos

27、er,修改变量名为ColorChooser,然后添加颜色菜单的事件,在事件内加入如下代码:第一句代码创建了一个 Color 对象,该对象返回了 jColorChooser 组件中被选择的颜色(jColorChooser 的构造方法中的三个参数分别是:对话框的父 Component,对话框标题和显示颜色选取器时的初始 Color 设置),第二句代码则是设置文本颜色。3、撤销操作JAVA 中提供了撤销管理器类UndoManager,通过该类提供的方法,我们可以方便实现撤销与恢复操作,具体操作如下:l 首先声明一个 UndoManager 的对象,代码如下:UndoManager undoManag

28、er = new UndoManager();l 因为撤销和恢复都是针对文本框进行的,所以需要对文本框 jTextArea 进行监视,打开文本框的 AncestorAdded 事件,填入如下代码这样撤销管理器就有效的对文本进行监视,一旦需要撤销或恢复操作,直接调用撤销管理器的方法即可l 最后在撤销菜单的 actionPerformed 事件中写一句 “undoManager.undo();”,在恢复菜单的 actionPerformed 事件写一句“undoManager.redo();”就可以了。4、新建与退出新建与退出都会涉及到如下两个问题:l 如何判断文档是否发生变化l 若文档已改变,如

29、何调用对话框询问用户是否保存当前文档对于第一个问题,文本组件 jTextArea 没有提供相关方法,但是我们可以定义一个全局变量,让他存储初始的文档内容,然后新建或退出时在比较该变量和当前文档内容,相同则不必询问是否保存,否则调用对话框询问是否保存。对于第二个问题,使用 jOptionPane 组件即可实现,JOptionPane 有助于方便地弹出要求用户提供值或向其发出通知的标准对话框,对 JOptionPane 组件的方法调用通常有如下几个:方法名 描述showConfirmDialog 询问一个确认问题,如 yes/no/cancel。showInputDialog 提示要求某些输入。s

30、howMessageDialog 告知用户某事已发生。showOptionDialog 上述三项的大统一 (Grand Unification)。每个调用方法的参数很多,这里不再细说,请查看 API 手册,我们使用JOptionPane 组件的第一个方法 showConfirmDialog 来实现新建和退出需要的对话框。(1)新建代码(2)退出退出代码与新建类似,也是判断文档是否改变,然后通过对话框提示用户是否保存,然后在退出。5、帮助与关于窗口的制作关于的主要目的是通过一个窗口展示有关于程序的一些信息和作者的相关信息,这里我们建立一个 jPanel 窗口类,然后在窗口上添加JTabbedPa

31、ne、jPanel、jLabel 等几个组件就可以实现了。具体操作如下:l 右击 qiu.notesys 包,添加一个 jPanel 窗口类l 找到检查器中的 jPanel,右击,添加 JTabbedPane 组件,再右击JTabbedPane,添加两个 jPanel 组件,这时 JTabbedPane 就有了两个选项卡:tab1 和 tab2,这两个选项卡是由 jPanel 组件构成的。最后在分别给两个选项卡添加几个 jLabel。l jLabel 组件可以显示文字和图片,所以根据情况添加相关信息就可以了,最后通过主类 WinNote 的关于菜单调用该窗口即可。效果如图 11:知识点整理l

32、全选、复制、粘贴和剪切等操作使用 jTextArea 组件自身的方法就可以实现l 文本颜色使用 jColorChooser 组件实现。我们并没有讲解如何实现字体设置功能,因为 NetBeans 没有提供字体对话框组件,需要我们自己设计实现字体对话框的功能,因为有些复杂,所以没有讲,请参看我的源代码l 撤销操作有撤销管理器类 UndoManager 实现,可以连续多次撤销或恢复l 新建与退出用到了 JOptionPane 组件,它可以方便地弹出要求用户提供值或向其发出通知的标准对话框l 帮助和关于窗口使用了 JTabbedPane 组件,它允许用户通过单击具有给定标题和图标的选项卡,在一组组件之

33、间进行切换,一般采用 jPanel 组件作为选项卡间的切换组件。五、NetBeans 中的项目操作经过前面的学习,相信大家已经能够做出一个简易的记事本程序了,接下来就要思考如何完成这个项目,并且能够让项目独立运行。现在,我们来学习NetBeans 中对整个项目的几个操作。1、 运行项目l 设置主类我们知道 JAVA 必须从主类开始运行程序,所以需要指定好主类。一般在我们创建项目时就指定好了主类,如果没有可以右键单击项目节点,选择“属性”,然后在对话框左窗格中选择“运行”节点,从这里可以设置主类。 l 运行主项目从“运行 ”菜单中选择 “运行” “ 运行主项目”( 或使用 F6 键)。NetBe

34、ans 就会编译并运行程序,然后输出结果,双击“输出”窗口将其最大化,以便查看所有输出内容。 按 F6 键再次运行程序。但这次只是运行程序,并不需要编译任何新内容。2、 清理并生成项目l 选择“生成”“ 清理并生成主项目 ”( Shift-F11)。将清理项目,然后将其作为进程的一部分重新生成。 3、 生成 Javadocl 选择项目l 从 IDE 的主菜单中,选择“生成”“为 NoteSys 生成 Javadoc”。IDE 将在“输出”窗口中显示 Javadoc 输出,并打开 Web 浏览器以显示 Javadoc 4、调试项目l 打开记事本的 WinNote.java 文件,转至打开菜单的事

35、件代码,并将插入点放在“t=in.readLine();”,然后按 Ctrl-F8 组合键给该行设置一个断点(或鼠标单击行号)。 l 选择“运行”“ 调试主项目 ”( F5)。IDE 将打开调试器窗口,并在调试器中运行该项目,启动记事本程序后,单击记事本的文件菜单打开,这时程序执行到了断点处,停止l 选择“局部变量” 窗口,会看到这里列出了很多的局部变量值,选择变量 t,此时 t 为空值(因为还没有读入数据)。 l 在工具栏中单击“步入” ( F7),逐步执行程序并观察变量 t,会发现 t 在一行一行的把文件的内容读取出来。l 单击“运行”菜单“继续运行 ”(ctrl+F5 )就会关闭调试器窗口,继续执行到程序到完毕 总之,F6 是正常运行程序,F5 是调试运行,会打开调试器窗口,以方便观察程序运行情况,F7 是单步运行程序。此外还可以在程序代码中设置断点,以便有效的观察断点处代码的情况。

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

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报