`
笑天
  • 浏览: 1592 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

随便写了个Applet

阅读更多
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Event;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Label;
import java.awt.image.BufferedImage;
import java.applet.Applet;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

@SuppressWarnings("serial")
public class MyServlet extends Applet implements Runnable {
// 最大的涨跌幅
double maxpersent = 10.6;
// 开盘价
double open_quotation = 0;
// 最大差价
double max_price_difference = 0;
// 最高价
double maxprice = 0;
// 最低价
double minprice = 0;
// 当前价
double nowprice = 0;
// 涨跌幅
double updown = 0;
// 边框颜色
Color framecolor = new Color(8, 8,;
// 填充颜色
Color incolor = new Color(255, 255, 255);
// 定义坐标轴颜色
Color xycolor = new Color(96, 98, 99);
// 标准线颜色
Color realcolor = new Color(255, 0, 0);
// 上面其他准线颜色
Color uprcolor = new Color(195, 196, 198);
// 下面其他准线颜色
Color downrcolor = new Color(195, 196, 198);
// 上面数字颜色
Color upfcolor = new Color(250, 0, 0);
// 中间数字颜色
Color cenfcolor = new Color(0, 0, 0);
// 下面数字颜色
Color downfcolor = new Color(69, 150, 230);
// 线条颜色
Color linecolor = new Color(113, 194, 240);
// 下面信息背景颜色
Color dangshixinxicolor = new Color(214, 219, 221);
// 下面信息字体颜色
Color dangqianziticolor = new Color(0, 0, 0);
// 跌停颜色
Color dietingcolor = new Color(0, 255, 0);
// 涨停颜色
Color zhangtingcolor = new Color(255, 0, 0);
// 时间颜色
Color timecolor = new Color(69, 150, 230);
// 画笔宽度
int n = 1;
// 标线宽度
int n2 = 1;
// 每次x偏移量
int xgo = 3;
// 左侧空出的空间
int fontsizex = 34;
// 右侧空出的空间
int widthlest = 40;
// 坐标轴横轴长度
int width = 240 * xgo;
// 图片的宽度。
int widthpic = fontsizex + widthlest + width;
// 纵轴图像上面空出部分
int heightlest = 20;
// 图像下册空间
int fontsizey = 25;
// 当前信息所占空间
int msgsizey = 100;
// 坐标轴纵高度
int height = 240;
// 图片的高度。
int heightpic = heightlest + fontsizey + height + msgsizey;

// 下方信息的位置y
int heightfount = heightlest + height + fontsizey + 35;

// 线条宽度
BasicStroke size = new BasicStroke(n, BasicStroke.CAP_BUTT,
BasicStroke.JOIN_BEVEL);
// 标线线条宽度
BasicStroke size2 = new BasicStroke(n2, BasicStroke.CAP_BUTT,
BasicStroke.JOIN_BEVEL);
// 定义图像buffer
BufferedImage buffImg = new BufferedImage(widthpic, heightpic,
BufferedImage.TYPE_INT_RGB);
// 设置标签的背景颜色
private Color labelBackgroundColor = new Color(0, 0, 0);
// 设置标签的前景颜色
private Color labelForegroundColor = new Color(255, 255, 255);
// 设置标签的字体
private String fontTatle = "default";
// 设置标签字粗细
private int fornnum = 1;
// 设置标签字大小
private int fornSize = 11;
// 设置标签的存储信息
private Label label[];
// 设定线呈
private Thread myServletThread;
// 鼠标的前一x位置
private int x0;
// 鼠标的前一y位置
private int y0;
// 获取内容x位置
private int x1;
// 获取内容y位置
private int y1;


// 容器第一次装在Applet时调用
public void init() {
this.resize(widthpic, heightpic);
// 设置开始时鼠标的位置begin
x0 = 0;
y0 = 0;
// 设置开始时鼠标的位置end
// ******************设定线呈begin
myServletThread = null;
// ******************设定线呈end
// ******************设置标签的存储信息begin
label = new Label[14];
for (int i = 0; i < 14; i++) {
label[i] = new Label();
label[i].setBackground(labelBackgroundColor);
label[i].setForeground(labelForegroundColor);
label[i].setFont(new Font(fontTatle, fornnum, fornSize));
}
// 设置标签位置
label[0].setBounds(80, 32, 70, 15);
label[1].setBounds(180, 32, 40, 15);
label[2].setBounds(250, 32, 40, 15);
label[3].setBounds(320, 32, 40, 15);
label[4].setBounds(390, 32, 40, 15);
label[5].setBounds(460, 32, 30, 15);
label[9].setBounds(520, 32, 40, 15);
label[10].setBounds(590, 32, 30, 15);
// ******************设置标签的存储信息end
}

// 每当回到Applet所在的页面时调用该方法
public void start() {
if (myServletThread == null) {
myServletThread = new Thread(this);
myServletThread.start();
}
}

// 每当容器离开含有Applet网页时,调用该方法
public void stop() {
if (myServletThread != null) {
myServletThread.interrupt();
myServletThread = null;
}
}

// 在Applet中输入文本或绘图
public void paint(Graphics g) {

g = (Graphics2D) g;
// 将图像填充颜色
g.setColor(incolor);
// 定义图像位置、宽、高
g.fillRect(0, 0, widthpic, heightpic);
// 设置下面字的背景
g.setColor(dangshixinxicolor);
g.fillRect(1, heightlest + fontsizey + height + 1, widthpic - 2,
heightpic - 2);
// 画边框。
g.setColor(framecolor);
g.drawRect(0, 0, widthpic - 1, heightpic - 1);
// 坐标轴颜色
g.setColor(xycolor);
// 画横坐标
g.drawLine(fontsizex, height + heightlest + 4, width + fontsizex,
height + heightlest + 4);
// 画横坐标箭头
g.drawLine(width + fontsizex - 2, height + heightlest + 2, width
+ fontsizex, height + heightlest + 4);
g.drawLine(width + fontsizex - 2, height + heightlest + 6, width
+ fontsizex, height + heightlest + 4);
// 画纵坐标
g.drawLine(fontsizex, heightlest - 4, fontsizex, height + heightlest
+ 4);
// 画纵坐标箭头
g.drawLine(fontsizex - 2, heightlest - 2, fontsizex, heightlest - 4);
g.drawLine(fontsizex + 2, heightlest - 2, fontsizex, heightlest - 4);
// 添加横坐标信息
for (int i = fontsizex; i < width; i = i + width / {
g.drawLine(i, height + heightlest, i, height + heightlest + 4);
}
int time = fontsizex - 10 - width / 8;
g.setColor(timecolor);
g.drawString("9:30", time = time + width / 8, height + heightlest + 16);
g.drawString("10:00", time = time + width / 8, height+ heightlest + 16);
g.drawString("10:30", time = time + width / 8, height+ heightlest + 16);
g.drawString("11:00", time = time + width / 8, height+ heightlest + 16);
g.drawString("11:30", time = time + width / 8, height+ heightlest + 16);
g.drawString("1:30", time = time + width / 8, height + heightlest + 16);
g.drawString("2:00", time = time + width / 8, height + heightlest + 16);
g.drawString("2:30", time = time + width / 8, height + heightlest + 16);
g.drawString("3:00", time = time + width / 8, height + heightlest + 16);
// 掉数据库获取各个时刻价格信息和开盘价(或昨日收盘价)信息
List<Double> list = new ArrayList<Double>();
list = this.getCarrent_T();
// 开始金额
open_quotation = this.getOpen_quotation();
// 获取最高价
maxprice = this.getMaxprice(list, open_quotation);
// 获取最低价
minprice = this.getMinprice(list, open_quotation);
// 遍历数据库信息获取最大差价
max_price_difference = this.price_difference(list, open_quotation);
// 获取每一小格的百分比
double min_price_difference = this.persent(max_price_difference,
open_quotation);
// 获取右面信息
String[] persents = this.persents(min_price_difference);
// 获取左面信息
String[] manage = this.manage(open_quotation, min_price_difference);
// 向图像上添加信息
((Graphics2D) g).setStroke(size2);
int height8 = height / 8;
for (int i = 0; i < 4; i++) {
g.setColor(downrcolor);
g.drawLine(fontsizex, heightlest + height / 2 + height8 * i, width
+ fontsizex, heightlest + height / 2 + height8 * i);
g.setColor(uprcolor);
g.drawLine(fontsizex, heightlest + height / 2 - height8 * i, width
+ fontsizex, heightlest + height / 2 - height8 * i);
}
g.setColor(uprcolor);
g.drawLine(fontsizex, heightlest, width + fontsizex, heightlest);
for (int i = 0; i < persents.length; i++) {
if (i < 4) {
g.setColor(upfcolor);
} else if (i == 4) {
g.setColor(cenfcolor);
} else {
g.setColor(downfcolor);
}
g.drawString(persents[i], width + fontsizex, heightlest + height8
* i);
g.drawString(manage[i], 2, heightlest + height8 * i);
}
// 画出标准线
g.setColor(realcolor);
((Graphics2D) g).setStroke(size);
g.drawLine(fontsizex, heightlest + height / 2, width + fontsizex,
heightlest + height / 2);
// 画线条
g.setColor(linecolor);
((Graphics2D) g).setStroke(size);
int y = heightlest + height / 2;
int x = fontsizex;
for (int i = 0; i < list.size(); i++) {
// 获取当时价
nowprice = list.get(i);
// 画线条
g.drawLine(x, y, x = x + xgo, y = this.getY(nowprice, heightlest,
height, open_quotation, max_price_difference));
// 获取涨跌比
updown = (nowprice - open_quotation) / open_quotation;
// 判断涨跌是否已超出界限
if (updown >= maxpersent || updown <= -maxpersent) {
if (updown < 0) {
g.setColor(dietingcolor);
g.drawString("跌停", widthpic / 2 - 2, heightfount);
} else {
g.setColor(zhangtingcolor);
g.drawString("涨停", widthpic / 2 - 2, heightfount);
}
// 画出涨跌停线段
g.drawLine(x, y, fontsizex + width, y);
return;
}
}
// 写出当前信息
int widthto4 = widthpic / 8;
g.setColor(dangqianziticolor);
g.drawString("最高价:" + maxprice, widthto4, heightfount);
g.drawString("最低价:" + minprice, widthto4 * 2, heightfount);
g.drawString("当前价:" + nowprice, widthto4 * 3, heightfount);
if (updown < 0) {
g.drawString("跌幅:" + (-updown), widthto4 * 4, heightfount);
} else {
g.drawString("涨幅:" + updown, widthto4 * 4, heightfount);
}
x0 = -1;
y0 = -1;
}

public void update(Graphics g){ 
        paint(g); 
    } 

// 设置鼠标按下事件
public boolean mouseDown(Event event, int x, int y) {
if (x >= this.fontsizex && x <= this.fontsizex + this.width
&& y >= this.heightlest && y <= this.height + this.heightlest) {
this.x1 = x;
this.y1 = y;
} else {
this.x1 = -1;
this.y1 = -1;
}
this.repaint();
return false;
}

// 设置鼠标抬起事件
public boolean mouseUp(Event event, int x, int y) {
Graphics g = this.getGraphics();
g.setColor(new Color(0, 128, 192));
if (x1 > -1 && y1 > -1) {
g.drawLine(x1 - 5, y1, x1 + 5, y1);
g.drawLine(x1, y1 - 5, x1, y1 + 5);
g.drawOval(x1 - 3, y1 - 3, 6, 6);
g.drawString(
"(" + this.gettime(x1) + "," + this.getmoney(y1) + ")",
x1 + 2, y1 - 2);
}
return false;
}

// 设置鼠标移动事件
public boolean mouseMove(Event event, int x, int y) {
Graphics g = this.getGraphics();

g.setXORMode(Color.yellow);
if (x < fontsizex)
x = fontsizex;
else if (x > fontsizex + width)
x = fontsizex + width;
if (y < heightlest)
y = heightlest;
else if (y > height + heightlest)
y = height + heightlest;
g.setColor(new Color(85, 151, 250));
g.drawLine(fontsizex, y0, fontsizex + width, y0);
g.drawLine(x0, heightlest, x0, height + heightlest);
g.drawLine(fontsizex, y, fontsizex + width, y);
g.drawLine(x, heightlest, x, height + heightlest);
x0 = x;
y0 = y;
return true;
}

public void run() {
Graphics g = getGraphics();
g.setXORMode(Color.yellow);
Thread.currentThread().setPriority(Thread.MIN_PRIORITY); 
  
        //Remember the starting time.  
        long startTime = System.currentTimeMillis(); 
 
        //This is the animation loop.  
        while (Thread.currentThread() == myServletThread) 
        {    
            repaint(); 
            try { 
            myServletThread.sleep(1000);
            } catch (InterruptedException e) { 
                break; 
            }
        }
}

// 遍历数据,获取最大差价
private double price_difference(List<Double> list, double open_quotation) {
double max_price_difference = 0;
for (int i = 0; i < list.size(); i++) {
double priced = open_quotation - list.get(i);
if (priced < 0) {
priced = -priced;
}
if (priced > max_price_difference) {
max_price_difference = priced;
}
}
if (max_price_difference / open_quotation < 0.01)
max_price_difference = open_quotation * 0.01;
return max_price_difference;
}

// 获取每个小格之间的价差百分比
private double persent(double max_price_difference, double open_quotation) {
double min_price_difference = (max_price_difference / 4 / open_quotation) * 100;
return min_price_difference / 100;
}

// 获取左面各个刻度的信息
private String[] manage(double open_quotation, double min_price_difference) {
StringBuffer string = new StringBuffer();
for (int i = 4; i > -5; i--) {
String ss = String.valueOf(open_quotation
* (1 + min_price_difference * i));
int cc = ss.indexOf('.');
try {
ss = ss.substring(0, cc + 3);
} catch (Exception e) {
ss = ss.substring(0);
ss = ss + "0";
}
string.append(ss);
string.append(",");
}
return string.toString().split(",");
}

// 获取右面各个小格的百分信息
private String[] persents(double min_price_difference) {
StringBuffer string = new StringBuffer();
for (int i = 4; i > -5; i--) {
String ss = String.valueOf(min_price_difference * i * 100);
int cc = ss.indexOf('.');
try {
ss = ss.substring(cc - 1, cc + 3);
} catch (Exception e) {
ss = ss.substring(0);
ss = ss + "0";
}
ss = ss + "%";
if (i < 0) {
ss = "-" + ss;
}
string.append(ss);
if (i != -4) {
string.append(",");
}
}
return string.toString().split(",");
}

// 获取最高价
private double getMaxprice(List<Double> list, double open_quotation) {
double maxprice = open_quotation;
for (int i = 0; i < list.size(); i++) {
if (maxprice < list.get(i))
maxprice = list.get(i);
}
return maxprice;
}

// 获取最低价
private double getMinprice(List<Double> list, double open_quotation) {
double minprice = open_quotation;
for (int i = 1; i < list.size(); i++) {
if (minprice > list.get(i))
minprice = list.get(i);
}
return minprice;
}

// 计算y轴坐标
private int getY(double nowprice, int heightlest, int height,
double open_quotation, double max_price_difference) {
int i = heightlest + height / 2;
int gogo = (int) ((open_quotation - nowprice) * height / 2 / max_price_difference);
if (String.valueOf(gogo).equals("NaN"))
gogo = 0;
i = (int) (i + gogo);
return i;
}

// 计算x坐标轴长度与时间的换算
private String gettime(int x) {
int hor = 9;
int min = 30;
if (x >= this.fontsizex && x <= (this.fontsizex + this.width / 2)) {
min = min + (x - this.fontsizex) / this.xgo;
while (min >= 60) {
hor++;
min = min - 60;
}
} else if (x > (this.fontsizex + this.width / 2)
&& x <= (this.fontsizex + this.width)) {
hor = 1;
min = 0;
min = min + (x - this.fontsizex - this.width / 2) / this.xgo;
while (min >= 60) {
hor++;
min = min - 60;
}
}
return hor + ":" + min;
}

// 计算y坐标轴高度与价钱的换算
private double getmoney(int y) {
double thisprice = 0;
thisprice = 2 * this.max_price_difference
* ((this.heightlest + this.height / 2) - y) / this.height
+ this.open_quotation;
return thisprice;
}

// 获取数据库中各段时间的信息
private List<Double> getCarrent_T() {
List<Double> nowpricelist = new ArrayList<Double>();
String stockid =this.getParameter("stockid");
try {
URL url = new URL(this.getCodeBase(),"pic.do?method=getData&stockid="+stockid);
    BufferedReader bufferedreader = new BufferedReader(new InputStreamReader(url.openStream()));
    String nowprice = null;
    if((nowprice=bufferedreader.readLine())!=null){
    nowpricelist.add(Double.parseDouble(nowprice));
    }
} catch (MalformedURLException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}
return nowpricelist;
}

// 获取开盘价
private double getOpen_quotation() {
String priceOpen = this.getParameter("priceOpen");
return Double.parseDouble(priceOpen);
}
}
分享到:
评论

相关推荐

    同一web页面两个applet通信.

    `AppletContext` 是每个Applet都有的一个接口,提供了获取其他Applet实例的方法。通过`getApplet(String name)`方法,可以获取具有指定名称的Applet对象,从而进行通信。 2. **使用JavaBeans组件** JavaBeans是一...

    同一个网页中两个APPLET通讯

    在本案例中,我们需要讨论的主题是如何在同一个网页中实现两个APPLET之间的通信,并通过一个APPLET的按钮来控制另一个APPLET的线程。 首先,理解APPLET的基本结构。APPLET通常由两部分组成:Java源代码(如`.java`...

    做一个applet测试

    本文将深入探讨如何创建和实现一个能够提示用户下载插件的Applet。 首先,我们要了解什么是Applet。Applet是Java语言的一个子类,通常是`java.applet.Applet`或`javax.swing.JApplet`,它可以在HTML页面中嵌入,由...

    一个Applet小例子

    这个“一个Applet小例子”是一个专门用于展示股市实时行情变动的应用,用户可以在浏览器中直接运行,无需下载安装,极大地提高了信息获取的便捷性。 在Java中,Applet的生命周期包括初始化、启动、绘画、更新和终止...

    如何在js文件中写加载Applet控件(js与jsp分离技术)

    ### 如何在JS文件中写加载Applet控件(JS与JSP分离技术) #### 一、背景介绍 在Web开发领域,特别是早期的Java Web应用中,Applet控件曾是一种广泛使用的客户端插件技术。它允许开发者将Java代码嵌入到网页中,...

    Applet

    这个Applet对应的源代码"HelloWorld.java"继承自Applet类,并重写了init()和paint()方法,实现了简单的文本显示功能。 安全性是Applet设计中的一个重要考虑因素。Java虚拟机为Applet运行提供了一个“沙箱”环境,...

    java写的applet音乐播放器

    在Applet中使用下拉框显示音乐文件的名字,在程序中使用AudioChip类控制播放的音乐文件,使用“播放”、...得新建个HTML在当前目录, 内容为 &lt;APPLET CODE = "Music.class" WIDTH=500 HEIGHT=200&gt; &lt;/APPLET&gt; 运行即可

    自己写的一个简单的applet的程序

    标题 "自己写的一个简单的applet的程序" 暗示我们正在讨论的是一个基于Java的Applet项目。Applet是Java编程语言中的一个小程序,它可以在支持Java的Web浏览器中运行。这个特定的程序可能是一个互动的小游戏或者某种...

    Applet小游戏 Applet小游戏 Applet小游戏

    在本例中,"HammerGame"可能是一个利用Applet技术开发的简单游戏。 首先,我们需要了解Applet的基本概念。Applet是Java类的子类,通常是`java.applet.Applet`或其子类,如`javax.swing.JApplet`。它们通过`&lt;applet&gt;...

    一个简单Applet小程序

    本示例是一个简单的Applet小程序,通过线程来实现动态地在Applet窗口中随机画圆。 首先,我们需要了解Applet的基本概念。Applet是Java类库中的`java.applet.Applet`类或其子类的实例,它可以在支持Java的Web浏览器...

    java的applet实例

    Java的Applet实例是Java编程领域中的一个基础概念,它主要涉及到Web应用程序的早期开发技术。Applet是一种在客户端浏览器中运行的小型Java程序,它能够增强网页的交互性,提供动态内容展示。在Java的发展历程中,...

    applet小程序

    在本文中,我们将详细介绍 Java Applet 小程序的开发过程,从编写代码到运行小程序的每一个步骤。通过本文,读者将了解 Java Applet 小程序的基本概念和开发技术。 标题解释 Applet 小程序是 Java 语言中的一种小...

    java applet实例讲解

    Java Applet是Java平台的一个组成部分,主要用于在网页中嵌入动态内容。它们由Java编写的类组成,这些类继承自`java.applet.Applet`类或者`javax.swing.JApplet`类。在1990年代,Java Applet是实现交互式Web页面的...

    applet排序

    在Applet中,我们可以创建一个二维数组来表示待排序的数据,然后通过更新数组元素的位置来模拟冒泡排序的过程。每一步的交换都可以通过改变数组元素的颜色或者位置来直观地展示给用户。 2. **插入排序**: 插入排序...

    java applet 简单案例

    这个简单的案例将带你深入理解Java Applet的基础概念、工作原理以及如何创建和运行一个基本的Java Applet。 一、Java Applet简介 Java Applet是一种由Java编写的客户端应用程序,它可以在支持Java的Web浏览器中运行...

    applet例子

    本文件提供了一个可运行的applet程序示例,旨在帮助开发者理解如何编写和运行一个基础的applet。 **Applet的基本概念** 1. **生命周期**: Applet有四个基本状态 - 加载、初始化、启动和停止。当浏览器加载包含...

    JavaApplet与JavaScript

    JavaApplet 的基础是 `java.applet.Applet` 类,它是从 `java.awt.Panel` 继承而来的一个特殊的图形组件。下面列出了构成 Applet 类层次结构的各个类: 1. **`java.lang.Object`** - 所有 Java 类的基础类。 2. **`...

    在Java Applet中实现动画.rar_applet_java Applet

    Java Applet中的`paint()`方法接收一个`Graphics`对象参数,我们可以利用这个对象绘制图形。在每一帧中,我们清除屏幕并重新绘制物体的新位置,模拟物体的移动。例如: ```java public void paint(Graphics g) { ...

    Java Applet 入门教程

    要创建一个Java Applet,你需要继承`javax.swing.JApplet`类或`java.applet.Applet`类(旧版本API),并重写必要的生命周期方法。然后,你需要在HTML文件中使用`&lt;applet&gt;`标签来嵌入Applet,指定Applet类名和代码...

Global site tag (gtag.js) - Google Analytics