第一部分:理论知识

第11章 事件处理(事件处理基础; 动作; 鼠标事件;AWT事件继承层次)

1. 事件源(event source):能够产生事件的对象都可 以成为事件源,如文本框、按钮等。一个事件源是一个 能够注册监听器并向监听器发送事件对象的对象。

2. 事件监听器(event listener):事件监听器对象接 收事件源发送的通告(事件对象),并对发生的事件作 出响应。一个监听器对象就是一个实现了专门监听器接 口的类实例,该类必须实现接口中的方法,这些方法当 事件发生时,被自动执行。

3. 事件对象(event object):Java将事件的相关信息 封装在一个事件对象中,所有的事件对象都最终派生于 java.util.EventObject类。不同的事件源可以产生不 同类别的事件

4.AWT事件处理机制的概要:

(1) 监听器对象:是一个实现了特定监听器接口( listener interface)的类实例。

(2)事件源:是一个能够注册监听器对象并发送事件对 象的对象。

(3)当事件发生时,事件源将事件对象自动传递给所 有注册的监听器。

(4) 监听器对象利用事件对象中的信息决定如何对事 件做出响应。

5.GUI设计中,程序员需要对组件的某种事件进行响应和处理时,必须完成两个步骤:

(1) 定义实现某事件监听器接口的事件监听器类,并具体化接口中声明的事件处理抽象方法。

(2) 为组件注册实现了规定接口的事件监听器对象;

6.注册监听器方法 eventSourceObject.addEventListener(eventListenerObject)

下面是监听器的一个示例: ActionListener listener = …;

JButton button=new JButton(“Ok”); button.addActionListener(listener);

7.动作事件(ActionEvent):当特定组件动作(点 击按钮)发生时,该组件生成此动作事件。

(1) 该 事 件 被 传 递 给 组 件 注 册 的 每 一 个 ActionListener 对象, 并 调 用 监 听 器 对 象 的 actionPerformed方法以接收这类事件对象。

(2)能够触发动作事件的动作,主要包括:

1) 点击按钮

2) 双击一个列表中的选项;

3) 选择菜单项;

4) 在文本框中输入回车。

8. 监听器接口的实现

监听器类必须实现与事件源相对应的接口,即必须提供接口中方法的实现。

⚫ 监听器接口方法实现

class Mylistener implements ActionListener
{
public void actionPerformed (ActionEvent event)
{ …… }
}

9.命令按钮Jbutton主要API
a.创建按钮对象
JButton类常用的一组构造方法:
(1) JButton(String text):创建一个带文本的按钮。
(2) JButton(Icon icon) :创建一个带图标的按钮。
(3)JButton(String text, Icon icon) :创建一个带文本和图标
的按钮。
b.按钮对象的常用方法
① getLabel( ):返回按钮的标签字符串;
② setLabel(String s):设置按钮的标签为字符串s。

10. 用匿名类、lambda表达式简化程序

例ButtonTest.java中,各按钮需要同样的处理:
1) 使用字符串构造按钮对象;
2) 把按钮添加到面板上;
3) 用对应的颜色构造一个动作监听器;
4) 注册动作监听器。

11.适配器类

12.用匿名类简化

13.动作事件

14.鼠标事件


第二部分:实验部分

实验十三  图形界面事件处理技术

实验时间 2018-11-22

1、实验目的与要求

(1) 掌握事件处理的基本原理,理解其用途;

(2) 掌握AWT事件模型的工作机制;

(3) 掌握事件处理的基本编程模型;

(4) 了解GUI界面组件观感设置方法;

(5) 掌握WindowAdapter类、AbstractAction类的用法;

(6) 掌握GUI程序中鼠标事件处理技术。

2、实验内容和步骤

实验1: 导入第11章示例程序,测试程序并进行代码注释。

测试程序1:

l 在elipse IDE中调试运行教材443页-444页程序11-1,结合程序运行结果理解程序;

l 在事件处理相关代码处添加注释;

l 用lambda表达式简化程序;

l 掌握JButton组件的基本API;

l 掌握Java中事件处理的基本编程模型。

package First;import java.awt.*;
import javax.swing.*;/*** @version 1.34 2015-06-12* @author Cay Horstmann*/
public class ButtonTest
{public static void main(String[] args){EventQueue.invokeLater(() -> {JFrame frame = new ButtonFrame();//创建对象;超类量引用子类对象;frame.setTitle("ButtonTest");//程序/软件的名字frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭操作;frame.setVisible(true);//使界面可视化;
      });}
}

 1 package First;2 3 import java.awt.*;4 import java.awt.event.*;5 import javax.swing.*;6 7 /**8  * A frame with a button panel9  */
10 public class ButtonFrame extends JFrame {
11     private JPanel buttonPanel;
12     private static final int DEFAULT_WIDTH = 300*2;
13     private static final int DEFAULT_HEIGHT = 200*2;
14
15     public ButtonFrame() {
16         setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
17         buttonPanel = new JPanel();
18         makeButton("黄色", Color.yellow);
19         makeButton("蓝色", Color.blue);
20         makeButton("红色", Color.red);
21         makeButton("绿色",Color.green);
22             //添加面板到框架里
23         add(buttonPanel);
24
25     }
26
27     protected void makeButton(String name,Color backgound) {
28         // 创建按钮
29         JButton button = new JButton(name);
30         // //把按钮添加到面板上
31         buttonPanel.add(button);
32         // create button actions
33         //方法一:通过内部类方式实现
34         /*
35                //构造一个对象,并将对象设置为按钮监听器
36               ColorAction action = new ColorAction(backgound);
37         // 为按钮添加监听器
38         button.addActionListener(action);*/
39         //方法二:匿名内部类方式实现
40         /*button.addActionListener(new ActionListener() {
41
42             @Override
43             public void actionPerformed(ActionEvent e) {
44                 // TODO 自动生成的方法存根
45                 buttonPanel.setBackground(backgound);
46             }
47         });*/
48         //方法三通过lambad表达式实现
49         button.addActionListener((e)->{
50             buttonPanel.setBackground(backgound);
51         });
52
53     }
54
55     /**
56      * An action listener that sets the panel's background color.
57      */
58     //这是实现了 ActionListener接口的内部类
59     /*private class ColorAction implements ActionListener {
60         private Color backgroundColor;
61
62         public ColorAction(Color c) {
63             backgroundColor = c;
64         }
65             //实现ActionListener接口,监听器类必须有一个actionPerformed方法
66         public void actionPerformed(ActionEvent event) {
67             buttonPanel.setBackground(backgroundColor);
68         }
69     }*/
70 

测试程序2:

l 在elipse IDE中调试运行教材449页程序11-2,结合程序运行结果理解程序;

l 在组件观感设置代码处添加注释;

l 了解GUI程序中观感的设置方法。

 1 package Second;2 3 import java.awt.*;4 import javax.swing.*;5 6 /**7  * @version 1.32 2015-06-128  * @author Cay Horstmann9  */
10 public class PlafTest
11 {
12    public static void main(String[] args)
13    {
14       EventQueue.invokeLater(() -> {
15          JFrame frame = new PlafFrame();
16          frame.setTitle("PlafTest");
17          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
18          frame.setVisible(true);
19       });
20    }
21 }

1 package Second;2 3 import javax.swing.JButton;4 import javax.swing.JFrame;5 import javax.swing.JPanel;6 import javax.swing.SwingUtilities;7 import javax.swing.UIManager;8 9 /**
10  * A frame with a button panel for changing look-and-feel
11  */
12 public class PlafFrame extends JFrame
13 {
14    private JPanel buttonPanel;
15
16    public PlafFrame()
17    {
18       buttonPanel = new JPanel();
19       //获取所有安装的观感实现
20
21       UIManager.LookAndFeelInfo[] infos = UIManager.getInstalledLookAndFeels();
22       for (UIManager.LookAndFeelInfo info : infos)
23          makeButton(info.getName(), info.getClassName());
24
25       add(buttonPanel);
26       pack();
27    }
28
29    /**
30     * Makes a button to change the pluggable look-and-feel.
31     * @param name the button name
32     * @param className the name of the look-and-feel class
33     */
34    private void makeButton(String name, String className)
35    {
36       // 向面板添加按钮;
37
38       JButton button = new JButton(name);
39       buttonPanel.add(button);
40
41       // 设置按钮动作;
42
43       button.addActionListener(event -> {
44          // 按钮动作:切换到新的外观和感觉
45          try
46          {
47             UIManager.setLookAndFeel(className);
48             //调用静态方法,刷新全部的组件集。这里需要向方法提供一个组件,并由此找到其他的所有组件
49             //外部对象的this引用必须将外部类名作为前缀
50
51             SwingUtilities.updateComponentTreeUI(this);
52             pack();
53          }
54          catch (Exception e)
55          {
56             e.printStackTrace();
57          }
58       });
59    }
60 }

测试程序3:

l 在elipse IDE中调试运行教材457页-458页程序11-3,结合程序运行结果理解程序;

l 掌握AbstractAction类及其动作对象;

l 掌握GUI程序中按钮、键盘动作映射到动作对象的方法。

1 package Third;2 3 import java.awt.*;4 import javax.swing.*;5 6 /**7  * @version 1.34 2015-06-128  * @author Cay Horstmann9  */
10 public class ActionTest
11 {
12    public static void main(String[] args)
13    {
14       EventQueue.invokeLater(() -> {
15          JFrame frame = new ActionFrame();
16          frame.setTitle("ActionTest");
17          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
18          frame.setVisible(true);
19       });
20    }
21 }

1 package Third;2 3 import java.awt.*;4 import java.awt.event.*;5 import javax.swing.*;6 7 /**8  * A frame with a panel that demonstrates color change actions.9  */
10 public class ActionFrame extends JFrame
11 {
12    private JPanel buttonPanel;
13    private static final int DEFAULT_WIDTH = 300;
14    private static final int DEFAULT_HEIGHT = 200;
15
16    public ActionFrame()
17    {
18       setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
19
20       buttonPanel = new JPanel();
21
22       // define actions
23       Action yellowAction = new ColorAction("Yellow", new ImageIcon("yellow-ball.gif"),
24             Color.YELLOW);
25       Action blueAction = new ColorAction("Blue", new ImageIcon("blue-ball.gif"), Color.BLUE);
26       Action redAction = new ColorAction("Red", new ImageIcon("red-ball.gif"), Color.RED);
27
28     //用Action对象构造按钮,把动作和按钮关联起来
29
30       buttonPanel.add(new JButton(yellowAction));
31       buttonPanel.add(new JButton(blueAction));
32       buttonPanel.add(new JButton(redAction));
33
34       // add panel to frame
35       add(buttonPanel);
36
37     //得到顶层组件的WHEN_ANCESTOR_OF_FOCUSED_COMPONENT输入映射
38
39       // associate the Y, B, and R keys with names
40       InputMap imap = buttonPanel.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
41      //将(按键,动作键)添加到输入映射中
42       imap.put(KeyStroke.getKeyStroke("ctrl Y"), "panel.yellow");
43       imap.put(KeyStroke.getKeyStroke("ctrl B"), "panel.blue");
44       imap.put(KeyStroke.getKeyStroke("ctrl R"), "panel.red");
45
46       // associate the names with actions、
47       //得到顶层组件的动作映射
48       ActionMap amap = buttonPanel.getActionMap();
49     //将(动作键,动作对象)添加到映射中
50
51       amap.put("panel.yellow", yellowAction);
52       amap.put("panel.blue", blueAction);
53       amap.put("panel.red", redAction);
54    }
55
56    public class ColorAction extends AbstractAction
57    {
58       /**
59        * Constructs a color action.
60        * @param name the name to show on the button
61        * @param icon the icon to display on the button
62        * @param c the background color
63        */
64       public ColorAction(String name, Icon icon, Color c)
65       {
66         //存储命令的名称、图标、简要说明和需要的颜色
67          putValue(Action.NAME, name);
68          putValue(Action.SMALL_ICON, icon);
69          putValue(Action.SHORT_DESCRIPTION, "Set panel color to " + name.toLowerCase());//显示在工具提示里
70
71          putValue("color", c);
72       }
73
74       public void actionPerformed(ActionEvent event)
75       {
76          Color c = (Color) getValue("color");
77          buttonPanel.setBackground(c);
78       }
79    }
80 }

测试程序4:

l 在elipse IDE中调试运行教材462页程序11-4、11-5,结合程序运行结果理解程序;

l 掌握GUI程序中鼠标事件处理技术。

 1 package Forth;2 3 import java.awt.*;4 import javax.swing.*;5 6 /**7  * @version 1.34 2015-06-128  * @author Cay Horstmann9  */
10 public class MouseTest
11 {
12    public static void main(String[] args)
13    {
14       EventQueue.invokeLater(() -> {
15          JFrame frame = new MouseFrame();
16          frame.setTitle("MouseTest");
17          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
18          frame.setVisible(true);
19       });
20    }
21 }

1 package Forth;2 3 import javax.swing.*;4 5 /**6  * A frame containing a panel for testing mouse operations7  */8 public class MouseFrame extends JFrame9 {
10    public MouseFrame()
11    {
12       add(new MouseComponent());
13       pack();
14    }
15 }

 1 package Forth;2 3 import java.awt.*;4 import java.awt.event.*;5 import java.awt.geom.*;6 import java.util.*;7 import javax.swing.*;8 9 /**10  * A component with mouse operations for adding and removing squares.11  */12 public class MouseComponent extends JComponent13 {14    private static final int DEFAULT_WIDTH = 300;15    private static final int DEFAULT_HEIGHT = 200;16 17    private static final int SIDELENGTH = 10;18    private ArrayList<Rectangle2D> squares;19    private Rectangle2D current; // the square containing the mouse cursor20 21    public MouseComponent()22    {23       squares = new ArrayList<>();24       current = null;25 26       addMouseListener(new MouseHandler());27       addMouseMotionListener(new MouseMotionHandler());28    }29 30    public Dimension getPreferredSize() { return new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT); }   31    32    public void paintComponent(Graphics g)33    {34       Graphics2D g2 = (Graphics2D) g;35 36       // draw all squares37       for (Rectangle2D r : squares)38          g2.draw(r);39    }40 41    /**42     * Finds the first square containing a point.43     * @param p a point44     * @return the first square that contains p45     */46    public Rectangle2D find(Point2D p)47    {48       for (Rectangle2D r : squares)49       {50          if (r.contains(p)) return r;51       }52       return null;53    }54 55    /**56     * Adds a square to the collection.57     * @param p the center of the square58     */59    public void add(Point2D p)60    {61       double x = p.getX();62       double y = p.getY();63 64       current = new Rectangle2D.Double(x - SIDELENGTH / 2, y - SIDELENGTH / 2, SIDELENGTH,65             SIDELENGTH);66       squares.add(current);67       repaint();68    }69 70    /**71     * Removes a square from the collection.72     * @param s the square to remove73     */74    public void remove(Rectangle2D s)75    {76       if (s == null) return;77       if (s == current) current = null;78       squares.remove(s);79       repaint();80    }81    82  //两个独立的接口MouseListener和MouseMotionListener,有利于提高效率。83    //当用户移动鼠标时,只关心鼠标点击的监听器就不会被多余的鼠标移动所困扰。84    private class MouseHandler extends MouseAdapter85    {86       public void mousePressed(MouseEvent event)87       {88          // add a new square if the cursor isn't inside a square89         //getPoint方法返回事件源组件左上角的x y坐标90           //判断该处是否已经绘制图形91          current = find(event.getPoint());92          if (current == null) add(event.getPoint());93       }94 95       public void mouseClicked(MouseEvent event)96       {97          // remove the current square if double clicked98          current = find(event.getPoint());99        //双击鼠标,擦除方块
100          if (current != null && event.getClickCount() >= 2) remove(current);
101       }
102    }
103
104    private class MouseMotionHandler implements MouseMotionListener
105    {
106      //移动鼠标的同时按下鼠标,调用mouseMoved
107       public void mouseMoved(MouseEvent event)
108       {
109          // set the mouse cursor to cross hairs if it is inside
110          // a rectangle
111         //光标在一个小方块之上时变成另外一种形状(十字)
112          if (find(event.getPoint()) == null) setCursor(Cursor.getDefaultCursor());
113          else setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));
114       }
115
116     //更新光标位置
117       public void mouseDragged(MouseEvent event)
118       {
119          if (current != null)
120          {
121             int x = event.getX();
122             int y = event.getY();
123            //设置形状坐标和大小
124             // drag the current rectangle to center it at (x, y)
125             current.setFrame(x - SIDELENGTH / 2, y - SIDELENGTH / 2, SIDELENGTH, SIDELENGTH);
126             repaint();
127          }
128       }
129    }
130 }

实验2:结对编程练习

利用班级名单文件、文本框和按钮组件,设计一个有如下界面(图1)的点名器,要求用户点击开始按钮后在文本输入框随机显示2017级网络与信息安全班同学姓名,如图2所示,点击停止按钮后,文本输入框不再变换同学姓名,此同学则是被点到的同学姓名。

图1 点名器启动界面

图2 点名器点名界面

 1 package practise1;2 3 import java.awt.*;4 import javax.swing.*;5 6 7 8 9 public class RandomName {
10
11     public static void main(String[] args) {
12         // TODO Auto-generated method stub
13
14            {
15               EventQueue.invokeLater(() -> {
16                  JFrame  A= new ButtonFrame();
17                  A.setTitle("点名器");
18                  A.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
19                  A.setVisible(true);
20               });
21            }
22     }
23
24 }

  1 package practise1;2 3 import java.awt.Color;4 import java.awt.Container;5 import java.awt.event.*;6 import java.io.*;7 import java.util.*;8 import java.util.Timer;9 10 import javax.swing.*;11 12 public class ButtonFrame extends JFrame {13     private ArrayList arrayList;14 15 16 17     {18     arrayList = new ArrayList<>();19     //读文件20     File file = new File("H:/List.txt");21     FileInputStream fis;22     try {23         fis = new FileInputStream(file);24         InputStreamReader in = new InputStreamReader(fis);25         BufferedReader buf = new BufferedReader(in);26         String readLine;27         while ((readLine = buf.readLine())!=null) {28             arrayList.add(readLine);29             30         }31     } catch (FileNotFoundException e1) {32         // TODO Auto-generated catch block33         e1.printStackTrace();34     } catch (IOException e1) {35         // TODO Auto-generated catch block36         e1.printStackTrace();37     }38     }39     private JPanel buttonPanel;40     private static final int DEFAULT_WIDTH = 500;41     private static final int DEFAULT_HEIGHT = 300;42     43     44 45     public ButtonFrame() {46         setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);47         buttonPanel = new JPanel();48         buttonPanel.setLayout(null);49         JLabel jLabel = new JLabel("随机点名器");50         JButton jButton = new JButton("开始");51         jLabel.setBounds(200, 40, 65, 40);52         jButton.setBounds(200, 90, 65, 40);53         54         55         56         jButton.addActionListener(new ActionListener() {57 58             Timer timer;59 60  61 62             public void actionPerformed(ActionEvent e) {63 64                 if (jButton.getText().equals("开始")) {65 66                     timer = new Timer();;67 68                     TimerTask timerTask = new TimerTask() {69 70                         public void run() {71 72                             jButton.setText("停止");73 74                             jButton.setBackground(Color.red);75 76                             jLabel.setText((String) arrayList.get((int) (Math.random() * 43)));77 78                         }79 80  81 82                     };83 84                     timer.schedule(timerTask, 0, 10);85 86                 }87 88                 if (jButton.getText().equals("停止")) {89 90                     timer.cancel();91 92                     jButton.setText("开始");93 94                     jButton.setBackground(Color.gray);95 96                 }97 98             }99
100         });
101
102
103
104
105         buttonPanel.add(jLabel);
106         buttonPanel.add(jButton);
107         add(buttonPanel);
108
109     }
110
111
112 }

实验总结:

测试程序环节当中,第一个测试程序花费的时间挺长的,对于将程序改成Lambda表达式还是不太懂。在结对编程环节当中,完全没有任何的思路,想了很久还是不知道从何下手。看了学长的程序之后,还是不会。

好文要顶 关注我 收藏该文

转载于:https://www.cnblogs.com/zd0421/p/10016118.html

201771010137 赵栋 《面向对象程序设计(java)》第十三周学习总结相关推荐

  1. 201871010115——马北《面向对象程序设计JAVA》第二周学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...

  2. 《数据结构与面向对象程序设计》第1周学习总结

    20182316胡泊 2019-2020-1 <数据结构与面向对象程序设计>第1周学习总结 教材学习内容总结 简单java程序是有哪些部分组成的 Java程序好的排版布局是怎样的 程序开发 ...

  3. 201521123122 《java程序设计》第十三周学习总结

    ## 201521123122 <java程序设计>第十三周实验总结 ## 1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2. 书面作业 1 ...

  4. 201521123022 《Java程序设计》 第十三周学习总结

    1. 本周学习总结 2. 书面作业 Q1. 网络基础 Q1.1 比较ping www.baidu.com与ping cec.jmu.edu.cn,分析返回结果有何不同?为什么会有这样的不同? 前者IP ...

  5. 四十八.面向对象程序设计——Java语言第一周编程题:分数

    题目内容: 设计一个表示分数的类Fraction.这个类用两个int类型的变量分别表示分子和分母. 这个类的构造函数是: Fraction(int a, int b) 构造一个a/b的分数. 这个类要 ...

  6. 201621123053《Java程序设计》第十三周学习笔记文章

    42#1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2. 为你的系统增加网络功能(购物车.图书馆管理.斗地主等)-分组完成 为了让你的系统可以被多个用户 ...

  7. 201771010137 赵栋《面向对象程序设计(java)》第十一周学习总结

    一:理论部分. 1.数据结构:分为a.线性数据结构,如线性表.栈.队列.串.数组和文件. b.非线性数据结构,如树和图. 1)所有数据元素在同一个线性表中必须是相同的数据类型. 线性表按其存储结构可分 ...

  8. 张季跃 201771010139《面向对象程序设计(java)》第十三周学习总结

    张季跃 201771010139<面向对象程序设计(java)>第十三周学习总结 实验部分: 1.实验目的与要求 (1) 掌握事件处理的基本原理,理解其用途: (2) 掌握AWT事件模型的 ...

  9. 201771010118马昕璐《面向对象程序设计java》第八周学习总结

    第一部分:理论知识学习部分 1.接口 在Java程序设计语言中,接口不是类,而是对类的一组需求描述,由常量和一组抽象方法组成.Java为了克服单继承的缺点,Java使用了接口,一个类可以实现一个或多个 ...

  10. 【Java】《面向对象程序设计——Java语言》Castle代码修改整理

    前言 最近闲来无事刷刷MOOC,找到以前看的浙大翁凯老师的<面向对象程序设计--Java语言>课程,重新过一遍仍觉受益颇深. 其中有一个Castle的例子,思路很Nice但代码很烂,翁凯老 ...

最新文章

  1. JAVA 条件语句 跟PHP没有区别!!!!!
  2. 思科服务器 vmware虚拟多少个hba卡,利用Cisco UCS 管理虚拟机网络(上)
  3. P2341 [HAOI2006]受欢迎的牛 强连通
  4. p标题/p能设置字体的大小和颜色
  5. java 反射无参方法_java 反射 调用无参数方法?
  6. 虚拟化软件Xen的简单应用
  7. 不要再被Python洗脑了,来看看这个吧......
  8. 分类算法学习(四)——决策树算法的原理及简单实现
  9. devc 能优化吗_为啥觉得Dev c++越来越难用?
  10. 解决 WinXP下 libcurl.dll 无法定位程序输入点GetTickCount64问题
  11. AI创作现状与未来发展浅析
  12. 软件测试中期答辩,毕业论文中期答辩报告.doc
  13. [Java聊天室服务器]实战之六 去除死链接
  14. 国外著名英文搜索引擎大全及分类
  15. 什么是自然语言处理(NLP)?定义+应用一次性看个明白
  16. CIO:人工智能将改变企业IT
  17. sql server服务器 性能,初涉SQL Server性能问题(1/4):服务器概况
  18. native-JavaScript通信流程( 基于最新的 react native版本 )
  19. 精彩回顾 | Dev.Together 2022 开发者生态峰会圆满落幕
  20. 网络资源计算机教学设计,第11课 网络资源任我搜 教案

热门文章

  1. Java编程那些事儿70——抽象类和接口(三)
  2. [SCTF2020]CloudDisk
  3. 无线鼠标迟钝但并不是电量问题
  4. List集合(列表)
  5. 统计学-基于R (第四版) 贾俊平编著 第二章: 数据可视化 2.1, 2.2 习题答案 【自用】
  6. 使用C#通过串口控制IT6333B电流源
  7. 应广单片机003烧录器自定义封装使用技巧
  8. Android 仿淘宝属性标签页
  9. Node学生管理案例
  10. python常用的集成开发工具,python的主流开发工具