项目

内容

这个作业属于哪个课程

https://www.cnblogs.com/nwnu-daizh/

这个作业的要求在哪里

https://www.cnblogs.com/nwnu-daizh/p/11435127.html

作业学习目标

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

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

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

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

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

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

第一部分:总结第十一章理论知识

一、 事件处理基础

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

(2) 事件监听器(event listener):事件监听器对象可以接收事件源发送的通告,并对发生的事件作出响应。

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

(4)监听器对象:实现了特定监听器接口的类的实例。

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

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

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

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

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

(h)适配器类:当程序用户试图关闭一个框架窗口时,Jframe对象就是WindowEvent的事件源,适配器类动态地满足了Java中实现监视器类的技术要求,可以通过扩展适配器类来实现窗口事件需要的动作。

动作事件(ActionEvent):

当特定组件动作(点击按钮)发生时,该组件生成此动作事件。 该 事件被传递给组件注册的每一个ActionListener 对象,并调用监听器对象的 actionPerformed方法以接收这类事件对象。

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

(1) 点击按钮 (2) 双击一个列表中的选项;(3) 选择菜单项;(4) 在文本框中输入回车。

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

创建按钮对象 JButton类常用的一组构造方法:

(1) JButton(String text):创建一个带文本的按钮。

(2) JButton(Icon icon) :创建一个带图标的按钮。

(3)JButton(String text, Icon icon) :创建一个带文本和图标的按钮。

按钮对象的常用方法:①getLabel( ):返回按钮的标签字符串;②setLabel(String s):设置按钮的标签为字符串s。

Swing程序默认使用Metal观感,采用两种方式改变观感。

第一种:在Java安装的子目录jre/lib下的文件 swing.properties中,将属性swing.defaultlaf设置为所希望的观感类名。 swing.defaultlaf = com.sun.java.swing.plaf.motif.MotifLookAndFeel –

第二种:调用静态的UIManager.setLookAndFeel方法,动态地改变观感,提供所想要的观感类名,再调用静态方法SwingUtilities.updateComponentTreeUI来刷新全部的组件集。

当程序用户试图关闭一个框架窗口时,Jframe 对象就是WindowEvent的事件源。捕获窗口事件的监听器:

WindowListener listener=…..; frame.addWindowListener(listener); 窗口监听器必须是实现WindowListener接口的类的一个对象,WindowListener接口中有七个方法,它们的名字是自解释的。

Swing包提供了非常实用的机制来封装命令,并将它们连接到多个事件源,这就是Action接口。

动作对象是一个封装下列内容的对象:

命令的说明:一个文本字符串和一个可选图标; 执行命令所需要的参数。

Action是一个接口,而不是一个类,实现这个接口的类必须要实现它的7个方法。AbstractAction 类实现了Action 接口中除 actionPerformed方法之外的所有方法,这个类存 储了所有名/值对,并管理着属性变更监听器。在动作事件处理应用中,可以直接扩展 AbstractAction 类,并在扩展类中实现actionPerformed方法。

用户点击鼠标按钮时,会调用三个监听器方法:

鼠标第一次被按下时调用mousePressed方法;鼠标被释放时调用mouseReleased方法;

两个动作完成之后,调用mouseClicked方法。鼠标在组件上移动时,会调用mouseMoved方法。

如果鼠标在移动的时候还按下了鼠标,则会调用 mouseDragged方法

鼠标事件返回值:鼠标事件的类型是MouseEvent,当发生鼠标事件时: MouseEvent类自动创建一个事件对象,以及事件发生位置的x和y坐标,作为事件返回值。

图形编辑器应用程序,其允许用户在画布上放置、移动和擦除方块

1. 当鼠标点击在所有小方块的像素之外时,会绘制一个新的小方块;

2. 当双击一个小方块内部时,会擦除该小方块;

3. 当鼠标在窗体上移动时,如果鼠标经过一个小方块的内部,光标会变成一个十字形;

4. 实现用鼠标拖动小方块。

监听鼠标点击事件,实现MouseListener接口:实现mousePressed方法:判断鼠标点击的地方是否在小方块内;如果不在小方块内,在点击的地方画一个小方块。实现mouseClicked方法 :判断鼠标点击的地方是否在小方块内;如果在小方块内,判断点击了几次,如果大于两次将该方块移除。

所有的事件都是由java.util包中的EventObject 类扩展而来。AWTEevent 是所有 AWT 事件类的父类 ,也是 EventObject的直接子类。有些Swing组件生成其他类型的事件对象,一般直接扩展于EventObject, 而不是 AWTEvent, 位于javax.swing.event.*。事件对象封装了事件源与监听器彼此通信的事件信息。在必要的时候,可以对传递给监听器对象的事件对象进行分析。

AWT将事件分为低级(low-level)事件和语义 (semantic)事件。语义事件:表达用户动作的事件。 例:点击按钮(ActionEvent)。低级事件:形成语义事件的事件AWT事件中常用的5个低级事件类:KeyEvent(一个键被按下或释放);MouseEvent(鼠标被按下、释放、移动或拖动);MouseWheelEvent(鼠标滚轮被转动);FocusEvent(某个组件获得或失去焦点); WindowEvent(窗口状态改变)

第二部分 实验部分

2、实验内容和步骤

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

测试程序1:

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

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

l  用lambda表达式简化程序;

l  掌握JButton组件的基本API;

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

package sy;

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(() -> {//调用EventQueue类方法
JFrame frame = new ButtonFrame();//生成JFrame类对象
frame.setTitle("ButtonTest");//将此窗体的标题设置为给定字符串。
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);//为界面设置可视化
});
}
}
package sy;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*; /**
* A frame with a button panel
*/
public class ButtonFrame extends JFrame//类的继承
{
private JPanel buttonPanel;
private static final int DEFAULT_WIDTH = 300;
private static final int DEFAULT_HEIGHT = 200;//定义两个静态常量 public ButtonFrame()
{
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);//设置框架对象的大小 // 创建按钮
JButton yellowButton = new JButton("Yellow");
JButton blueButton = new JButton("Blue");
JButton redButton = new JButton("Red"); buttonPanel = new JPanel(); //将三个组件添加到buttonPanel中
buttonPanel.add(yellowButton);
buttonPanel.add(blueButton);
buttonPanel.add(redButton); // 将指定组件追加到此容器的尾部
add(buttonPanel); // 生成三个监听器类对象
ColorAction yellowAction = new ColorAction(Color.YELLOW);
ColorAction blueAction = new ColorAction(Color.BLUE);
ColorAction redAction = new ColorAction(Color.RED);
yellowButton.addActionListener(yellowAction);
blueButton.addActionListener(blueAction);
redButton.addActionListener(redAction);
} /**
* An action listener that sets the panel's background color.
*/
private class ColorAction implements ActionListener//接口
{
private Color backgroundColor;//定义常量 public ColorAction(Color c)
{
backgroundColor = c;
} public void actionPerformed(ActionEvent event)
{
buttonPanel.setBackground(backgroundColor);//设置组件背景色
}
}
}
package 事件处理;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*; /**
* A frame with a button panel.
*/
public class ButtonFrame extends JFrame
{
private JPanel buttonPanel;
private static final int DEFAULT_WIDTH = 300;
private static final int DEFAULT_HEIGHT = 200; public ButtonFrame()
{
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
// 创建按钮
// var yellowButton = new JButton("Yellow");
// var blueButton = new JButton("Blue");
// var redButton = new JButton("Red"); buttonPanel = new JPanel(); // 增加黄色红色蓝色按钮到盘中
// buttonPanel.add(yellowButton);
// buttonPanel.add(blueButton);
// buttonPanel.add(redButton); // 在表框中添加控制盘中 // // 创建按钮动作
// var yellowAction = new ColorAction(Color.YELLOW);
// var blueAction = new ColorAction(Color.BLUE);
// var redAction = new ColorAction(Color.RED); // 将动作变化添加到按钮中
// yellowButton.addActionListener(yellowAction);
// blueButton.addActionListener(blueAction);
// redButton.addActionListener(redAction);
//
makeButton("Yellow",Color.YELLOW);
makeButton("Blue",Color.BLUE);
makeButton("Red",Color.RED);
add(buttonPanel);
} public void makeButton(String name,Color backgroundColor)
{
JButton button=new JButton(name);
buttonPanel.add(button);
ColorAction action=new ColorAction(backgroundColor);
button.addActionListener(action);
}
/**
* An action listener that sets the panel's background color.
*/
private class ColorAction implements ActionListener
{
private Color backgroundColor; public ColorAction(Color c)
{
backgroundColor = c;
} public void actionPerformed(ActionEvent event)
{
buttonPanel.setBackground(backgroundColor);
}
}
}

第二种简化方式

package 事件处理;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*; /**
* A frame with a button panel
*/
public class ButtonFrame extends JFrame {
private JPanel buttonPanel;
private static final int DEFAULT_WIDTH = 300*2;
private static final int DEFAULT_HEIGHT = 200*2; public ButtonFrame() {
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
buttonPanel = new JPanel();
makeButton("黄色", Color.yellow);
makeButton("蓝色", Color.blue);
makeButton("红色", Color.red);
makeButton("绿色",Color.green);
add(buttonPanel); } protected void makeButton(String name,Color backgound) {
// create buttons
JButton button = new JButton(name);
// add buttons to panel
buttonPanel.add(button);
// create button actions
//方法一:通过内部类方式实现
/*ColorAction action = new ColorAction(backgound);
// associate actions with buttons
button.addActionListener(action);*/
//方法二:匿名内部类方式实现
/*button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
buttonPanel.setBackground(background);
}
});*/
//方法三通过lambda表达式实现
button.addActionListener((e)->{
buttonPanel.setBackground(backgound);
}); } /**
* An action listener that sets the panel's background color.
*/
//这是实现了 ActionListener接口的内部类
/*private class ColorAction implements ActionListener {
private Color backgroundColor; public ColorAction(Color c) {
backgroundColor = c;
} public void actionPerformed(ActionEvent event) {
buttonPanel.setBackground(backgroundColor);
}
}*/
}

测试程序2:

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

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

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

package plaf;

import java.awt.*;
import javax.swing.*; /**
* @version 1.32 2015-06-12
* @author Cay Horstmann
*/
public class PlafTest
{
public static void main(String[] args)
{
EventQueue.invokeLater(() -> {//lambda表达式
JFrame frame = new PlafFrame();//生成类对象
frame.setTitle("PlafTest");//设置组件的名称
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
});
}
}
package plaf;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.UIManager; /**
* A frame with a button panel for changing look-and-feel
*/
public class PlafFrame extends JFrame//类的继承机制
{
private JPanel buttonPanel; public PlafFrame()
{
buttonPanel = new JPanel(); UIManager.LookAndFeelInfo[] infos = UIManager.getInstalledLookAndFeels();
for (UIManager.LookAndFeelInfo info : infos)
makeButton(info.getName(), info.getClassName()); add(buttonPanel);
pack();
} /**
* Makes a button to change the pluggable look-and-feel.
* @param name the button name
* @param className the name of the look-and-feel class
*/
private void makeButton(String name, String className)
{
// 在组件中设置按钮 JButton button = new JButton(name);
buttonPanel.add(button); // 设置功能按钮 button.addActionListener(event -> {
// 点击按钮,转换组件的感观效果
try//异常处理机制
{
UIManager.setLookAndFeel(className);
SwingUtilities.updateComponentTreeUI(this);
pack();
}
catch (Exception e)
{
e.printStackTrace();
}
});
}
}

运行结果:

测试程序3:

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

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

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

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

package action;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*; /**
* A frame with a panel that demonstrates color change actions.
*/
public class ActionFrame extends JFrame//类的继承
{
private JPanel buttonPanel;
private static final int DEFAULT_WIDTH = 300;
private static final int DEFAULT_HEIGHT = 200;//定义静态常量 public ActionFrame()
{
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);//调整组件的大小,使其宽度为 width,高度为 height。 buttonPanel = new JPanel();
Action yellowAction = new ColorAction("Yellow", new ImageIcon("yellow-ball.gif"),
Color.YELLOW);
Action blueAction = new ColorAction("Blue", new ImageIcon("blue-ball.gif"), Color.BLUE);
Action redAction = new ColorAction("Red", new ImageIcon("red-ball.gif"), Color.RED); // 为所有的Action设置按钮
buttonPanel.add(new JButton(yellowAction));
buttonPanel.add(new JButton(blueAction));
buttonPanel.add(new JButton(redAction)); // 在按钮上再设置方框
add(buttonPanel); // 将字母与颜色名字对应
InputMap imap = buttonPanel.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
imap.put(KeyStroke.getKeyStroke("ctrl Y"), "panel.yellow");
imap.put(KeyStroke.getKeyStroke("ctrl B"), "panel.blue");
imap.put(KeyStroke.getKeyStroke("ctrl R"), "panel.red");
ActionMap amap = buttonPanel.getActionMap();
amap.put("panel.yellow", yellowAction);
amap.put("panel.blue", blueAction);
amap.put("panel.red", redAction);//添加一个 key 到 action 的绑定
} public class ColorAction extends AbstractAction//继承
{
/**
* Constructs a color action.
* @param name the name to show on the button
* @param icon the icon to display on the button
* @param c the background color
*/
public ColorAction(String name, Icon icon, Color c)
{
putValue(Action.NAME, name);//设置与指定键关联的 Value。
putValue(Action.SMALL_ICON, icon);
putValue(Action.SHORT_DESCRIPTION, "Set panel color to " + name.toLowerCase());
putValue("color", c);
} public void actionPerformed(ActionEvent event)//发生操作时调用
{
Color c = (Color) getValue("color");
buttonPanel.setBackground(c);//设置此组件的背景色
}
}
}
package action;

import java.awt.*;
import javax.swing.*; /**
* @version 1.34 2015-06-12
* @author Cay Horstmann
*/
public class ActionTest
{
public static void main(String[] args)
{
EventQueue.invokeLater(() -> {//lambda表达式
JFrame frame = new ActionFrame();//生成类对象
frame.setTitle("ActionTest");//将此窗体的标题设置为指定的字符串。
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
});
}
}

运行结果:

测试程序4:

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

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

package mouse;

import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.util.*;
import javax.swing.*; /**
* A component with mouse operations for adding and removing squares.
*/
public class MouseComponent extends JComponent//类的继承
{
private static final int DEFAULT_WIDTH = 300;
private static final int DEFAULT_HEIGHT = 200;//定义静态常量 private static final int SIDELENGTH = 10;
private ArrayList<Rectangle2D> squares;
private Rectangle2D current; // the square containing the mouse cursor public MouseComponent()
{
squares = new ArrayList<>();//构造空列表
current = null; addMouseListener(new MouseHandler());//添加指定的鼠标侦听器,用来接收发自此组件的动作事件
addMouseMotionListener(new MouseMotionHandler());
} public Dimension getPreferredSize() {
return new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT);
} public void paintComponent(Graphics g)
{
Graphics2D g2 = (Graphics2D) g; //绘制正方形
for (Rectangle2D r : squares)
g2.draw(r);
} /**
* Finds the first square containing a point.
* @param p a point
* @return the first square that contains p
*/
public Rectangle2D find(Point2D p)//Point2D类表示 (x,y) 坐标空间中位置的点
{
for (Rectangle2D r : squares)
{
if (r.contains(p))//判断指定的 Point2D 是否在 Shape 边界内
return r;
}
return null;
} /**
* Adds a square to the collection.
* @param p the center of the square
*/
public void add(Point2D p)
{
double x = p.getX();//以 double 返回 Point2D 的 X 坐标
double y = p.getY();//以 double 返回 Point2D 的 Y 坐标。 current = new Rectangle2D.Double(x - SIDELENGTH / 2, y - SIDELENGTH / 2, SIDELENGTH,
SIDELENGTH);
squares.add(current);
repaint();//重绘该组件。
} /**
* Removes a square from the collection.
* @param s the square to remove
*/
public void remove(Rectangle2D s)
{
if (s == null) return;
if (s == current) current = null;
squares.remove(s);//移除此列表中首次出现的指定元素
repaint();//重绘该组件
} private class MouseHandler extends MouseAdapter
{
public void mousePressed(MouseEvent event)//鼠标按键在组件上按下时调用。
{
// 若鼠标不在方框内则重新绘制图形
current = find(event.getPoint());
if (current == null)
add(event.getPoint());
} public void mouseClicked(MouseEvent event)//鼠标按键在组件上单击(按下并释放)时调用。
{
// 如果鼠标单击两次则去除当前的方框
current = find(event.getPoint());
if (current != null && event.getClickCount() >= 2)//判断条件是否成立
remove(current);
}
} private class MouseMotionHandler implements MouseMotionListener//接口的实现
{
public void mouseMoved(MouseEvent event)
{
// 设置正方形移动时只在方框内可见 if (find(event.getPoint()) == null)
setCursor(Cursor.getDefaultCursor());
else setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));
} public void mouseDragged(MouseEvent event)//鼠标按键在组件上按下并拖动时调用
{
if (current != null)
{
int x = event.getX();//返回事件相对于源组件的 x 坐标。
int y = event.getY();//返回事件相对于源组件的 y 坐标。 // 以x,y为中心坐标绘制正方形
current.setFrame(x - SIDELENGTH / 2, y - SIDELENGTH / 2, SIDELENGTH, SIDELENGTH);
repaint();//重绘该组件
}
}
}
}
package mouse;

import javax.swing.*;

/**
* A frame containing a panel for testing mouse operations
*/
public class MouseFrame extends JFrame//类的继承
{
public MouseFrame()
{
add(new MouseComponent());//将指定组件追加到此容器的尾部
pack();//调整此窗口的大小,以适合其子组件的首选大小和布局。
}
}
package mouse;

import java.awt.*;
import javax.swing.*; /**
* @version 1.34 2015-06-12
* @author Cay Horstmann
*/
public class MouseTest
{
public static void main(String[] args)
{
EventQueue.invokeLater(() -> {//lambda表达式简化程序
JFrame frame = new MouseFrame();
frame.setTitle("MouseTest");//将此窗体标题设置为指定的字符串
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);//根据参数 的值显示或隐藏此 Window
});
}
}

运行结果:

实验2:结对编程练习

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

结对编程图片:

图1 点名器启动界面

图2 点名器随机显示姓名界面

图3 点名器点名界面

结对编程代码

按 Ctrl+C 复制代码
按 Ctrl+C 复制代码

运行结果:

按照实验课上学长演示的方式设计页面样式:

通过查阅资料最后实验的到不同的页面样式:

实验总结:

我掌握了事件处理的基本原理,并且在应用中加以熟练;学习到了JFrame包中的一些常用接口,事件处理的基本编程模型,AWT事件模型的工作机制;了解了GUI界面组件观感设置方法;WindowAdapter类、AbstractAction类的用法;GUI程序中鼠标事件处理技术。通过结对编程,完成了随机点名器的实验,对事件处理机制有了更深的体会,通过本次实验,我获益良多,在今后的学习中我会更加努力。

201871010109-胡欢欢《面向对象程序设计(java)》第十三周学习总结的更多相关文章

  1. 201771010134杨其菊《面向对象程序设计java》第九周学习总结

                                                                      第九周学习总结 第一部分:理论知识 异常.断言和调试.日志 1.捕获 ...

  2. 201871010132-张潇潇《面向对象程序设计(java)》第一周学习总结

    面向对象程序设计(Java) 博文正文开头 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cn ...

  3. 扎西平措 201571030332《面向对象程序设计 Java 》第一周学习总结

    <面向对象程序设计(java)>第一周学习总结 正文开头: 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 ...

  4. 杨其菊201771010134《面向对象程序设计Java》第二周学习总结

    第三章 Java基本程序设计结构 第一部分:(理论知识部分) 本章主要学习:基本内容:数据类型:变量:运算符:类型转换,字符串,输入输出,控制流程,大数值以及数组. 1.基本概念: 1)标识符:由字母 ...

  5. 201871010124 王生涛《面向对象程序设计JAVA》第一周学习总结

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

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

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

  7. 201777010217-金云馨《面向对象程序设计(Java)》第二周学习总结

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

  8. 201871010132——张潇潇《面向对象程序设计JAVA》第二周学习总结

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

  9. 201771010123汪慧和《面向对象程序设计Java》第二周学习总结

    一.理论知识部分 1.标识符由字母.下划线.美元符号和数字组成, 且第一个符号不能为数字.标识符可用作: 类名.变量名.方法名.数组名.文件名等.第二部分:理论知识学习部分 2.关键字就是Java语言 ...

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

    201521123061 <Java程序设计>第十三周学习总结 1. 本周学习总结 2. 书面作业 1. 网络基础 1.1 比较ping www.baidu.com与ping cec.jm ...

随机推荐

  1. android appium微信等自动化的那些坑儿

    1.下载appium自动化安装环境: appium客户端 python语言支持 android studio(包含android sdk和adb) java开发环境 2.微信x5内核调试(网上有详细配 ...

  2. 关于npm(一)

    npm install X: 把X包安装到node_modules目录中修改package.json运行npm install命令时,不会自动安装X npm install X –save: 把X包安 ...

  3. Django signal(信号)

    Django中提供了"信号调度",用于在框架执行操作时解耦,就是一些动作发生的时候,信号允许特定的发送者去提醒一些接受者. Django 内置信号 Model signals pr ...

  4. [mybatis] sql语句无错误,但是执行多条sql语句时,抛出java.sql.SQLSyntaxErrorException

    错误内容 org.springframework.jdbc.BadSqlGrammarException: ### Error updating database. Cause: java.sql.S ...

  5. vue 使用watch监听实现类似百度搜索功能

    watch监听方法,watch可以监听多个变量,具体使用方法看代码: HTML: <!doctype html> <html lang="en"> < ...

  6. 解决4K屏电脑显示问题

    在科技飞速发展的年代,4K屏幕不断成为电视.电脑广告的亮点功能,它在显示效果上,确实效果不错,如下图.但是,在电脑上使用是否会影响眼睛的健康问题,还没有权威的论证. 毕竟4k高清屏幕还不是主流,很多软 ...

  7. Codeforces Round #596 (Div. 2, based on Technocup 2020 Elimination Round 2) F. Tree Factory 构造题

    F. Tree Factory Bytelandian Tree Factory produces trees for all kinds of industrial applications. Yo ...

  8. nginx nginx_upstream_check_module自动踢除后端机器

    nginx 1.14.0 描述: nginx自带的upstream配置,如果后端挂了,接口会慢,原因不讲述,故接入第三方的自动检测与自动踢除模式 nginx_upstream_check_module ...

  9. 【08月20日】A股滚动市净率PB历史新低排名

    2010年01月01日 到 2019年08月20日 之间,滚动市净率历史新低排名. 上市三年以上的公司,2019年08月20日市净率在30以下的公司. 来源:A股滚动市净率(PB)历史新低排名. 1 ...

  10. PHP-内嵌foreach的巧妙优化

    1.没有想好使用什么话题做开场白,不说多废话直接上代码了. 这是tp5.1的api接口里的代码,$user_list 是二维数组只有 1104一维数组数据   $friend_list 也是二维数组, ...