Java 幸运52

概要:

幸运52游戏是对某种物品或商品的价格进行估算。在估计价格确定时,会弹出一个对话框提示价格是高是低,这样可以对物品或商品的价格进行重新调整。本实例介绍如何实现对商品的价格估计。

| |目录

技术要点

实现幸运52游戏的技术要点如下:

  • Applet编程不同于一般的Java程序,它能够嵌入到HTML网页中,并由支持Java的Web浏览器解释执行。Applet不需要主运行方法main(),它由Web浏览器中的Java虚拟机(JVM)调用执行。

  • 为了实现图像面板或按钮面板需要使类继承Panel类。实现弹出对话框功能需要类继承Frame类并实现事件监听器接口中的方法。

代码实现

package net.xsoftlab.baike;
import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Label;
import java.awt.MediaTracker;
import java.awt.Panel;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.URL;

class ImagePanel extends Panel { // 加载图像的类
	static String IMAGENAME = "lucky.jpg";// 要显示的图片名称
	Image ImageObject; // 要显示的图片对象

	public void loadImage() { // 把图片从文件中装载到图片对象中
		URL url = null;
		try {
			url = new URL(IMAGENAME); // 创建URL对象
		} catch (Exception e) { // 捕获异常
			System.out.println("获得网址出错" + e.getMessage());
		}
		ImageObject = getToolkit().getImage(url); // 获得图片对象
		// 创建跟踪多种媒体对象状态的工具类
		MediaTracker myTracker = new MediaTracker(this);
		myTracker.addImage(ImageObject, 1); // 将图像对象添加到工具类中
		try {
			myTracker.wait(); // 等待加载
			myTracker.checkAll(); // 查看图像状态
		} catch (Exception e) {
		}
	}

	@Override
	public void paint(Graphics g) { // 重载Panel来显示图片
		g.drawImage(ImageObject, 135, 30, 55, 75, this);
	}
}

class ShowDialog extends Frame implements ActionListener {// 设置弹出的窗口的类
	Label label = new Label(); // 声明一个标签

	public ShowDialog(String info) {
		super();
		setTitle("猜测结果--"); // 设置窗口的标题
		Panel dialogPanel = new Panel(); // 创建面板
		add(dialogPanel); // 将面板添加到窗口中
		dialogPanel.add(label); // 面板添加标签
		label.setText(info); // 设置标签的内容
		setSize(150, 100); // 设置窗口的大小
		setLocation(300, 500); // 设置窗口的位置
		Button btnOk = new Button("确定"); // 创建一个确定按钮
		btnOk.addActionListener(this); // 按钮监听事件
		dialogPanel.add(btnOk); // 将按钮添加到面板中
		show(); // 显示窗口
	}

	@Override
	public void actionPerformed(ActionEvent event) { // 点击确定按钮引发的事件
		this.dispose(); // 关闭窗口
	}
}

public class Lucky52 extends Applet implements ActionListener {// 操作猜测商品价格的类
	Panel panel = new Panel(); // 创建面板
	ImagePanel imagePanel = new ImagePanel(); // 创建图片面板
	Panel buttonPanel = new Panel(); // 按钮面板
	TextField txtField = new TextField(10); // 创建一个文本框
	Label label = new Label("请输入这个商口的估价:"); // 创建标
	private int truePrice = 24;

	public Lucky52() {
		super();
		this.setLayout(new BorderLayout()); // 设置布局
		panel.add(label); // 面板添加标签
		panel.add(txtField); // 面板添加文本框
		Button btnStart = new Button("开始游戏"); // 创建铵钮
		Button btnOk = new Button("确定"); // 创建确定按钮
		Button btnCancel = new Button("取消"); // 创建取消按钮
		btnStart.setActionCommand("start"); // 设置按钮激发事件的命令名称
		btnStart.addActionListener(this); // 安装事件监听器
		btnOk.setActionCommand("ok");
		btnOk.addActionListener(this);
		btnCancel.setActionCommand("cancel");
		btnCancel.addActionListener(this);
		buttonPanel.add(btnStart); // 按钮面板添加开始按钮
		buttonPanel.add(btnOk); // 按钮面板添加确定按钮
		buttonPanel.add(btnCancel); // 按钮面板添加取消按钮
		add(panel, BorderLayout.SOUTH); // 窗口添加面板并设置面板在窗口的位置
		// 窗口添加图像面板并设置图像面板在窗口的位置
		add(imagePanel, BorderLayout.CENTER);
		add(buttonPanel, BorderLayout.NORTH); // 设置按钮面板的位置
		setBackground(Color.white); // 设置窗口的背景颜色
	}

	@Override
	public void actionPerformed(ActionEvent event) {// 按钮监听事件
		if (event.getActionCommand().equals("start")) { // 判断按钮的命令名称
			imagePanel.loadImage(); // 调用方法加载图像
			label.setText("请输入这个商口的估价:");
			imagePanel.repaint(); // 调用方法重新加载图像
		} else if (event.getActionCommand().equals("ok")) {
			int guessPrice = 0;
			try { // 获得文本框中的内容转成整数
				guessPrice = Integer.parseInt(txtField.getText().trim());
				String guess = priceCompare(guessPrice);// 调用方法进行比较
				new ShowDialog(guess); // 打开一个对话框窗口
			} catch (Exception e) {
				System.out.println("获得数据出现错误:" + e.getMessage());
			}
		} else if (event.getActionCommand().equals("cancel")) {
			txtField.setText(""); // 文本框置空
		}
	}

	public String priceCompare(int guessPrice) { // 判断比较价格
		if (guessPrice == truePrice) {
			return "你猜对了";
		} else if (guessPrice > truePrice) {
			return "你猜的价格过高";
		} else if (guessPrice < truePrice) {
			return "猜的价格过低";
		}
		return "出错了";
	}
}

程序解读

  1. ImagePanel类继承Panel面板类来实现图像的加载与查看。Java中不提供直接用来显示图片的Panel。首先创建URL对象用来获得图片信息,再根据getToolkit()方法取得Toolkit对象,然后使用getImage()方法来取得一张图片文件,在paint()方法中使用Graphics类的drawImage()方法可显示该图像。创建跟踪多种媒体对象状态的工具类并将图像添加进去,可以等待加载图像和查看图像的状态。

  2. ShowDialog类继承Frame类和实现ActionListener接口来操作实现一个对话框,实现该接口必须实现actionPerformed()事件监听方法。在ShowDialog类的构造方法中设置对话窗口的标题并添加一个面板,面板用来装载标签和确定按钮。按钮中添加一个监听事件,当单击按钮时触发事件。actionPerformed()方法处理当单击确定按钮时如何操作窗口,窗口的dispose()方法是将窗口关闭。

  3. TextLucky52类继承Applet类实现ActionListener接口,实现该接口必须实现接口的actionPerformed()方法。TextLucky52类的构造方法中设置窗口的布局和背景颜色。在窗口南侧的面板中添加标签和文本框,在窗口的中间位置面板中添加图像用来加载图片,在窗口北侧的面板中添加“开始游戏”按钮、“确定”按钮和“取消”按钮。

  4. TextLucky52类中的actionPerformed()方法判断按下的按钮的命令名称。如果是按下“开始游戏”按钮则加载图像、重新加载图像和设置标签的内容;如果是按下“确定”按钮则获取文本框中的内容并将内容转成整数与商品的实际价格进行比较,如果大于实际价格则弹出显示价格偏高的对话框,如果小于实际价格则弹出显示价格偏低的对话框。


评论关闭
评论 还能输入200
评论关闭
评论 还能输入200
资料加载中...
已关注 , 取消