201871010126 王亚涛《面向对象程序设计 JAVA》 第十三周学习总结

时间:2022-11-02 21:11:41
 

内容

这个作业属于哪个课程

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

这个作业的要求在哪里

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

作业学习目标

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

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

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

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

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

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

随笔博文正文内容包括:

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

第十一章 事件处理

11.1 事件处理基础

AWT事件处理机制的概要

  1. 事件:当用户在界面上执行一个操作,例如按下键盘、拖动或者单击鼠标时,都将产生一个事件。Java中事件是用来描述不同类型用户操作的对象,Java中有很多不同类型的事件。例如:单击,双击,右击,拖动,键盘的按下、释放,文本域内容改变等
  2. 事件监听器:就是调用事件处理方法的对象。当界面操作事件产生并被发送到产生事件的组件时,该组件将把事件发送给能接受和处理该事件的监听器
  3. 事件源 (eventevent eventeventsource source source ):能够产生事件的对象都可 :能够产生事件的对象都可 :能够产生事件的对象都可 :能够产生事件的对象都可 :能够产生事件的对象都可 :能够产生事件的对象都可 :能够产生事件的对象都可 :能够产生事件的对象都可 :能够产生事件的对象都可 :能够产生事件的对象都可 :能够产生事件的对象都可 :能够产生事件的对象都可 以成为事件源 ,如文本框 、按钮等 。一个 事件源是能够注册监听器并向发送事件对象 的能够注册监听器并向发送事件对象 的能够注册监听器并向发送事件对象 的能够注册监听器并向发送事件对象 的。

4.事件对象:事件发生后,在flex中就称为事件对象,事件对象有针对其的侦听器,事件对象有其属性,比如:target。

5.事件源与监听器之间的关系

201871010126 王亚涛《面向对象程序设计 JAVA》 第十三周学习总结

6.注册监听器的方法

6.1.使用内部类:一个个设置Button然后创建一个内部类, 用ActionPerformed来实现按钮事件内容;

6.2.使用lambda表达式“需要创建一个内部类, 其实有更简单的方法, 比如使用lambda表达式, 而不需要创建内部类, 我们可以把创建按钮和响应的部分放到一个方法里面

6.3.使用匿名对象:使用lambda表达式肯定不是非用不可的, 以前的方法是使用匿名对象, 也是可以的。

6.4.自身框架做事件源容器:其实可以直接用JFrame本身做事件源容器, 使ButtonFrame支持ActionListener接口, 需要把按钮定义在属性中, 然后在构造函数中添加的监听器中直接使用this 像这样:greenButton.addActionListener(this);然后在自己类中实现ActionPerformed方法, 使用Object source = e.getSource();获取到事件的更新源, 然后用判断语句来判断是哪个按钮的事件依次执行事件操作;

7.动作事件:动作事件的监听接口是ActionListener接口,在这个接口中的抽象方法如下:public void actionPerformed(ActionEvent e) .

8.事件处理的基本编程模型;

201871010126 王亚涛《面向对象程序设计 JAVA》 第十三周学习总结

11.1.1监听器接口的实现

201871010126 王亚涛《面向对象程序设计 JAVA》 第十三周学习总结

执行顺序如下:

1、给事件源注册监听器。
2、组件接受外部作用,也就是事件被触发。
3、组件产生一个相应的事件对象,并把此对象传递给与之关联的事件处理器。
4、事件处理器启动,并执行相关的代码来处理该事件。

监听器模式:事件源注册监听器之后,当事件源触发事件,监听器就可以回调事件对象的方法;更形象地说,监听者模式是基于:注册-回调的事件/消息通知处理模式,就是被监控者将消息通知给所有监控者。

1、注册监听器:事件源.setListener。
2、回调:事件源实现onListener。

11.1.2 用匿名类与lambda简化程序

匿名内部类:适合创建只需要使用一次的类,如果需要重复使用,将实现类定义成一个独立的类

new 实现接口()

{

匿名内部类的类体部分

}

Lambda表达式:主要作用代替匿名内部类的繁琐语法

11.1.3 适配器类

1. 概念

适配器模式把一个类的接口转换成客户端期待的另外一种接口, 从而是原本应用接口不匹配而无法在一起工作的两个类能够在一起工作.

举个例子来说,现在一般的家用电器要求的电压都是 220V,但有个别电器要求使用110V 电压,怎么办?这时就需要用一个能把 220V 电压转换成 110V 电压的变压器,这个变压器就是一个适配器。

2. 哪些情况需要适配器模式?

2.1系统需要使用类的接口不符合系统的要求

2.2要建立一个可以重复使用的类, 用于与该类之间的关联不大的一些类, 包括工作中引用的类

2.3类的适配器模式使用起来有点像多重集成机制, 利用接口的特性, 把一些零散类组织到一起, 成为一个新的类来实现调用, 并且看起来像是对一个类的操作. 实际上, 适配器模式更过的是强调对代码的组织, 而不是功能的实

3. 适配器的作用

适配器模式可以方便代码的主治和模型的准确标识, 可以把一个类中的成员插入到另一个类的继承子类中, 从而上这个继承的子类看起来像一个新类, 同事可以对父类减少依赖.

4. 适配器的角色

Target: 目标接口类, 客户所期待的接口, 目标可以是具体的或者抽象的类, 也可以是接口

Adaptee: 需要适配的类

Adapter: 通过包装一个需要的支配器对象, 把原来的接口转换成目标接口

5. 适配器的实现方式

1).对象适配器模式(采用对象组合方式实现)

201871010126 王亚涛《面向对象程序设计 JAVA》 第十三周学习总结

2. 类的适配器模式(采用继承实现)

201871010126 王亚涛《面向对象程序设计 JAVA》 第十三周学习总结

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

所有组件都能发出鼠标事件,MouseEvent类负责捕获鼠标事件,可以通过为组件添加实现了MouseListener接口的监听器类来处理相应的鼠标事件。

MouseListener接口共有5个抽象方法,分别在光标移入或移出组件时、鼠标按键被按下或释放时和发生单击事件时被触发。所谓单击事件,就是按键被按下并释放。

注意:如果按键是在移出组件之后才被释放,则不会触发单击事件。

当双击鼠标时,第一次单击单击鼠标将触发第一次单击事件。(也就是先会输出第一次,在输出第二次)。

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

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

鼠标被释放时调用mouseReleased方法;

两个动作完成之后,调用mouseClicked方法。 鼠标在组件上移动时,会调用mouseMoved方法。 如果鼠标在移动的时候还按下了鼠标,则会调用mouseDragged方法。

11.3。了解GUI界面组件观感设置方法;

在默认情况下,Swing程序使用Metal观感,可以采用两种方式改变观感。 第一种方式是在Java安装的子目录jre/lib下有一个文件swing.properties。在这个文件中,将属性swing.defaultlaf设置为所希望的观感类名。 swing.defaultlaf = com.sun.java.swing.plaf.motif.MotifLookAndFeel 第二种方式是动态地改变观感,需要调用静态的UIManager.setLookAndFeel方法,并提供所想要的观感类名,然后再调用静态方法SwingUtilities. updateComponentTreeUI来刷新全部的组件集。

11.4.掌握WindowAdapter类、AbstractAction类的用法;

扩展WindowAdapter类,继承六个空方法,并覆盖WindowClosing()方法: class Terminator extends WindowAdapter { public void windowClosing(WindowEvent e) { if(user agress) System.exit(0); } }、

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

测试程序1(5分)

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

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

l 用lambda表达式简化程序;

l 掌握JButton组件的基本API;

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

例题11-1实验代码如下:

package button;

import java.awt.*;
import javax.swing.*; /**
* @version 1.35 2018-04-10
* @author Cay Horstmann
*/
public class ButtonTest
{
public static void main(String[] args)
{
EventQueue.invokeLater(() -> {
var frame = new ButtonFrame();
frame.setTitle("ButtonTest");//设置框架名称
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//窗口关闭按钮设置为可用
frame.setVisible(true);//将框架设置为可见
});
}
}
package button;

  import java.awt.*;
import java.awt.event.*;
import javax.swing.*; /**
* 按钮面板框架
*/
public class ButtonFrame extends JFrame
{
private JPanel buttonPanel;
private static final int DEFAULT_WIDTH = 600;//设置面板的私有属性,长和宽
private static final int DEFAULT_HEIGHT = 400; public ButtonFrame()
{
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); JButton yellowButton = new JButton("Yellow");// 创建以Yellow,Blue,Red命名的三个按钮
JButton blueButton = new JButton("Blue");
JButton redButton = new JButton("Red"); buttonPanel = new JPanel(); 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);
} private class ColorAction implements ActionListener//设置面板背景色的事件监听器
{
private Color backgroundColor;//添加背景色的私有属性 public ColorAction(Color c)
{
backgroundColor = c;
} public void actionPerformed(ActionEvent event)
{
buttonPanel.setBackground(backgroundColor);
}
}
}

用lambda表达式简化后的程序代码如下:

package button;

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 void makeButton(String name,Color backgroundColor)
{
JButton button = new JButton(name);
buttonPanel.add(button);
button.addActionListener((e)->{
buttonPanel.setBackground(backgroundColor);
});
} public ButtonFrame()
{
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); // create buttons
//JButton yellowButton = new JButton("Yellow");
//JButton blueButton = new JButton("Blue");
//JButton redButton = new JButton("Red");
//// 创建以Yellow,Blue,Red命名的三个按钮
makeButton("yellow", Color.YELLOW);
makeButton("blue", Color.BLUE);
makeButton("red", Color.RED);
buttonPanel = new JPanel(); // add buttons to panel
//ttonPanel.add(yellowButton);
//ttonPanel.add(blueButton);
//ttonPanel.add(redButton); // add panel to frame
// 在面板中添加按钮
add(buttonPanel);// 添加框架 // create button actions
ColorAction yellowAction = new ColorAction(Color.YELLOW);
ColorAction blueAction = new ColorAction(Color.BLUE);
ColorAction redAction = new ColorAction(Color.RED);
// 将按钮与事件进行关联
// associate actions with buttons //yellowButton.addActionListener(yellowAction);
//ueButton.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);
}
}
}

实验运行截图如下:

201871010126 王亚涛《面向对象程序设计 JAVA》 第十三周学习总结

201871010126 王亚涛《面向对象程序设计 JAVA》 第十三周学习总结

201871010126 王亚涛《面向对象程序设计 JAVA》 第十三周学习总结

测试程序2:

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

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

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

例题11.2程序代码及注释如下:

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(() -> {
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; 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();
} /**
点击按钮时插入可变的外观
* @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);//将树结构中的每个节点转到 updateUI()
SwingUtilities.updateComponentTreeUI(this);
pack();
}
catch (Exception e)//捕获异常
{
e.printStackTrace();
}
});
}
}

运行截图如下:

201871010126 王亚涛《面向对象程序设计 JAVA》 第十三周学习总结

201871010126 王亚涛《面向对象程序设计 JAVA》 第十三周学习总结

201871010126 王亚涛《面向对象程序设计 JAVA》 第十三周学习总结

201871010126 王亚涛《面向对象程序设计 JAVA》 第十三周学习总结

201871010126 王亚涛《面向对象程序设计 JAVA》 第十三周学习总结

测试程序3:

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

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

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

例题11.3程序代码及注释如下:

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(() -> {
var frame = new ActionFrame();
frame.setTitle("ActionTest");//设置框架名称
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//窗口关闭按钮设置为可用
frame.setVisible(true);//将框架设置为可见
});
}
}
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); buttonPanel = new JPanel();//创建一个按钮面板对象 // define actions定义三个事件
var yellowAction = new ColorAction("Yellow", new ImageIcon("yellow-ball.gif"),
Color.YELLOW);
var blueAction = new ColorAction("Blue", new ImageIcon("blue-ball.gif"), Color.BLUE);
var redAction = new ColorAction("Red", new ImageIcon("red-ball.gif"), Color.RED); // add buttons for these actions
buttonPanel.add(new JButton(yellowAction));//添加按钮对应的事件
buttonPanel.add(new JButton(blueAction));
buttonPanel.add(new JButton(redAction)); // add panel to frame
add(buttonPanel);//在框架中添加面板 // associate the Y, B, and R keys with names
InputMap inputMap = buttonPanel.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);//关联Y,R,B,与事件
inputMap.put(KeyStroke.getKeyStroke("ctrl Y"), "panel.yellow");
inputMap.put(KeyStroke.getKeyStroke("ctrl B"), "panel.blue");
inputMap.put(KeyStroke.getKeyStroke("ctrl R"), "panel.red"); // associate the names with actions将名称与事件联系起来
ActionMap actionMap = buttonPanel.getActionMap();
actionMap.put("panel.yellow", yellowAction);
actionMap.put("panel.blue", blueAction);
actionMap.put("panel.red", redAction);
} 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);//在构造器中设置键值对映射,设置的属性将会被JPanel读取
putValue(Action.SMALL_ICON, icon);
putValue(Action.SHORT_DESCRIPTION, "Set panel color to " + name.toLowerCase());
putValue("color", c);
} public void actionPerformed(ActionEvent event)
{
var color = (Color) getValue("color");
buttonPanel.setBackground(color);
}
}
}

运行截图如下:

201871010126 王亚涛《面向对象程序设计 JAVA》 第十三周学习总结

201871010126 王亚涛《面向对象程序设计 JAVA》 第十三周学习总结

201871010126 王亚涛《面向对象程序设计 JAVA》 第十三周学习总结

测试程序4:

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

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

例题11.4程序代码如下:

package mouse;

import java.awt.*;
import javax.swing.*; /**
* @version 1.35 2018-04-10
* @author Cay Horstmann
*/
public class MouseTest
{
public static void main(String[] args)
{
EventQueue.invokeLater(() -> {
var frame = new MouseFrame();
frame.setTitle("MouseTest"); //设置框架名称
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//窗口关闭按钮设置为可用
frame.setVisible(true); //将框架设置为可见
});
}
}
package mouse;

import javax.swing.*;

/**
* A frame containing a panel for testing mouse operations
*/
public class MouseFrame extends JFrame
{
public MouseFrame()
{
add(new MouseComponent());//向框架中添加一个JComponent对象
pack();;//根据窗口大小, 使组件可被容纳
}
}
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)
{
var g2 = (Graphics2D) g; // draw all squares
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)
{
for (Rectangle2D r : squares)
{
if (r.contains(p)) 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 y = p.getY(); 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);//将s从squares的列表中直接删去
repaint();//重绘component的方法
} private class MouseHandler extends MouseAdapter
{
public void mousePressed(MouseEvent event)
{
// add a new square if the cursor isn't inside a square
current = find(event.getPoint());
if (current == null) add(event.getPoint());
} public void mouseClicked(MouseEvent event)//点击鼠标的构造器
{
// remove the current square if double clicked// 如果双击,删除当前方块
current = find(event.getPoint());
if (current != null && event.getClickCount() >= 2) remove(current);
}
} private class MouseMotionHandler implements MouseMotionListener
{
public void mouseMoved(MouseEvent event)
{
// set the mouse cursor to cross hairs if it is inside a rectangle 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();
int y = event.getY(); // drag the current rectangle to center it at (x, y)
current.setFrame(x - SIDELENGTH / 2, y - SIDELENGTH / 2, SIDELENGTH, SIDELENGTH);
repaint();//重绘图像
}
}
}
}

运行截图如下:

201871010126 王亚涛《面向对象程序设计 JAVA》 第十三周学习总结

实验2:结对编程练习包含以下4部分:(20分)

1)   程序设计思路简述;

2)   符合编程规范的程序代码;

3)   程序运行功能界面截图;

4)   结对过程描述,提供两人在讨论、细化和编程时的结对照片(非摆拍)。

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

201871010126 王亚涛《面向对象程序设计 JAVA》 第十三周学习总结

图1 点名器启动界面

201871010126 王亚涛《面向对象程序设计 JAVA》 第十三周学习总结

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

201871010126 王亚涛《面向对象程序设计 JAVA》 第十三周学习总结

 图3 点名器点名界面

 

结对编程代码如下:

package demo;

import java.awt.EventQueue;

import javax.management.Query;
import javax.swing.JFrame; public class Main {
public static void main(String[] args) {
EventQueue.invokeLater(()->{
ButtonFrame buttonFrame = new ButtonFrame();
buttonFrame.setVisible(true);
buttonFrame.setTitle("点名器");
buttonFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); });
}
}
package demo;

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StringBufferInputStream;
import java.util.ArrayList;
import java.util.Timer;
import java.util.TimerTask; import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel; public class ButtonFrame extends JFrame {
private JPanel buttonPanel;
private static final int DEFAULT_WIDTH = 300 * 2;
private static final int DEFAULT_HEIGHT = 200 * 2;
private JButton jButton;
private JLabel jLabel;
private ArrayList<String> arrayList; public ButtonFrame() {
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
buttonPanel = new JPanel();
buttonPanel.setLayout(null);
add(buttonPanel);
jLabel = new JLabel("点名器");
jButton = new JButton("开始");
jButton.setBackground(Color.gray);
jLabel.setBounds(100, 50, 60, 30);
jButton.setBounds(100, 120, 60, 30);
arrayList = new ArrayList<>();
//读文件
File file = new File("D:/studentnamelist.txt");
FileInputStream fis;
try {
fis = new FileInputStream(file);
InputStreamReader in = new InputStreamReader(fis);
BufferedReader buf = new BufferedReader(in);
String readLine;
while ((readLine = buf.readLine())!=null) {
arrayList.add(readLine); }
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} jButton.addActionListener(new ActionListener() {
Timer timer; public void actionPerformed(ActionEvent e) {
if (jButton.getText().equals("开始")) {
timer = new Timer();;
TimerTask timerTask = new TimerTask() {
public void run() {
jButton.setText("停止");
jButton.setBackground(Color.red);
jLabel.setText(arrayList.get((int) (Math.random() * 43)));
} };
timer.schedule(timerTask, 0, 10);
}
if (jButton.getText().equals("停止")) {
timer.cancel();
jButton.setText("开始");
jButton.setBackground(Color.gray);
}
}
});
buttonPanel.add(jLabel);
buttonPanel.add(jButton);
add(buttonPanel); }
}

代码运行截图如下:

201871010126 王亚涛《面向对象程序设计 JAVA》 第十三周学习总结

201871010126 王亚涛《面向对象程序设计 JAVA》 第十三周学习总结

201871010126 王亚涛《面向对象程序设计 JAVA》 第十三周学习总结

两人在讨论、细化和编程时的结对照片:

201871010126 王亚涛《面向对象程序设计 JAVA》 第十三周学习总结

实验总结:(20分)

1):通过本次课程的学习让我们对Java中第十一章相关内容有了初步的了解;在上课老师的讲解过程中学习了Java中的事件处理基础等知识。掌握事件处理的基本原理,理解其用途;AWT事件模型的工作机制;事件处理的基本编程模型等相关的知识。这周通过对事件以及监听器的学习,对按钮实现人机交互所必需的的一些编程机制有了进一步的理解,但是实现的窗口比较简陋,与平常生活中接触到的相差甚远,所以,应该进一步学习窗口的程序设计,是的呈现出来的窗口更加美观。

2):通过老师上课详细的讲解和实验过程中助教的讲解我们对第十一章的知识点有了进一步的强化认识,在做作业的过程中遇到了一些问题,但都通过问同学一一解决了,在讨论的过程中了解了自己的不足,掌握了许多不知道不熟悉的知识。

3).通过这次的实验使我学到了不少实用的知识,并且锻炼了自己的动手能力;虽然在学习的过程中遇到了许多不懂得地方,但是通过问同学及查找相关资料都一一解决了;相信在以后的学习中,通过不断努力,我可以学到更多的关于Java编程的相关知识。

201871010126 王亚涛《面向对象程序设计 JAVA》 第十三周学习总结的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

    项目 内容 这个作业属于哪个课程 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. &lbrack;函數&rsqb; Firemonkey Android 取得系统参数设定的字型大小

    Android 系统参数设定内,可以设定字型大小: 可以透过下面代码来取得字型大小比例: function FontScale: Single; var Resources: JResources; ...

  2. 连接WCF报EntityFramework&period;SqlServer 错误的解决方法

    现象: The Entity Framework provider type 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFram ...

  3. &dollar;&period;ajax提交&comma;后台接受到的值总是乱码?明天再总结

    //首先说明,我的服务器和页面编码都是GBK,所以尝试了很多种GBK的方式前台:function printFunction(){ window.print(); $.ajax({ url : '/t ...

  4. phonegap WebApp

    打开网页浏览器,进入Android SDK网站(http://developer.android.com/sdk/index.html). 我们可以看到,Google官方提供了包括Windows平台在 ...

  5. 【Linux远程管理】Telnet远程连接管理

    Telnet,命令行界面下的远程管理工具,因为其历史非常悠久,几乎所有的操作系统都有该工具, 但是,Telnet在传输数据是是通过明文传输的,没有加密,所以现在几乎不会使用Telnet进行管理了. ( ...

  6. JDBC调用存储过程

    一. JDBC调用存储过程 (1)使用存储过程SQL编写的程序代码,等一段语句和控制流语句.在创建时被编译成机器代码和存储在数据库中的client转让. 存储过程具有以下优势: 1.所生成的机器代码被 ...

  7. &lbrack;转&rsqb;Linux挂载点介绍及桌面服务器分区方案

    原链接:http://www.metsky.com/archives/255.html 本文介绍Linux常用分区挂载点常识以及桌面.服务器分区挂载点的推荐配置,当然这个配置是天缘自己写的,分区大小这 ...

  8. &lbrack;Open Source&rsqb; RabbitMQ 安装与使用

    前言 吃多了拉就是队列,吃饱了吐就是栈 使用场景 对操作的实时性要求不高,而需要执行的任务极为耗时:(发送短信,邮件提醒,更新文章阅读计数,记录用户操作日志) 存在异构系统间的整合: 安装 下载 Er ...

  9. 8611 大牛之路I

    #include<stdio.h> ]; int main() { int i, n, m, sum, x, y; scanf("%d%d", &n, &amp ...

  10. Flask消息验证与提示

    一,消息提示基本语法. 1,先新建一个Flask工作空间. 2,新建后自动得到一个app.py文件,直接运行可以看到基本效果.然后引入 from flask import flash.使用这个flas ...