控制台程序。

语义事件与程序GUI上的组件操作有关。例如,如果选择菜单项或单击按钮,就会生成语义事件。

对组件执行操作时,例如选择菜单项或单击按钮,就会生成ActionEvent事件。在选择或取消选择某个组件时,会生成ItemEvent事件。在调整可调整的对象(如滚动条)时,就生成AdjustmentEvent事件。

上面的每一种语义事件类型都定义了相应的监听器接口,这些接口都只声明了一个方法:

1、ActionListener定义了actionPerformed(ActionEvent e)方法。

2、ItemListener定义了itemStateChanged(ItemEvent e)方法。

3、AdjustmentListener定义了adjustmentValueChanged(AdjustmentEvent e)方法。

 // Applet to generate lottery entries
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Random; // For random number generator @SuppressWarnings("serial")
public class Lottery extends JApplet {
// Generate NUMBER_COUNT random selections from the VALUES array
private static int[] getNumbers() {
int[] numbers = new int[NUMBER_COUNT]; // Store for the numbers to be returned
int candidate = 0; // Stores a candidate selection
for(int i = 0; i < NUMBER_COUNT; ++i) { // Loop to find the selections search:
// Loop to find a new selection different from any found so far
while(true) {
candidate = VALUES[choice.nextInt(VALUES.length)];
for(int j = 0 ; j < i ; ++j) { // Check against existing selections
if(candidate==numbers[j]) { // If it is the same
continue search; // get another random selection
}
}
numbers[i] = candidate; // Store the selection in numbers array
break; // and go to find the next
}
}
return numbers; // Return the selections
} // Initialize the applet
@Override
public void init() {
SwingUtilities.invokeLater( // Create interface components
new Runnable() { // on the event dispatching thread
public void run() {
createGUI();
}
});
} // Create User Interface for applet
public void createGUI() {
// Set up the selection buttons
Container content = getContentPane();
content.setLayout(new GridLayout(0,1)); // Set the layout for the applet // Set up the panel to hold the lucky number buttons
JPanel buttonPane = new JPanel(); // Add the pane containing numbers // Let's have a fancy panel border
buttonPane.setBorder(BorderFactory.createTitledBorder(
BorderFactory.createEtchedBorder(Color.cyan,
Color.blue),
"Every One a Winner!")); int[] choices = getNumbers(); // Get initial set of numbers
for(int i = 0 ; i < NUMBER_COUNT ; ++i) {
luckyNumbers[i] = new Selection(choices[i]);
luckyNumbers[i].addActionListener(luckyNumbers[i]); // Button is it's own listener
buttonPane.add(luckyNumbers[i]);
}
content.add(buttonPane); // Add the pane containing control buttons
JPanel controlPane = new JPanel(new FlowLayout(FlowLayout.CENTER, 5, 10)); // Add the two control buttons
JButton button; // A button variable
Dimension buttonSize = new Dimension(100,20); // Button size controlPane.add(button = new JButton("Lucky Numbers!"));
button.setBorder(BorderFactory.createRaisedBevelBorder());
button.addActionListener(new HandleControlButton(PICK_LUCKY_NUMBERS));
button.setPreferredSize(buttonSize); controlPane.add(button = new JButton("Color"));
button.setBorder(BorderFactory.createRaisedBevelBorder());
button.addActionListener(new HandleControlButton(COLOR));
button.setPreferredSize(buttonSize); content.add(controlPane);
} // Class defining custom buttons showing lottery selection
private class Selection extends JButton implements ActionListener {
// Constructor
public Selection(int value) {
super(Integer.toString(value)); // Call base constructor and set the label
this.value = value; // Save the value
setBackground(startColor);
setBorder(BorderFactory.createRaisedBevelBorder()); // Add button border
setPreferredSize(new Dimension(80,20));
} // Handle selection button event
public void actionPerformed(ActionEvent e) {
// Change this selection to a new selection
int candidate = 0;
while(true) { // Loop to find a different selection
candidate = VALUES[choice.nextInt(VALUES.length)];
if(!isCurrentSelection(candidate)) { // If it is different
break; // end the loop
}
}
setValue(candidate); // We have one so set the button value
}
// Set the value for the selection
public void setValue(int value) {
setText(Integer.toString(value)); // Set value as the button label
this.value = value; // Save the value
} // Check the value for the selection
boolean hasValue(int possible) {
return value==possible; // Return true if equals current value
} // Check the current choices
boolean isCurrentSelection(int possible) {
for(int i = 0 ; i < NUMBER_COUNT ; ++i) { // For each button
if(luckyNumbers[i].hasValue(possible)) { // check against possible
return true; // Return true for any =
}
}
return false; // Otherwise return false
} private int value; // Value for the selection button
} // Class defining a handler for a control button
private class HandleControlButton implements ActionListener {
// Constructor
public HandleControlButton(int buttonID) {
this.buttonID = buttonID; // Store the button ID
} // Handle button click
public void actionPerformed(ActionEvent e) {
switch(buttonID) {
case PICK_LUCKY_NUMBERS:
int[] numbers = getNumbers(); // Get maxCount random numbers
for(int i = 0; i < NUMBER_COUNT; ++i) {
luckyNumbers[i].setValue(numbers[i]); // Set the button VALUES
}
break;
case COLOR:
Color color = new Color(
flipColor.getRGB()^luckyNumbers[0].getBackground().getRGB());
for(int i = 0; i < NUMBER_COUNT; ++i)
luckyNumbers[i].setBackground(color); // Set the button colors
break;
}
} private int buttonID;
} final static int NUMBER_COUNT = 6; // Number of lucky numbers
final static int MIN_VALUE = 1; // Minimum in range
final static int MAX_VALUE = 49; // Maximum in range
final static int[] VALUES = new int[MAX_VALUE-MIN_VALUE+1]; // Array of possible VALUES
static { // Initialize array
for(int i = 0 ; i < VALUES.length ; ++i)
VALUES[i] = i + MIN_VALUE;
} // An array of custom buttons for the selected numbers
private Selection[] luckyNumbers = new Selection[NUMBER_COUNT];
final public static int PICK_LUCKY_NUMBERS = 1; // Select button ID
final public static int COLOR = 2; // Color button ID // swap colors
Color flipColor = new Color(Color.YELLOW.getRGB()^Color.RED.getRGB()); Color startColor = Color.YELLOW; // start color private static Random choice = new Random(); // Random number generator
}

还需要一个HTML文件:

 <html>
<head>
</head>
<body bgcolor="000000">
<center>
<applet
code = "Lottery.class"
width = "300"
height = "200"
>
</applet>
</center>
</body>
</html>

Java基础之处理事件——applet中语义事件的处理(Lottery 1)的更多相关文章

  1. Java基础之处理事件——选项按钮的鼠标监听器(Lottery 2 with mouse listener)

    控制台程序. 定义监听器类有许多方式.下面把监听器类定义为单独的类MouseHandler: // Mouse event handler for a selection button import ...

  2. Java基础:Object类中的equals与hashCode方法

    前言 这个系列的文章主要用来记录我在学习和复习Java基础知识的过程中遇到的一些有趣好玩的知识点,希望大家也喜欢. 一切皆对象   对于软件工程来说面向对象编程有一套完整的解决方案:OOA.OOD.O ...

  3. Java基础语法(8)-数组中的常见排序算法

    title: Java基础语法(8)-数组中的常见排序算法 blog: CSDN data: Java学习路线及视频 1.基本概念 排序: 是计算机程序设计中的一项重要操作,其功能是指一个数据元素集合 ...

  4. Java基础——集合(持续更新中)

    集合框架 Java.util.Collection Collection接口中的共性功能 1,添加 booblean add(Object obj);  往该集合中添加元素,一次添加一个 boolea ...

  5. Java基础之处理事件——应用程序中的语义事件监听器(Sketcher 5 with element color listeners)

    控制台程序. 为了标识元素的类型,可以为菜单已提供的4中元素定义常量,用作ID.这有助于执行菜单项监听器的操作,还提供了一种标识颜色类型的方式.我们会累积许多应用程序范围的常量,所以把它们定义为可以静 ...

  6. Java基础之处理事件——实现低级事件监听器(Sketcher 2 implementing a low-level listener)

    控制台程序. 定义事件监听器的类必须实现监听器接口.所有的事件监听器接口都扩展了java.util.EventListener接口.这个接口没有声明任何方法,仅仅用于表示监听器对象.使用EventLi ...

  7. Java基础之处理事件——使窗口处理自己的事件(Skethcer 1 handing its own closing event)

    控制台程序. 为表示事件的常量使用标识符可以直接启用组件对象的特定事件组.调用组件的enableEvent()方法,并把想要启用事件的标识符传送为参数,但这只在不使用监视器的情况下有效.注册监听器会自 ...

  8. Java基础之处理事件——使用适配器类(Sketcher 3 using an Adapter class)

    控制台程序. 适配器类是指实现了监听器接口的类,但监听器接口中的方法没有内容,所以它们什么也不做.背后的思想是:允许从提供的适配器类派生自己的监听器类,之后再实现那些自己感兴趣的类.其他的空方法会从适 ...

  9. java基础74 XML解析中的SAX解析相关知识点(网页知识)

    1.SAX解析工具 SAX解析工具:是Sun公司提供的,内置JDK中.org.xml.sax.*         点击查看: DOM解析相关知识:以及DOM和SAX解析的原理(区别) 2.SAX解析的 ...

随机推荐

  1. ecshop运行超过30秒超时的限制解决办法

    ecshop运行超过30秒超时的限制解决办法 ECSHOP模板/ecshop开发中心(www.68ecshop.com) / 2014-06-04 ecshop运行超过服务器默认的设置30秒的限制时会 ...

  2. Bootstrap页面布局20 - BS缩略图

    <div class='container-fluid'> <h2 class='page-header'>Bootstrap 缩略图</h2> <ul cl ...

  3. mod_php VS mod_fastcgi

    mod_php VS mod_fastcgi 目录 什么是mod_php和mod_fastcgi 1 工作原理 1 mod_php 2 mod_fastcgi 3 mod_factcgi的三种配置方式 ...

  4. hdf第一周完了,突然时间静止.,醒了就早点去公司上班,再努力一点

    周一要了个任务,做评价完成,分享完成的页面,做到周四发现可能做不出来,找dzy,逻辑比较混乱,想要放弃了,感觉自己非常没用.昨天跟豆聊了一下,否定自己是一点意义也没有的,觉得自己很差劲,无助的感觉跟初 ...

  5. React.js model

    // tutorial1.js var CommentBox = React.createClass({ render: function() { return ( <div className ...

  6. xcode 路径

    $(SRCROOT)宏和$(PROJECT_DIR)宏 XCode环境变量及路径设置 分类: Objective-C2013-03-11 12:30 41336人阅读 评论(1) 收藏 举报 一般我们 ...

  7. sublimtext2 资源

    https://github.com/qljiong/soda-theme/blob/master/README.md http://my.oschina.net/ruochenchen/blog/9 ...

  8. ngios

    一.Nagios简介 Nagios是一款开源的电脑系统和网络监视工具,能有效监控Windows.Linux和Unix的主机状态,交换机路由器等网络设置,打印机等.在系统或服务状态异常时发出邮件或短信报 ...

  9. crossvcl.com - 用VCL开发MacOS软件

    还没正式发布.用力戳 http://crossvcl.com/ 消息来源:Delphi G+ Group.具体信息还没完全披露,但是可以肯定的是,不是通过FireMonkey,而是通过原生的MacOS ...

  10. iOS xib传值--定义方法传值

    事件描述: 用xib创建了一个View,里面有按钮,有TableView.我需要将数据在初始化时传递进去,方便TableView来显示信息. 首先想到的是awakeFromNib这个方法(我以为是和V ...