----------------------------------------
我是在一个jsp中,将远程数据库返回的记录值作为applet的参数在IE里绘制曲线的:
<APPLET CODE = "drawload.class" CODEBASE = "." WIDTH = 620 HEIGHT = 500> <PARAM NAME = CODEBASE VALUE = "." >
<PARAM NAME = bk_CPU VALUE =<%=bk_CPU%>>
<PARAM NAME = bk_DISK VALUE =<%=bk_DISK%>>
<PARAM NAME = bk_MEM VALUE =<%=bk_MEM%>>alt="Your browser understands the <APPLET> tag but isn't running the applet, for some reason."
Your browser is completely ignoring the <APPLET> tag!</APPLET>----------------------------------------
首先把这个jsp文件用HtmlConvertor进行转换,注册引用的drawload.lass,关键段变成:<!--"CONVERTED_APPLET"-->
<!-- CONVERTER VERSION 1.3 -->
<OBJECT classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
WIDTH = 620 HEIGHT = 500 codebase="http://java.sun.com/products/plugin/1.3/jinstall-13-win32.cab#Version=1,3,0,0">
<PARAM NAME = CODE VALUE = "drawload.class" >
<PARAM NAME = CODEBASE VALUE = "." ><PARAM NAME="type" VALUE="application/x-java-applet;version=1.3">
<PARAM NAME="scriptable" VALUE="false">
<PARAM NAME = CODEBASE VALUE = "." >
<PARAM NAME = bk_CPU VALUE =<%=bk_CPU%>>
<PARAM NAME = bk_DISK VALUE =<%=bk_DISK%>>
<PARAM NAME = bk_MEM VALUE =<%=bk_MEM%>>
<COMMENT>
<EMBED type="application/x-java-applet;version=1.3" CODE = "drawload.class" CODEBASE = "." WIDTH = 620 HEIGHT = 500 CODEBASE = "." bk_CPU = <%=bk_CPU%> bk_DISK = <%=bk_DISK%> bk_MEM = <%=bk_MEM%> scriptable=false pluginspage="http://java.sun.com/products/plugin/1.3/plugin-install.html"><NOEMBED></COMMENT>
alt="Your browser understands the <APPLET> tag but isn't running the applet, for some reason."
Your browser is completely ignoring the <APPLET> tag!
</NOEMBED></EMBED>
</OBJECT>
----------------------------------------
绘图drawload.java见下:
import java.util.*;
import java.lang.Double;
import java.lang.String;
import java.awt.*;
import java.awt.Graphics;
import java.awt.FontMetrics;
import java.applet.Applet;public class drawload extends java.applet.Applet {
double[] series1 = new double[30];
double[] series2 = new double[30];
double[] series3 = new double[30];
Dimension d;
int topx=0, topy=0,count=0; ;
public void init(){
d = getSize();
String cpu_str = getParameter("parray1");
String disk_str = getParameter("parray2");
String mem_str = getParameter("parray3");
for (StringTokenizer t = new StringTokenizer(cpu_str, ",") ; t.hasMoreTokens() ; ) {
series1[count++] = Double.parseDouble(t.nextToken());
System.out.println(t.nextToken());
}
for (StringTokenizer t = new StringTokenizer(disk_str, ",") ; t.hasMoreTokens() ; ) {
series2[count++] = Double.parseDouble(t.nextToken());
System.out.println(t.nextToken());
}
for (StringTokenizer t = new StringTokenizer(mem_str, ",") ; t.hasMoreTokens() ; ) {
series3[count++] = Double.parseDouble(t.nextToken());
System.out.println(t.nextToken());
}
}
public void paint(Graphics g) {
// 打底纹格
FontMetrics lblfm = g.getFontMetrics();
int x1=topx+30, y1=topy+20;
g.setColor(Color.black);
g.fillRect(x1,y1-20,d.width,100);
for (int i = 0 ; i < 30 ; i++) {
g.setColor(Color.white);
g.drawLine(x1,topy, x1, topy+100);
g.setColor(new Color(150,134,173));
g.drawString(Integer.toString(i), x1-lblfm.stringWidth(Integer.toString(i))/2, topy+105+lblfm.getHeight()/2);
x1 +=20;
}
//标注
for (int i = 0 ; i < 5 ; i++) {
g.setColor(Color.white);
g.drawLine(topx+30,y1,610,y1);
g.setColor(new Color(150,134,173));
g.drawString(Integer.toString((5-i)*20), topx+20-lblfm.stringWidth(Integer.toString((5-i)*20))/2, y1-lblfm.getHeight()/2);
y1 +=20;
} //画图
int x = topx+30;
for (int j =0 ; j < count ; ) {
g.setColor(Color.red);
g.drawLine(x,topy+100-(int)series1[j],x+=20,topy+100-(int)series1[++j]);
} topy+=150;
// 打底纹格
int x2=topx+30, y2=topy+20;
g.setColor(Color.black);
g.fillRect(x2,y2-20,d.width,100);
for (int i = 0 ; i < 30 ; i++) {
g.setColor(Color.white);
g.drawLine(x2,topy, x2, topy+100);
g.setColor(new Color(150,134,173));
g.drawString(Integer.toString(i), x2-lblfm.stringWidth(Integer.toString(i))/2, topy+105+lblfm.getHeight()/2);
x2 +=20;
}
//标注
for (int i = 0 ; i < 5 ; i++) {
g.setColor(Color.white);
g.drawLine(topx+30,y2,610,y2);
g.setColor(new Color(150,134,173));
g.drawString(Integer.toString((5-i)*20), topx+20-lblfm.stringWidth(Integer.toString((5-i)*20))/2, y2-lblfm.getHeight()/2);
y2 +=20;
} //画图
int xx = topx+30;
for (int j =0 ; j < count ; ) {
g.setColor(Color.red);
g.drawLine(xx,topy+100-(int)series2[j],xx+=20,topy+100-(int)series2[++j]);
}
topy+=150;
// 打底纹格
int x3=topx+30, y3=topy+20;
g.setColor(Color.black);
g.fillRect(x3,y3-20,d.width,100);
for (int i = 0 ; i < 30 ; i++) {
g.setColor(Color.white);
g.drawLine(x3,topy, x3, topy+100);
g.setColor(new Color(150,134,173));
g.drawString(Integer.toString(i), x3-lblfm.stringWidth(Integer.toString(i))/2, topy+105+lblfm.getHeight()/2);
x3 +=20;
}
//标注
for (int i = 0 ; i < 5 ; i++) {
g.setColor(Color.white);
g.drawLine(topx+30,y3,610,y3);
g.setColor(new Color(150,134,173));
g.drawString(Integer.toString((5-i)*20), topx+20-lblfm.stringWidth(Integer.toString((5-i)*20))/2, y3-lblfm.getHeight()/2);
y3 +=20;
} //画图
int xxx = topx+30;
for (int j =0 ; j < count ; ) {
g.setColor(Color.red);
g.drawLine(xxx,topy+100-(int)series3[j],xxx+=20,topy+100-(int)series3[++j]);
} }
}
我是在一个jsp中,将远程数据库返回的记录值作为applet的参数在IE里绘制曲线的:
<APPLET CODE = "drawload.class" CODEBASE = "." WIDTH = 620 HEIGHT = 500> <PARAM NAME = CODEBASE VALUE = "." >
<PARAM NAME = bk_CPU VALUE =<%=bk_CPU%>>
<PARAM NAME = bk_DISK VALUE =<%=bk_DISK%>>
<PARAM NAME = bk_MEM VALUE =<%=bk_MEM%>>alt="Your browser understands the <APPLET> tag but isn't running the applet, for some reason."
Your browser is completely ignoring the <APPLET> tag!</APPLET>----------------------------------------
首先把这个jsp文件用HtmlConvertor进行转换,注册引用的drawload.lass,关键段变成:<!--"CONVERTED_APPLET"-->
<!-- CONVERTER VERSION 1.3 -->
<OBJECT classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
WIDTH = 620 HEIGHT = 500 codebase="http://java.sun.com/products/plugin/1.3/jinstall-13-win32.cab#Version=1,3,0,0">
<PARAM NAME = CODE VALUE = "drawload.class" >
<PARAM NAME = CODEBASE VALUE = "." ><PARAM NAME="type" VALUE="application/x-java-applet;version=1.3">
<PARAM NAME="scriptable" VALUE="false">
<PARAM NAME = CODEBASE VALUE = "." >
<PARAM NAME = bk_CPU VALUE =<%=bk_CPU%>>
<PARAM NAME = bk_DISK VALUE =<%=bk_DISK%>>
<PARAM NAME = bk_MEM VALUE =<%=bk_MEM%>>
<COMMENT>
<EMBED type="application/x-java-applet;version=1.3" CODE = "drawload.class" CODEBASE = "." WIDTH = 620 HEIGHT = 500 CODEBASE = "." bk_CPU = <%=bk_CPU%> bk_DISK = <%=bk_DISK%> bk_MEM = <%=bk_MEM%> scriptable=false pluginspage="http://java.sun.com/products/plugin/1.3/plugin-install.html"><NOEMBED></COMMENT>
alt="Your browser understands the <APPLET> tag but isn't running the applet, for some reason."
Your browser is completely ignoring the <APPLET> tag!
</NOEMBED></EMBED>
</OBJECT>
----------------------------------------
绘图drawload.java见下:
import java.util.*;
import java.lang.Double;
import java.lang.String;
import java.awt.*;
import java.awt.Graphics;
import java.awt.FontMetrics;
import java.applet.Applet;public class drawload extends java.applet.Applet {
double[] series1 = new double[30];
double[] series2 = new double[30];
double[] series3 = new double[30];
Dimension d;
int topx=0, topy=0,count=0; ;
public void init(){
d = getSize();
String cpu_str = getParameter("parray1");
String disk_str = getParameter("parray2");
String mem_str = getParameter("parray3");
for (StringTokenizer t = new StringTokenizer(cpu_str, ",") ; t.hasMoreTokens() ; ) {
series1[count++] = Double.parseDouble(t.nextToken());
System.out.println(t.nextToken());
}
for (StringTokenizer t = new StringTokenizer(disk_str, ",") ; t.hasMoreTokens() ; ) {
series2[count++] = Double.parseDouble(t.nextToken());
System.out.println(t.nextToken());
}
for (StringTokenizer t = new StringTokenizer(mem_str, ",") ; t.hasMoreTokens() ; ) {
series3[count++] = Double.parseDouble(t.nextToken());
System.out.println(t.nextToken());
}
}
public void paint(Graphics g) {
// 打底纹格
FontMetrics lblfm = g.getFontMetrics();
int x1=topx+30, y1=topy+20;
g.setColor(Color.black);
g.fillRect(x1,y1-20,d.width,100);
for (int i = 0 ; i < 30 ; i++) {
g.setColor(Color.white);
g.drawLine(x1,topy, x1, topy+100);
g.setColor(new Color(150,134,173));
g.drawString(Integer.toString(i), x1-lblfm.stringWidth(Integer.toString(i))/2, topy+105+lblfm.getHeight()/2);
x1 +=20;
}
//标注
for (int i = 0 ; i < 5 ; i++) {
g.setColor(Color.white);
g.drawLine(topx+30,y1,610,y1);
g.setColor(new Color(150,134,173));
g.drawString(Integer.toString((5-i)*20), topx+20-lblfm.stringWidth(Integer.toString((5-i)*20))/2, y1-lblfm.getHeight()/2);
y1 +=20;
} //画图
int x = topx+30;
for (int j =0 ; j < count ; ) {
g.setColor(Color.red);
g.drawLine(x,topy+100-(int)series1[j],x+=20,topy+100-(int)series1[++j]);
} topy+=150;
// 打底纹格
int x2=topx+30, y2=topy+20;
g.setColor(Color.black);
g.fillRect(x2,y2-20,d.width,100);
for (int i = 0 ; i < 30 ; i++) {
g.setColor(Color.white);
g.drawLine(x2,topy, x2, topy+100);
g.setColor(new Color(150,134,173));
g.drawString(Integer.toString(i), x2-lblfm.stringWidth(Integer.toString(i))/2, topy+105+lblfm.getHeight()/2);
x2 +=20;
}
//标注
for (int i = 0 ; i < 5 ; i++) {
g.setColor(Color.white);
g.drawLine(topx+30,y2,610,y2);
g.setColor(new Color(150,134,173));
g.drawString(Integer.toString((5-i)*20), topx+20-lblfm.stringWidth(Integer.toString((5-i)*20))/2, y2-lblfm.getHeight()/2);
y2 +=20;
} //画图
int xx = topx+30;
for (int j =0 ; j < count ; ) {
g.setColor(Color.red);
g.drawLine(xx,topy+100-(int)series2[j],xx+=20,topy+100-(int)series2[++j]);
}
topy+=150;
// 打底纹格
int x3=topx+30, y3=topy+20;
g.setColor(Color.black);
g.fillRect(x3,y3-20,d.width,100);
for (int i = 0 ; i < 30 ; i++) {
g.setColor(Color.white);
g.drawLine(x3,topy, x3, topy+100);
g.setColor(new Color(150,134,173));
g.drawString(Integer.toString(i), x3-lblfm.stringWidth(Integer.toString(i))/2, topy+105+lblfm.getHeight()/2);
x3 +=20;
}
//标注
for (int i = 0 ; i < 5 ; i++) {
g.setColor(Color.white);
g.drawLine(topx+30,y3,610,y3);
g.setColor(new Color(150,134,173));
g.drawString(Integer.toString((5-i)*20), topx+20-lblfm.stringWidth(Integer.toString((5-i)*20))/2, y3-lblfm.getHeight()/2);
y3 +=20;
} //画图
int xxx = topx+30;
for (int j =0 ; j < count ; ) {
g.setColor(Color.red);
g.drawLine(xxx,topy+100-(int)series3[j],xxx+=20,topy+100-(int)series3[++j]);
} }
}
解决方案 »
- java如何读取解析指定位数的二进制流
- 怎样获得一个字符串中每个字节的ASC码,并判断这个字节是属于汉字的还是字母的。
- classpath的功能
- 挑战Java正则表达式高手的一个难题:非一个字符串的问题?
- 请问怎样把DOM树输出的XML内容显示在普通的文本编辑器里,使其带有格式?
- 我做的随机产生数据的程序怎么经常产生重复的数据;谁能帮忙,解决立即给分!
- 急!急!请问谁有java高级图形的开源软件包
- 请教一个很基础的问题
- 求教java
- 请大虾解疑!关于Tomcat与Resin的区别,谢谢!!
- 怎样把*.Class文件转化为*.Java?
- 我是IBM,怎么国内的JBuilder的书这么少,有没有JBuilder高手愿意一起写一本?
现在这个绘图的applet,如果用一个静态参数的htm来引用,jdk的appletviewer看是有结果的,但是画面不稳定,一拖就完蛋;
但是放到jsp里(实时连接数据库以得到动态参数值,用ie6显示时applet加载很久也没有曲线显示出来
看看java console window 有什么错误信息没有
但是画面不稳定,一拖就完蛋;可以使用双缓冲方式绘图
BufferedImage buf1;
BufferedImage buf2;
int flag;
paint(...)
{
if(flag==1)
//draw buf1 to screen
if(flag==2)
//draw buf2 to screen.
}
开一个工作线程负责更新buf1 /buf2,更新好后改变flag, 调用applet.repaint