版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java桌面程序开发
目录第1章认识Java桌面程序第2章开发第一个Java桌面程序第3章事件处理机制第4章容器与布局第5章使用Swing常用组件第6章使用Swing高级组件第7章连上DB的Java桌面程序第8章
Java桌面程序实例:联系人管理第5章使用Swing常用组件教学要求
1.掌握:Swing各种常用组件的使用,包括图形用户界面所需要的基本组件、选择型组件,菜单等的创建和使用2.理解:工具栏的创建,对话框的创建和使用5.1 GUI的基本元素:标签、按钮、文本框1.JLabelJLabel类是一个用来显示文本的类,文本就是一个字符串。在程序中指定要显示的字符串,但该字符串在运行时不能被用户修改标签不对输入事件作出反应。因此,它无法获得键盘焦点。JLabel对象还可以显示图像或同时显示文本与图像二者。可以通过设置垂直和水平对齐方式,指定标签显示区中标签内容在何处对齐。JLabel的构造方法:JLabel():创建无图像并且其标题为空字符串的JLabel。
JLabel(Iconimage):创建具有指定图像的JLabel实例。
JLabel(Iconimage,inthorizontalAlignment):创建具有指定图像和水平对齐方式的JLabel实例。
JLabel(Stringtext):创建具有指定文本的JLabel实例。
JLabel(Stringtext,Iconicon,inthorizontalAlignment):创建具有指定文本、图像和水平对齐方式的JLabel实例。
JLabel(Stringtext,inthorizontalAlignment):创建具有指定文本和水平对齐方式的JLabel实例。其中,参数text设置标签文本,icon设置标签图标,horizontalAlignment用于指定标签内容的水平对齐方式。horizontalAlignment的取值为JLabel从SwingConstants继承来的几个静态常量:LEFT、CENTER、RIGHT、LEADINGTRAILINGJLabel类的常用方法:
StringgetText():返回该标签所显示的文本字符串。
voidsetText(Stringtext):定义此组件将要显示的单行文本。
IcongetIcon():返回该标签显示的图形图像(字形、图标)。
voidsetIcon(Iconicon):定义此组件将要显示的图标。
intgetIconTextGap():返回此标签中显示的文本和图标之间的间隔量。
voidsetIconTextGap(inticonTextGap):如果同时设置了图标和文本属性,则此属性定义它们之间的间隔。
intgetHorizontalAlignment():返回标签内容沿X轴的对齐方式。
intgetVerticalAlignment():返回标签内容沿Y轴的对齐方式。
voidsetLabelFor(Componentc):设置将标签添加到的组件。2.JButtonJButton类是使用最多的一个组件,可以用来创建带标签的按钮,可完成用户想要完成的一些功能。JButton的构造方法:JButton():创建不带有设置文本或图标的按钮。
JButton(Actiona):创建一个按钮,其属性从所提供的Action中获取。
JButton(Iconicon):创建一个带图标的按钮。
JButton(Stringtext):创建一个带文本的按钮。
JButton(Stringtext,Iconicon):创建一个带初始文本和图标的按钮。JButton的基本方法:voidsetText(Stringtext):设置按钮的文本
StringgetText():返回按钮的文本
voidsetIcon(IcondefaultIcon):设置按钮的默认图标
booleanisSelected():返回按钮的状态
voidsetSelected(booleanb):设置按钮的状态
voidsetSelectedIcon(IconselectedIcon):设置按钮的选择图标
3.JTextFieldSwing中与文字输入有关的组件主要包括JTextField、JTextArea、JPasswordField和JTextPane,其中JTextField、JPasswordField是单行的文本输入组件,JTextArea是多行的文本输入组件,JTextPane可以设置其中文本的格式,它们都继承自JTextComponent类。JTextField类用来创建允许用户编辑的单行文本组件。用户可以通过这类组件输入和编辑字符串信息。JTextField与JLabel的本质差别是,程序运行时,JTextField可以获得焦点,而JLabel不能。JTextField可用作程序的输入。JTextField的构造方法:JTextField():构造一个新的TextField。
JTextField(Documentdoc,Stringtext,intcolumns):构造一个新的JTextField,它使用给定文本存储模型和给定的列数。
JTextField(intcolumns):构造一个具有指定列数的新的空TextField。
JTextField(Stringtext):构造一个用指定文本初始化的新TextField。
JTextField(Stringtext,intcolumns):构造一个用指定文本和列初始化的新TextField。JTextField的常用方法:voidsetText(Stringt):将此TextField文本设置为指定文本voidgetText(Stringt):获取此TextField的文本voidsetFont(Fontf):设置当前字体
voidsetHorizontalAlignment(intalignment)设置文本的水平对齐方式。5.1.1看看效果例5-1:使用了标签,文本框和按钮这些常用元素例5-2JLabel的简单应用例5-3JButton的简单应用例5-4JTextField的简单应用5.1.2在标签JLabel中使用图像JLabel控件除了可以用于在窗体上显示文字之外,还可以用来显示图片。显示图片需要用到ImageIcon类创建的对象。ImageIcon类,一个Icon接口的实现,它根据Image绘制Icon。可使用MediaTracker预载根据URL、文件名或字节数组创建的图像,以监视该图像的加载状态。ImageIcon类的构造方法:ImageIcon():创建一个未初始化的图像图标。
ImageIcon(Imageimage):根据图像对象创建一个ImageIcon。
ImageIcon(Stringfilename):根据指定的文件创建一个
ImageIconImageIcon(URLlocation):根据指定的URL创建一个ImageIcon。
ImageIcon(URLlocation,Stringdescription):根据指定的URL创建一个
ImageIcon实例例5-5制作了一个利用JLabel显示图片的窗体5.1.3带图标Icon的按钮JButton除了JLabel标签上可以使用图标,JButton也可以添加图标
例5-6,设置了按钮的图标,并设置的按钮名字和图标的相对位置5.1.4使用密码框JPasswordField密码文本框是用来输入密码的文本框。密码框继承单行文本框,所以密码框只显示单行输入框。但是,与单行文本框不同的是,密码框输入的文字将不会正常显示出来,而是使用其它字符代替。可以通过调用setEchoChar(charc)来更改显示字符。密码框的作用是防止别人看到所输入的文字信息。JPasswordField的构造方法:JPasswordField():构造一个新JPasswordField,使其具有默认文档、为null的开始文本字符串和为0的列宽度。
JPasswordField(intcolumns):构造一个具有指定列数的新的空JPasswordField。
JPasswordField(Stringtext):构造一个利用指定文本初始化的新JPasswordField。
JPasswordField(Stringtext,intcolumns):构造一个利用指定文本和列初始化的新JPasswordField。JPasswordField的常用方法:voidsetEchoChar(charc):设置此JPasswordField的回显字符。chargetEchoChar():返回要用于回显的字符。
booleanechoCharIsSet():如果此JPasswordField具有为回显设置的字符,则返回true。
char[]getPassword():返回此TextComponent中所包含的文本。实例例5-7密码框JPasswordField的使用例5-8密码字段的键盘事件例5-9监听JPasswordField的ActionEvent事件5.2 使用文本区组件JTextArea多行文本框用来编辑多行文本,进行大量的文字编辑处理多行文本框可以在内部处理滚动,具有换行能力JTextArea的构造方法:JTextArea():构造新的TextArea。
JTextArea(introws,intcolumns):构造具有指定行数和列数的新的空TextArea。
JTextArea(Stringtext):构造显示指定文本的新的TextArea。
JTextArea(Stringtext,introws,intcolumns):构造具有指定文本、行数和列数的新的TextArea。JTextArea的常用方法voidappend(Stringstr):将给定文本追加到文档结尾。
voidsetColumns(intcolumns):设置此TextArea中的列数。
voidsetRows(introws):设置此TextArea的行数。
intgetLineCount():确定文本区中所包含的行数。
voidinsert(Stringstr,intpos):将指定文本插入指定位置。
voidsetFont(Fontf):设置当前字体。
voidsetWrapStyleWord(booleanword):设置换行方式(如果文本区要换行)。实例例5-10使用JTextArea例5-11从一个文本区复制选中的文字到另一个文本区5.3 选择型组件Java提供了很多的选择型组件,用户可通过单击选定,免去了输入文本的麻烦。常用的选项组件有单选框,复选框,列表框,组合列表框等。1.JCheckBox(复选框)类JCheckBox类继承JToggleButton类,而JToggleButton类实现一个反选按键,只有按下和释放两种状态。复选框也有类似功能,只有选择和不选择两种状态,而且复选框可由多个按钮组成一个组群。JCheckBox的构造方法:JCheckBox(Iconicon):创建有一个图标、最初未被选定的复选框。
JCheckBox(Iconicon,booleanselected):创建一个带图标的复选框,并指定其最初是否处于选定状态。
JCheckBox(Stringtext):创建一个带文本的、最初未被选定的复选框
JCheckBox(Stringtext,booleanselected):创建一个带文本的复选框,并指定其最初是否处于选定状态。
JCheckBox类的常用方法:voidsetText(Stringtext):设置按钮的文本。
StringgetText():返回按钮的文本
voidsetSelected(booleanb):设置按钮的状态。
booleanisSelected():返回按钮的状态。
JCheckBox类的常用方法和JRadionButton类的常用方法基本一样2.JRadioButton(单选按钮)类单选按钮只能在其组群内选择一个,使用这个类可以定义单选按钮。为单选按钮分类,必须用到类ButtonGroup。这个类的主要功能是:同一时间内只会有一个组件的状态为“on”。例如:性别选项,“男”、“女”二选一JRadioButtonjrbtn1=new
JRadioButton(“男”);JRadioButtonjrbtn2=newJRadioButton(“女”);ButtonGroupbg=newButtonGroup();bg.add(jrbtn1);bg.add(jrbtn2);JRadioButton的构造方法JRadioButton(Iconicon):创建一个初始化为未选择的单选按钮,其具有指定的图像但无文本。
JRadioButton(Iconicon,booleanselected):创建一个具有指定图像和选择状态的单选按钮,但无文本。
JRadioButton(Stringtext):创建一个具有指定文本的状态为未选择的单选按钮。
JRadioButton(Stringtext,booleanselected):创建一个具有指定文本和选择状态的单选按钮。
3.JComboBox(下拉列表框)类JComboBox是将按钮或可编辑字段与下拉列表组合的组件。用户可以从下拉列表中选择值,下拉列表在用户请求时显示。如果使组合框处于可编辑状态,则组合框将包括用户可在其中键入值的可编辑字段。JComboBox的构造方法:JComboBox():创建具有默认数据模型的JComboBox。
JComboBox(ComboBoxModelaModel):创建一个JComboBox,其项取自现有的ComboBoxModel中。
JComboBox(Object[]items):创建包含指定数组中的元素的JComboBox。
JComboBox(Vector<?>items):创建包含指定Vector中的元素的JComboBox。JComboBox类的常用方法voidaddItem(ObjectanObject):为项列表添加项。
voidinsertItemAt(ObjectanObject,intindex):在项列表中的给定索引处插入项。
ObjectgetItemAt(intindex):返回指定索引处的列表项。
ObjectgetSelectedItem():返回当前所选项。
Object[]getSelectedObjects():返回包含所选项的数组。
intgetItemCount():返回列表中的项数。
voidsetSelectedItem(ObjectanObject):将组合框显示区域中所选项设置为参数中的对象。4.JList(列表框)类该组件允许用户从列表中选择一个或多个对象。JList的各个项目是放在单个列表框中,通过单击选项本身来选定。可以通过设置,允许对列表中的项目进行多项选择。JList不支持自动滚动功能,若要实现该功能,需要将JList添加到JScrollPane中。JList的构造方法:JList():构造一个使用空模型的JList。
JList(ListModeldataModel):构造一个JList,使其使用指定的非null模型显示元素。
JList(Object[]listData):构造一个JList,使其显示指定数组中的元素。
JList(Vector<?>listData):构造一个JList,使其显示指定Vector中的元素。JList类的常用方法:intgetSelectedIndex():返回所选的第一个索引;如果没有选择项,则返回-1。
int[]getSelectedIndices():返回所选的全部索引的数组(按升序排列)。
ObjectgetSelectedValue():返回所选的第一个值,如果选择为空,则返回null。
Object[]getSelectedValues():返回所选单元的一组值。
booleanisSelectedIndex(intindex):如果选择了指定的索引,则返回true。
booleanisSelectionEmpty():如果什么也没有选择,则返回true。
voidsetSelectedIndex(intindex):选择单个单元。
voidsetSelectedIndices(int[]indices):选择一组单元。
voidsetSelectedValue(ObjectanObject,booleanshouldScroll):从列表中选择指定的对象。
voidsetSelectionMode(intselectionMode):确定允许单项选择还是多项选择。
voidsetVisibleRowCount(intvisibleRowCount):设置不使用滚动条可以在列表中显示的首选行数。5.3.1看看效果例5-12选择型组件的示例。Choose.java(1)本例中用到的组件较多,首先要注意各组件的摆放。(2)当单击前景色单选按钮时,可以改变字体的颜色。(3)单击字型复选按钮时,可修改字型。(4)可以通过选择字号下拉列表框中的字号改变字体大小。(5)可以通过选择字体列表框改变字体。(6)单击修改文字按钮,可以通过一个输入消息框,输入新的内容。(7)单击退出按钮,可退出本系统,在退出之前,弹出消息框确认是否退出。5.3.2使用单选按钮JRadioButton例5-13单选按钮示例例5-14JRadioButton组件的事件响应5.3.3使用复选框JCheckBox例5-15JCheckBox的使用例5-16定制JCheckBox的标记图标5.3.4使用下拉列表框JComboBox例5-17下拉列表框JComboBox的实例5.4 创建菜单菜单和工具栏几乎是所有软件中必备的组件,Swing包中有一系列专门用来创建菜单类的组件。5.4.1看看效果例5-18菜单设计举例5.4.2认识菜单及菜单组件JMenuBar,菜单条,是菜单容器组件JMenu是菜单,如文件菜单,编辑菜单等JMenuItem是菜单项,如新建文件,打开文件等1.JMenuBar(菜单栏)JMenuBar是放置菜单的容器。可以通过JFrame类的setMenuBar()方法把JMenuBar对象加入一个框架中。JMenuBar类的构造方法:JMenuBar():创建新的菜单栏。
JMenuBar的常用方法:JMenuadd(JMenuc):将指定的菜单追加到菜单栏的末尾。
voidsetSelected(Componentsel):设置当前选择的组件,更改选择模型。
intgetMenuCount():返回菜单栏上的菜单数。
booleanisSelected():如果当前已选择了菜单栏的组件,则返回true。
JMenugetHelpMenu():获取菜单栏的帮助菜单。
JMenugetMenu(intindex):返回菜单栏中指定位置的菜单。2.JMenu(菜单)JMenu是菜单栏上放置的菜单。每一个菜单由一些菜单项组成。可以通过JMenuBar类的add()方法,把JMenu对象放置在JMenuBar对象上(即设置菜单栏上的主菜单)。JMenu实际上是一个包含JMenuItem的弹出窗口,用户选择JMenuBar上的项时会显示该窗口。除JMenuItem之外,JMenu还可以包含JSeparator,JSeparator是菜单上的分隔线。JMenu类的构造方法
JMenu(Strings):构造一个新JMenu,用提供的字符串作为其文本。
JMenu(Strings,booleanb):构造一个新JMenu,用提供的字符串作为其文本并指定其是否为分离式(tear-off)菜单。
3.JMenuItem(菜单项)所有菜单中的菜单项都是JMenuItem类或者其它的子类的对象。可以通过JMenu类的add()方法,把JMenuItem对象添加到JMenu对象上(即置菜单栏上某个主菜单的子菜单)。菜单项本质上是位于列表中的按钮。当用户选择“按钮”时,将执行与菜单项关联的操作。JMenuItem的构造方法:JMenuItem(Actiona):创建一个从指定的Action获取其属性的菜单项。
JMenuItem(Iconicon):创建带有指定图标的JMenuItem。
JMenuItem(Stringtext):创建带有指定文本的JMenuItem。
JMenuItem(Stringtext,Iconicon):创建带有指定文本和图标的JMenuItem。
4.JCheckBoxMenuItem(复选框菜单项)可以被选定或取消选定的菜单项。如果被选定,菜单项的旁边通常会出现一个复选标记。如果未被选定或被取消选定,菜单项的旁边就没有复选标记。像常规菜单项一样,复选框菜单项可以有与之关联的文本或图标,或者二者兼而有之。isSelected/setSelected或getState/setState都可以用来确定/指定菜单项的选择状态。首选方法是isSelected和setSelected,它们可用于所有菜单和按钮。JCheckBoxMenuItem类的构造方法
JCheckBoxMenuItem(Actiona):创建一个从所提供的Action中获取其属性的菜单项。
JCheckBoxMenuItem(Iconicon):创建有一个图标的、最初未被选定的复选框菜单项。
JCheckBoxMenuItem(Stringtext):创建一个带文本的、最初未被选定的复选框菜单项。
JCheckBoxMenuItem(Stringtext,booleanb):创建具有指定文本和选择状态的复选框菜单项。
5.JPopupMenu(弹出菜单)JPopupMenu可实现弹出菜单,弹出菜单是一个可弹出并显示一系列选项的小窗口。JPopupMenu用于用户在菜单栏上选择项时显示的菜单。它还用于当用户选择菜单项并激活它时显示的“右拉式(pull-right)”菜单。JPopupMenu类的构造方法:
JPopupMenu(Stringlabel):构造一个具有指定标题的JPopupMenu6.JSeparator(分隔符)JSeparator为实现分隔线提供了一个通用组件-通常用作菜单项之间的分隔符,以便将菜单项分成几个逻辑组。可以使用JMenu或者JPopupMenu的addSeparator方法来创建和添加一个分隔符,而不是直接使用JSeparator。JSeparator还可能用于GUI中任何一个需要可视化分隔符的地方。
5.4.3实现菜单例5-19创建基本菜单的例子例5-20演示了如何给菜单添加快捷操作方式例5-21垂直菜单栏5.4.4实现级联菜单例5-22级联菜单5.4.5实例:简单记事本例5-23记事本的实现5.5 创建工具栏一般在设计软件时,会将所有功能以菜单项(也就是菜单命令)的形式分类放置在菜单中,但功能数量较多时,对于一些频繁进行的操作用户也总要去查找菜单才能实现,这就增加了用户操作的负担。因此,可以将软件中最常用的部分功能以工具栏中工具按钮方式提供给用户,这样用户操作起来就便捷多了。Swing中JToolBar类提供了工具栏的属性和方法,用来放置各种常用功能命令的按钮。JToolBar类的构造方法:JToolBar():创建新的工具栏;默认的方向为HORIZONTAL。
JToolBar(intorientation):创建具有指定orientation的新工具栏。
JToolBar(Stringname):创建一个具有指定name的新工具栏。
JToolBar(Stringname,intorientation):创建一个具有指定name和orientation的新工具栏。JToolBar类的常用方法:JButtonadd(Actiona):添加一个指派动作的新的JButton。
voidaddSeparator(Dimensionsize):将指定大小的分隔符添加到工具栏的末尾。
voidsetFloatable(booleanb):设置floatable属性,如果要移动工具栏,此属性必须设置为true。
5.5.1看看效果例5-24工具栏5.5.2实现工具栏例5-25简单的工具栏例5-26工具栏按钮的工具提示5.5.3实例:给记事本加上工具栏5.6 实现对话框5.6.1Swing对话框JDialog对话框与框架(JFrame)有一些相似,但它一般是一个临时的窗口,主要用于显示提示信息或接受用户输入。所以,在对话框中一般不需要菜单条,也不需要改变窗口大小。此外,在对话框出现时,可以设定禁止其他窗口的输入,直到这个对话框被关闭。对话框分为无模式和有模式两种如果一个对话框是有模式的对话框,那么当这个对话框处于激活状态时,只让程序响应对话框内部的事件,程序不能再激活它所依赖的窗口或组件,而且它将堵塞当前线程的执行,直到该对话框消失不可见。无模式对话框处于激活状态时,程序仍能激活它所依赖的窗口或组件,它也不堵塞线程的执行。JDialog类的构造方法
JDialog(Dialogowner):创建一个没有标题但将指定的Dialog作为其所有者的无模式对话框。
JDialog(Dialogowner,booleanmodal):创建一个没有标题但有指定所有者对话框的有模式或无模式对话框。
JDialog(Dialogowner,Stringtitle):创建一个具有指定标题和指定所有者对话框的无模式对话框。
JDialog(Dialogowner,Stringtitle,booleanmodal):创建一个具有指定标题和指定所有者对话框的有模式或无模式对话框。
实例例5-28JDialog对话框设计举例5.6.2使用JOptionPaneJDialog类主要用来创建根据需要而定制的对话框,必须制作对话框中的每一个组件。但有时候我们可能只需要对话框显示一些信息,或是进行简单的输入操作,Swing提供的JOptionPane这个简单标准对话框可以满足这样的需求。JOptionPane类提供了一些静态方法用于显示对话框,这些对话框都是模式的,主要包含4种类型:消息对话框、输入对话框、确认对话框和选项对话框。JOptionPane类的常用静态调用方法方法名描述showConfirmDialog询问一个确认问题,如yes/no/cancel。showInputDialog提示要求某些输入。showMessageDialog告知用户某事已发生。showOptionDialog上述三项的大统一(GrandUnification)。staticintshowConfirmDialog(ComponentparentComponent,Objectmessage):调出带有选项Yes、No和Cancel的对话框;标题为SelectanOption。
staticintshowConfirmDialog(ComponentparentComponent,Objectmessage,Stringtitle,intoptionType):调出一个由optionType参数确定其中选项数的对话框。
staticintshowConfirmDialog(ComponentparentComponent,Objectmessage,Stringtitle,intoptionType,intmessageType):调用一个由optionType参数确定其中选项数的对话框,messageType参数确定要显示的图标。
staticintshowConfirmDialog(ComponentparentComponent,Objectmessage,Stringtitle,intoptionType,intmessageType,Iconicon):调出一个带有指定图标的对话框,其中的选项数由optionType参数确定。
staticStringshowInputDialog(Objectmessage):显示请求用户输入的问题消息对话框。
staticvoidshowMessageDialog(ComponentparentComponent,Objectmessage):调出标题为"Message"的信息消息对话框。
staticvoidshowMessageDialog(ComponentparentComponent,Objectmessage,Stringtitle,intmessageType):调出对话框,它显示使用由messageType参数确定的默认图标的message。
staticvoidshowMessageDialog(ComponentparentComponent,Objectmessage,Stringtitle,intmessageType,Iconicon):调出一个显示信息的对话框,为其指定了所有参数。staticintshowOptionDialog(Componentparent
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小学语文《aieiui》课件
- 个人车辆挂靠协议书
- 2024年度高级法律顾问聘用协议2篇
- 基于2024年度的云计算数据中心建设合同
- 2024年大数据分析与运用服务合同2篇
- 2024年度融资合同:新能源项目开发与股权融资协议2篇
- 租房协议书合同范本
- 美食城合作协议美食节合作协议书
- 【高院案例】发包人未能提供符合条件的施工现场导致合同解除案
- 污水处理厂排污合同范本5
- 学校体育馆应急疏散预案
- Unit3lesson2说课稿 - 2024-2025学年冀教版七年级英语上册
- 2024年度国际教育培训合作合同
- 2024年网络安全培训课件:保护企业信息安全
- 金融知识进万家
- 冬季道路行车安全
- 江苏省苏州四市联考2024-2025学年七年级上学期期中考试英语试题(含答案无听力原文及音频)
- 2024统编版(2024)道德与法治小学一年级上册教学设计(附目录)
- 2024年涉密人员考试试题库保密基本知识试题附答案(考试直接用)
- 第十三章-印花税
- 电气自动化专业职业生涯规划行业趋势与技能提升
评论
0/150
提交评论