版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室Java图形编程(图形编程(3) 一、复习一、复习二、知识点讲解:二、知识点讲解:1)Java的事件处理机制的事件处理机制2)JOptionPane类的用法类的用法三、例题讲解三、例题讲解四、小结和作业四、小结和作业计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室一、复习一、复习1. u每个布局编辑类对应一种布局策略,分别是每个布局编辑类对应一种布局策略,分别是FlowLayout:流式布局管理器:流式布局管理器BorderLayout:边界布局管理器:边界布局管理器GridLayout:网格布局管理器:网
2、格布局管理器2. 常用的控件组件常用的控件组件标签标签JLabel按钮按钮JButton单行文本框单行文本框JTextField多行文本区多行文本区JTextArea计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室3)Java的事件处理机制的事件处理机制Java采用采用委托事件模型委托事件模型来进行事件处理,不同的事件由不来进行事件处理,不同的事件由不同的同的监听者监听者处理。处理。u事件源:产生事件的组件。事件源:产生事件的组件。鼠标,文本框,按钮,选择项目,菜单项目等产生各种操鼠标,文本框,按钮,选择项目,菜单项目等产生各种操作的对象。作的对象。u事件:即其所产生的动作
3、状态。事件:即其所产生的动作状态。用户执行的动作:用户执行的动作:单击鼠标,按按钮,选择项目,单击菜单击鼠标,按按钮,选择项目,单击菜单条,在文本框中按下回车键等。单条,在文本框中按下回车键等。一、复习一、复习计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室事件源事件源注册:注册:btn.addActionListener(监听者对象监听者对象);ActionEvent事件事件事件监听器(监听者)事件监听器(监听者)实现接口:实现接口:public void actionPerformed(ActionEvent e)注册注册触发事件触发事件调用并传递参数调用并传递参数3)
4、Java的事件处理机制的事件处理机制一、复习一、复习计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室2.actionPerformed()方法的执行流程方法的执行流程1.当事件源上发生监听者可以处理的事当事件源上发生监听者可以处理的事件时,如鼠标单击件时,如鼠标单击JButton按钮或者在按钮或者在JTextField中敲回车键。中敲回车键。2. 事件源事件源JButton把这个事件(把这个事件(ActionEvent e)作为实际参)作为实际参数传递给事件监听器(数传递给事件监听器(类类GuessNumber)中负责处理这类)中负责处理这类事件的方法事件的方法(actio
5、nPerformed(ActionEvent e)3. 一旦有参数传递到一旦有参数传递到actionPerformed方法中,这个方法就方法中,这个方法就被系统自动调用执行,事件就按照程序代码中定义的流程被系统自动调用执行,事件就按照程序代码中定义的流程得到了处理。得到了处理。3)Java的事件处理机制的事件处理机制一、复习一、复习计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室u 知识点之四:事件监听器的三种形式知识点之四:事件监听器的三种形式1)主类自身是事件监听器)主类自身是事件监听器2)定义一个内部类作为事件监听器)定义一个内部类作为事件监听器3)定义一个匿名内部类
6、作为事件监听器)定义一个匿名内部类作为事件监听器二、知识点讲解二、知识点讲解计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室u 知识点之四:知识点之四:主类自身是事件监听器主类自身是事件监听器二、知识点讲解二、知识点讲解public class GuessNumber extends JFrame implements ActionListenerJButton okBtn;/确定按钮确定按钮public void init()okBtn=new JButton(确定确定);/定义定义JFrame中包含的组件中包含的组件okBtn.addActionListener(thi
7、s);/注册动作事件注册动作事件 public void eventHandle()/触发动作事件时的处理过程触发动作事件时的处理过程public void actionPerformed(ActionEvent e)if(e.getSource()=okBtn)eventHandle(); 计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室u 知识点之四:知识点之四:定义一个内部类作为事件监听器定义一个内部类作为事件监听器二、知识点讲解二、知识点讲解在在GuessNumber1类中定义一个内部类类中定义一个内部类ActionEventHandler(自定义的类名)(自定义的
8、类名)该内部类继承了动作事件监听器接口该内部类继承了动作事件监听器接口ActionListener该类中实现接口该类中实现接口ActionListener的方法的方法actionPerformed()public class GuessNumber1 extends JFrame GuessNumber1() class ActionEventHandler implements ActionListener /内部类内部类 public void actionPerformed(ActionEvent e) ()=okBtn) eventHandle(); /该类的其他代码该类的其他代码计算
9、机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室u 知识点之四:知识点之四:定义一个内部类作为事件监听器定义一个内部类作为事件监听器二、知识点讲解二、知识点讲解public class GuessNumber1 extends JFrame GuessNumber1()okBtn.addActionListener(new ActionEventHandler();numJtf.addActionListener(new ActionEventHandler();class ActionEventHandler implements ActionListenerpublic v
10、oid actionPerformed(ActionEvent e) /监听者是一个内部类监听者是一个内部类ActionEventHandlerActionEventHandlerpublic void eventHandle()/触发动作事件时的处理过程触发动作事件时的处理过程计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室u 知识点之四:知识点之四:定义匿名内部类作为事件监听器定义匿名内部类作为事件监听器二、知识点讲解二、知识点讲解public class GuessNumber3 extends JFrame public void GuessNumber3()okB
11、tn.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) if (e.getSource() = okBtn) eventHandle(); else if (e.getSource() = numJtf) eventHandle(););/ 使用匿名内部内注册动作事件使用匿名内部内注册动作事件 计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室4. AWTEvent类体系结构类体系结构ContainerEventEventObjectAWTEventActionE
12、ventTextEventAdjustmentEventComponentEventItemtEventWindowEventFocusEventInputEventPaintEventMouseEventKeyEventu 知识点之四:事件处理机制知识点之四:事件处理机制二、知识点讲解二、知识点讲解ActionEventTextEventItemtEventFocusEventMouseEventKeyEventWindowEvent计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室u包中定义了包中定义了11个监听者接口,每个接口内部包含了若干个监听者接口,每个接口内部包含
13、了若干处理相关事件的抽象方法。处理相关事件的抽象方法。uMouseEvent类有两个监听者接口与之相对应类有两个监听者接口与之相对应 MouseListener接口接口 具体事件包括:具体事件包括:MOUSE_CLICKED,MOUSE_ENTERED,MOUSE_EXITED,MOUSE_PRESSED,MOUSE_RELEASEDMouseMotionListener接口接口 具体事件包括:具体事件包括:MOUSE_DRAGGED,MOUSE_MOVEDu 知识点之四:事件处理机制知识点之四:事件处理机制二、知识点讲解二、知识点讲解计算机科学与技术学院网络工程教研室计算机科学与技术学院网络
14、工程教研室5. AWTEvent需要注意的问题需要注意的问题u一个事件类可能对应多个事件。一个事件类可能对应多个事件。如如KeyEvent类对应三个具体事件类对应三个具体事件KEY-PRESSED(键按下键按下)KEY-RELEASED(键松开键松开)KEY-TYPED(击键击键)u 知识点之四:事件处理机制知识点之四:事件处理机制二、知识点讲解二、知识点讲解计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室实现事件监听器接口有三种途径:实现事件监听器接口有三种途径:GuessNumber类自身是一个事件监听器类自身是一个事件监听器设计一个内部类作为一个事件监听器设计一个内部
15、类作为一个事件监听器匿名内部类实现事件监听器匿名内部类实现事件监听器很多教材和参考书中建议为事件处理设计一个专门的内部类,很多教材和参考书中建议为事件处理设计一个专门的内部类,而不要将一个已经存在的类转换为监听器。而不要将一个已经存在的类转换为监听器。二、知识点讲解二、知识点讲解u 知识点之四:事件处理机制知识点之四:事件处理机制计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室u知识点之五:知识点之五:JOptionPane类的用法类的用法创建简单对话框,这个对话框将位于创建简单对话框,这个对话框将位于parent组件的中央,如组件的中央,如果果parent为为null,对
16、话框将显示在屏幕的中央。,对话框将显示在屏幕的中央。Java中创建简单对话框不用中创建简单对话框不用JDialog类,而用类类,而用类JOptionPane的静态方法即可。的静态方法即可。需要提供对话框需要的参数。需要提供对话框需要的参数。简单对话框有简单对话框有4种,方法名的形式都是种,方法名的形式都是showXXXDialog。消息框消息框showMessageDialog的用法:的用法:(所属所属Frame,消息本身,对话框标题,图形标志常量,消息本身,对话框标题,图形标志常量)如中的如中的eventHandle()方法:方法:二、知识点讲解二、知识点讲解计算机科学与技术学院网络工程教研
17、室计算机科学与技术学院网络工程教研室public void eventHandle()tryuserInt=Integer.parseInt(numJtf.getText().trim();catch(NumberFormatException ex)JOptionPane.showMessageDialog(this,请将您请将您猜得的整数输入到文本框中!猜得的整数输入到文本框中!);numJtf.setText();numJtf.requestFocus();二、知识点讲解二、知识点讲解u知识点之五:知识点之五:JOptionPane类的用法类的用法计算机科学与技术学院网络工程教研室计算机
18、科学与技术学院网络工程教研室p问题问题JOptionPane.showMessageDialog(null,请将您猜得的整数输请将您猜得的整数输入到文本框中!入到文本框中!);JOptionPane.showMessageDialog(this,请将您猜得的整数输请将您猜得的整数输入到文本框中!入到文本框中!);上面两条语句的执行结果有什么区别?上面两条语句的执行结果有什么区别?二、知识点讲解二、知识点讲解u知识点之五:知识点之五:JOptionPane类的用法类的用法计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室4)JFrame组件之组件之JCheckBoxu复选框复选
19、框JCheckBoxJCheckBox cb1=new JCheckBox(Check Box 1);JCheckBox cb2=new JCheckBox(Check Box 2);JCheckBox cb3=new JCheckBox(Check Box 3);每个复选框有两种状态:选中状态和未选中状态。每个复选框有两种状态:选中状态和未选中状态。u常用方法常用方法1)getState():返回用户在复选框所做的选择,如果复选框:返回用户在复选框所做的选择,如果复选框被选中,该方法返回值为被选中,该方法返回值为true;如果复选框未被选中,该方;如果复选框未被选中,该方法返回值为法返回值为
20、false。2)setState():设置复选框。:设置复选框。bold.setState(true); 设置设置bold为为选中状态。选中状态。二、知识点讲解二、知识点讲解计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室知识点之六:知识点之六:JFrame组件之组件之JCheckBoxu例题例题-读程序,回答问题:读程序,回答问题: 程序的运行界面是什么样子的?程序的运行界面是什么样子的? JCheckBox组件可以触发什么事件?组件向相应的事件监听器进行注组件可以触发什么事件?组件向相应的事件监听器进行注册的时候采用的是三种途径中的哪种方法?册的时候采用的是三种途径中的
21、哪种方法? 类中定义了一个类中定义了一个JTextArea组件组件t,JTextArea t=new JTextArea(6,15);这个组件在哪个方法中被使用了,如何在这个组件在哪个方法中被使用了,如何在JTextArea中当前显示的文本末中当前显示的文本末尾添加一行文本?尾添加一行文本? 如何给一个如何给一个JTextArea组件添加滚动条面板?组件添加滚动条面板? isSelected()方法的功能是什么?方法的功能是什么?二、知识点讲解二、知识点讲解计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室u例题例题-读程序,回答问题:读程序,回答问题:CheckBoxes(
22、)cb1.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e)trace(1,cb1););setLayout(new FlowLayout();JScrollPane jScrollPane=new JScrollPane(t);add(jScrollPane);/add(new JScrollPane(t);add(cb1);add(cb2);add(cb3);二、知识点讲解二、知识点讲解知识点之六:知识点之六:JFrame组件之组件之JCheckBox计算机科学与技术学院网络工程教
23、研室计算机科学与技术学院网络工程教研室u例题例题-读程序,回答问题:读程序,回答问题:public void trace(String b,JCheckBox cb)if(cb.isSelected()t.append(Box +b+ Setn);elset.append(Box +b+ Clearedn);二、知识点讲解二、知识点讲解知识点之六:知识点之六:JFrame组件之组件之JCheckBox计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室知识点之六:知识点之六:JFrame组件之单选按钮组件之单选按钮JRadioButtonu创建单选按钮对象创建单选按钮对象单选按
24、钮组组件由一组互斥的按钮组成,同一时刻只能有一单选按钮组组件由一组互斥的按钮组成,同一时刻只能有一个按钮处于选中状态。个按钮处于选中状态。RadioButtons()JRadioButton rb1=new JRadioButton(one,false);JRadioButton rb2=new JRadioButton(two,false);JRadioButton rb3=new JRadioButton(three,false);ButtonGroup b=new ButtonGroup();b.add(rb1);b.add(rb2);b.add(rb3);add(rb1);add(rb
25、2);add(rb3);二、知识点讲解二、知识点讲解计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室u例题例题-public class RadioButtons extends JFrame JTextField t=new JTextField(15); ButtonGroup b=new ButtonGroup(); JRadioButtonrb1=new JRadioButton(one,false),rb2=new JRadioButton(two,false),rb3=new JRadioButton(three,false); ActionListener a
26、l=new ActionListener()public void actionPerformed(ActionEvent e)t.setText(Radio Button:+(JRadioButton)e.getSource().getText(); ;知识点之六:知识点之六:JFrame组件之单选按钮组件之单选按钮JRadioButton二、知识点讲解二、知识点讲解计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室u例题例题-public class RadioButtons extends JFrame RadioButtons()rb1.addActionListen
27、er(al);rb2.addActionListener(al);rb3.addActionListener(al);b.add(rb1); b.add(rb2); b.add(rb3);t.setEditable(false);setLayout(new FlowLayout();add(t);add(rb1); add(rb2);add(rb3); public static void main(String args)new RadioButtons();知识点之六:知识点之六:JFrame组件之单选按钮组件之单选按钮JRadioButton二、知识点讲解二、知识点讲解计算机科学与技术学
28、院网络工程教研室计算机科学与技术学院网络工程教研室u图形界面程序设计技巧图形界面程序设计技巧三、本章小结三、本章小结在图形界面程序设计中,先认真阅读程序要求,用笔勾画在图形界面程序设计中,先认真阅读程序要求,用笔勾画一下可能需要的程序操作界面,规划好需要用到的组件及它一下可能需要的程序操作界面,规划好需要用到的组件及它们的大体排放位置。们的大体排放位置。构造方法:在图形界面程序设计中,组件的实例化,布局,构造方法:在图形界面程序设计中,组件的实例化,布局,组件事件监听器的注册等工作一般都放在构造方法中完成。组件事件监听器的注册等工作一般都放在构造方法中完成。构造方法定义好后可以先在构造方法定义
29、好后可以先在main()方法中验证一下界面中组方法中验证一下界面中组件的放置是否合理。件的放置是否合理。分析实现程序的逻辑流程,将程序中能够独立处理的流程分析实现程序的逻辑流程,将程序中能够独立处理的流程放在一个单独定义的方法中。放在一个单独定义的方法中。计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室1)四、例题讲解四、例题讲解u设计要求:设计要求:1)实现一个如图所示的客户管理系统的操作界面。)实现一个如图所示的客户管理系统的操作界面。2)单击)单击“插入插入”,“显示显示”,“查询查询”,“删除删除”四个按四个按钮的时候,文本区里面显示钮的时候,文本区里面显示“您单击
30、了插入按钮,正在执您单击了插入按钮,正在执行插入新记录操作行插入新记录操作”。计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室1)u设计要求:设计要求:3)单击)单击“移除组件移除组件”按钮,将按钮,将“插入插入”,“显示显示”,“查询查询”,“删除删除”四个按钮组件从四个按钮组件从JPanel中删除掉,并触发中删除掉,并触发ContainerEvent事件,在文本区事件,在文本区显示显示“您单击了移除按钮,从您单击了移除按钮,从JPanel中移除了插入,显示,删除和查询等中移除了插入,显示,删除和查询等按钮按钮”。4)单击)单击“重新放置组件重新放置组件”按钮,将按钮,将
31、“插入插入”,“显示显示”,“查询查询”,“删除删除”四个按钮组件重新添加到四个按钮组件重新添加到JPanel中,并触发中,并触发ContainerEvent事件,事件,在文本区显示在文本区显示“您单击了重新放置按钮,向您单击了重新放置按钮,向JPanel中重新添加了插入,显中重新添加了插入,显示,删除和查询等按钮示,删除和查询等按钮”。5)单击窗口右上角的关闭)单击窗口右上角的关闭按钮,可以将按钮,可以将JFrame窗口窗口关闭掉。关闭掉。四、例题讲解四、例题讲解计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室1)u思路思路1)界面设计)界面设计f = new JFram
32、e(客户管理子系统客户管理子系统);pl = new JPanel();pl.setLayout(new GridLayout(3, 6);f.add(BorderLayout.NORTH, pl);result = new JTextArea(60, 100);result.setEditable(false);JScrollPane jScrollPane=new JScrollPane(result);f.add(BorderLayout.CENTER, jScrollPane);类的定义类的定义public class CustomerManagementSystem extends
33、WindowAdapter implements ActionListener, ContainerListener四、例题讲解四、例题讲解计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室1)u JPanel中的第一行中的第一行JLabel label1 = new JLabel(客户信息:客户信息:);pl.add(label1);/ pl中填加组件中填加组件JLabel label11 = new JLabel();pl.add(label11);JLabel label12 = new JLabel();pl.add(label12);JLabel label13 =
34、 new JLabel();pl.add(label13);JLabel label14 = new JLabel();pl.add(label14);JLabel label15 = new JLabel();pl.add(label15);四、例题讲解四、例题讲解计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室1)JLabel label2 = new JLabel(客户姓名客户姓名:);pl.add(label2);name = new JTextField(12);pl.add(name);JLabel label3 = new JLabel(客户年龄:客户年龄:)
35、;pl.add(label3);age = new JTextField(4);pl.add(age);JLabel label4 = new JLabel(客户地址:客户地址:);pl.add(label4);address = new JTextField(30);pl.add(address);u JPanel中的第二行中的第二行四、例题讲解四、例题讲解计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室1)hidden = new JButton(移除组件移除组件);hidden.addActionListener(this);pl.add(hidden);expose
36、 = new JButton(重新放置重新放置);expose.addActionListener(this);pl.add(expose);adds = new JButton(插入插入);adds.addActionListener(this);/ 注册事件监听器注册事件监听器pl.add(adds);prints = new JButton(显示显示);prints.addActionListener(this);pl.add(prints);selects = new JButton(查询查询);selects.addActionListener(this);pl.add(select
37、s);deletes = new JButton(删除删除);deletes.addActionListener(this);pl.add(deletes);pl.addContainerListener(this);/ 把把pl注册给容器注册给容器事件的事件监听事件的事件监听ContainerListenerf.add(BorderLayout.NORTH, pl);/ 将将pl放置在放置在Frame的北方向上的北方向上u JPanel中的第三行中的第三行四、例题讲解四、例题讲解计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室1)for (int i = 0; i 4;
38、i+) lbli = new JLabel();/ 实例化空白标签实例化空白标签f.setSize(600, 300);/ 设置设置Frame的大小的大小f.setVisible(true);/ 设置设置Frame为可见为可见f.addWindowListener(this);/ 将将Frame注册给窗口事件监听者注册给窗口事件监听者WindowListeneru JPanel中的第三行中的第三行四、例题讲解四、例题讲解计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室1)u 2.定义定义ActionListener接口的方法接口的方法actionPerformed()pub
39、lic void actionPerformed(ActionEvent e) if (e.getSource() = adds) result.append(n);result.append(您单击了插入按钮,正在执行插入新记录操作您单击了插入按钮,正在执行插入新记录操作n); else if (e.getSource() = prints) result.append(n);result.append(您单击了显示按钮,正在执行显示记录操作您单击了显示按钮,正在执行显示记录操作n); else if (e.getSource() = selects) result.append(n);result.append(您单击了查询按钮,正在执行查询记录操作您单击了查询按钮,正在执行查询记录操作n); else if (e.getSource() = deletes) resul
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年尚义县教师招聘笔试备考试题及答案解析
- 亚运村中心招聘全科医生1人笔试模拟试题及答案解析
- 2026年方正县教师招聘考试参考题库及答案解析
- 招聘18人!玛沁县紧密型医共体2026年下半年编外人员招聘笔试参考题库及答案解析
- 2026武汉市疾病预防控制中心招聘眼视光师1名笔试模拟试题及答案解析
- 2026重庆巫山县生态环境局招聘7人笔试备考题库及答案解析
- 2026年兴业县教师招聘笔试备考题库及答案解析
- 2026年柏乡县教师招聘笔试参考题库及答案解析
- 2026福建农林大学附属小学福州仓山淮安实验小学招聘笔试模拟试题及答案解析
- 2026贵州黔南公路建设养护有限公司公开招聘3人笔试模拟试题及答案解析
- 眼科疾病诊疗技术新进展与挑战
- 2026年初三年级资深班主任工作经验分享课件-班级管理的“细”与“实”
- 2026年丽江市消防救援局第三批政府专职消防员、消防文员招聘(55人)笔试备考试题及答案详解
- 2026年中考英语短文填空(7大考点14篇跟踪训练)
- 高校实验室建设项目投标文件
- 住宅项目施工总承包工程方案投标文件(技术标)
- 营商环境平台建设方案
- 2026新教材统编版九年级上册历史:全册教材问题答案
- 2026年国企纪检监察岗位面试题含答案
- 2026北京市市政工程设计研究总院有限公司校园招聘笔试历年参考题库
- 七大浪费分析与改善培训
评论
0/150
提交评论