我现在需要做一个小软件
需要从串口获得下位数据并以类似任务管理器里cpu使用记录的那种图形显示
其他的都做好了
就是这个显示很折磨人啊
怎么做到更新显示呢。我现在是用 vector 装10个数然后一次把它们遍历出来2个2个连
可是很麻烦啊
有人做过类似的东西么。。指教一下。。
需要从串口获得下位数据并以类似任务管理器里cpu使用记录的那种图形显示
其他的都做好了
就是这个显示很折磨人啊
怎么做到更新显示呢。我现在是用 vector 装10个数然后一次把它们遍历出来2个2个连
可是很麻烦啊
有人做过类似的东西么。。指教一下。。
解决方案 »
- ArrayList + I/O 序列化
- java语法问题
- 如何将MYD格式MYI格式文件导入数据库,
- 问个List的异常产生原因!
- 新手请教!为什么用javac -d编译java文件不能生成class文件,不带-d则可
- 各位兄弟快来帮忙吧,我要急死了(applet访问服务器数据库的问题)
- 在接口声明一个抽象方法,为什么,请大家讨论一下
- help~~~~~ 急!!!
- bobosji(波波司机)帮忙:weblogic配置好了虚拟主机,怎样使用?
- 关于在win7下启动Sun SPOT Manager(.jnlp)无法打开时出现的报错,是Oracle已经放弃这玩意了吗?
- swing 2个JTable的拖拽问题
- 寻找java相关的开源书籍或网址
import java.awt.Color;
import java.awt.Graphics;
import java.util.LinkedList;import javax.swing.JFrame;public class WaveFrame extends JFrame { public WaveFrame() {
WaveCanvas wave = new WaveCanvas();
this.add(wave);
Thread th = new Thread(wave);
th.start();
} public static void main(String[] a){
JFrame jf = new WaveFrame();
jf.setSize(400, 300);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
}
/**
* 画图区
* @author
*
*/
class WaveCanvas extends Canvas implements Runnable {
Queue data = new Queue(20);//队列中要显示的值
Graphics g; int[] x = new int[] { 10, 20, 30, 40, 50, 60, 70, 80, 90, 100,
110, 120, 130, 140, 150, 160, 170, 180, 190, 200 };//x轴,固定
int[] y = new int[] { 200, 200, 200, 200, 200, 200, 200, 200, 200, 200,
200, 200, 200, 200, 200, 200, 200, 200, 200, 200 };//y轴从队列中取.初始全为200,或者其它任何数字.
int drawpts =0;//画的点数.20个之前累加,20个之后就只画20个.
public WaveCanvas() {
setSize(400, 200);
}
@Override
public void paint(Graphics g) {
super.paint(g);
this.g = g;
drawWave();
} public void run() {
while(true){
int d = (int)(Math.random()*1000)%200;
data.put(d);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
drawpts++;
if(drawpts>20) drawpts=20;
repaint();
}
}
private void drawWave(){
System.out.println("==============================");
for(int i = 0; i < data.size(); i++){
y[i] = 200-(Integer)data.get(i);
System.out.println(y[i]);
}
g.setColor(Color.GREEN);
g.drawPolyline(x,y,drawpts);
} }
/**
* 队列,先进先出.
* @author
*
*/
class Queue {
private LinkedList<Object> list = new LinkedList<Object>();
private int size;
public Queue(int size){
this.size = size;
}
public synchronized void put(Object v) {
if(isFull())
list.removeFirst();
list.addLast(v);
} public synchronized Object out() {
return list.removeFirst();
} public boolean isEmpty() {
return list.isEmpty();
}
public boolean isFull(){
return (list.size()==size);
}
public int size(){
return list.size();
}
public Object get(int i){
if(i < list.size())
return list.get(i);
else
return 0;
}
}
}
import java.awt.Font;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartRenderingInfo;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryLabelPositions;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.entity.StandardEntityCollection;
import org.jfree.chart.labels.PieSectionLabelGenerator;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PiePlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.chart.servlet.ServletUtilities;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.ui.HorizontalAlignment;
import org.jfree.ui.RectangleEdge;public class PlantInit {
/*********
*
* @author wuwh
* vlineName代表横坐标标志;
* hlineName代表纵坐标标志名称;
*
* 曲线图的绘制;
* **********/
public static String excelName;public static String plantCurvesLine(List list,String topName,String vlineName,String hlineName,HttpServletRequest request){
DefaultCategoryDataset defaultcategorydataset = new DefaultCategoryDataset();
FileOutputStream fos_jpg = null;
//设置值;
int cont=list.size();
for(int i=0;i<cont;i++){
PlantTo to=(PlantTo) list.get(i);
defaultcategorydataset.addValue(to.getMapValue(), to.getMapname(), to.getMapkey());
}
//绘图到内存
JFreeChart jfreechart1 = ChartFactory.createLineChart(
topName, vlineName, hlineName,
defaultcategorydataset, PlotOrientation.VERTICAL, true, true,
true);
//头信息的设置;
TextTitle texttitle = new TextTitle(topName);
texttitle.setFont(new Font("SansSerif", 0, 10));
texttitle.setPosition(RectangleEdge.BOTTOM);
texttitle.setHorizontalAlignment(HorizontalAlignment.RIGHT);
jfreechart1.addSubtitle(texttitle);
jfreechart1.setBackgroundPaint(Color.decode("#FFCC00"));
CategoryPlot categoryplot = (CategoryPlot) jfreechart1.getPlot();
//设置纵横条的颜色;
categoryplot.setBackgroundPaint(Color.decode("#996600"));
categoryplot.setRangeGridlinePaint(Color.white);
categoryplot.setDomainGridlinePaint(Color.white);
categoryplot.setDomainGridlinesVisible(true);//显示纵线
CategoryAxis categoryaxis = categoryplot.getDomainAxis();
categoryaxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);
// categoryplot.set
NumberAxis numberaxis = (NumberAxis) categoryplot.getRangeAxis();
numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits()); LineAndShapeRenderer lineandshaperenderer = (LineAndShapeRenderer) categoryplot
.getRenderer();
lineandshaperenderer.setShapesVisible(true);
lineandshaperenderer.setDrawOutlines(true);
lineandshaperenderer.setUseFillPaint(true);
//设置两条曲线的不同颜色;
//jfreechart1.getSubtitleCount()----表示有多少条曲线;
lineandshaperenderer.setSeriesPaint(0, Color.RED);
lineandshaperenderer.setSeriesPaint(1, Color.BLUE);
lineandshaperenderer.setSeriesFillPaint(0, Color.RED);
lineandshaperenderer.setSeriesFillPaint(1, Color.BLUE);
if(null!=request.getAttribute("incont") && ""!=request.getAttribute("incont")){
lineandshaperenderer.setSeriesFillPaint(2, Color.YELLOW);
lineandshaperenderer.setSeriesFillPaint(2, Color.YELLOW);
} lineandshaperenderer.setBaseLinesVisible(true);
String imageFile_qx=null;
try {
//向内存中绘制出真实的曲线图并且保存在session当中;
imageFile_qx = ServletUtilities.saveChartAsJPEG(jfreechart1,600,450,request.getSession());//设置生成图片,包括图片的大小,长度是500,宽是400
} catch (IOException e) {
e.printStackTrace();
}
String fullpath = InitServlet.sysPath+"JfreeImg\\"+imageFile_qx;
try {
fos_jpg = new FileOutputStream(fullpath);
ChartUtilities.writeChartAsJPEG(fos_jpg,1.0f,jfreechart1,600,450,null);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return imageFile_qx;//图片路径;
}
*
*
* @author wuwh
* 2D饼图的显示;
*
*
* ***********************/ public static String plant2DLine(List list,HttpServletRequest request,String topname){ HttpSession session=request.getSession();
DefaultPieDataset dfp=new DefaultPieDataset();//数据池;
FileOutputStream fos_jpg = null;
//向数据池中设置一堆数据,将其填充;
int cont=list.size();
for(int i=0;i<cont;i++){
PlantTo to=(PlantTo) list.get(i);
dfp.setValue(to.getMapkey(), to.getMapValue());
}
JFreeChart a =ChartFactory.createPieChart(topname,dfp, false, true, true);
//设置图形上面的字体,颜色,变化
PiePlot pie=(PiePlot )a.getPlot();
pie.setLabelFont(new Font("SansSerif",Font.BOLD,12));
pie.setNoDataMessage("No data available");
pie.setCircular(true);
pie.setLabelGap(0.01D);//间距
pie.setLabelGenerator(new StandardPieSectionLabelGenerator("{0} ({2})"));//设置现实的文字样式; //将缓存中的jfreechart对象用frame的实例显示给用户;
//PrintWriter out = response.getWriter();
ChartRenderingInfo info=new ChartRenderingInfo(new StandardEntityCollection());
String imgaeFileName_2d=null;
try {
imgaeFileName_2d = ServletUtilities.saveChartAsJPEG(a,350,300,info,session);//设置生成图片,包括图片的大小,长度是500,宽是400
//session=null;
} catch (IOException e) {
e.printStackTrace();
}
String fullpath = InitServlet.sysPath+"JfreeImg\\"+imgaeFileName_2d;
try {
fos_jpg = new FileOutputStream(fullpath);
ChartUtilities.writeChartAsJPEG(fos_jpg,1.0f,a,350,300,null);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
request.setAttribute("image_name_2d", imgaeFileName_2d);//保存图片的名称;
return imgaeFileName_2d;
// return fullpath;
}
/******************
*
*
* @author wuwh
* 柱状图的显示;
* vlineName代表横坐标标志;
* hlineName代表纵坐标标志名称;
*
* ***********************/
public static String planeReacgLine(List list,String topName,String vlineName,String hlineName,HttpServletRequest request){
/*********柱状图的生成**********/
int cont=list.size();
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
for(int i=0;i<cont;i++){
PlantTo to=(PlantTo) list.get(i);
dataset.addValue(to.getMapValue(),i+"",to.getMapkey());//待补充。。
}
JFreeChart chart=ChartFactory.createBarChart3D(topName, hlineName,vlineName, dataset, PlotOrientation.HORIZONTAL, false, true, false);
CategoryPlot plot = chart.getCategoryPlot();
final BarRenderer renderer1 = (BarRenderer) plot.getRenderer();
renderer1.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());
renderer1.setItemMargin(0.01D);// 设置每个柱子之间的距离
plot.setRenderer(renderer1);
String imgaeFileName_RE=null;
try {
imgaeFileName_RE = ServletUtilities.saveChartAsJPEG(chart,600,400,request.getSession());//设置生成图片,包括图片的大小,长度是500,宽是400
} catch (IOException e) {
e.printStackTrace();
}
request.setAttribute("image_name_RE", imgaeFileName_RE);//保存图片的名称;
return imgaeFileName_RE;
}
public static String plantCurvesLineAfter(List list,String topName,String vlineName,String hlineName,String contName,String imgName){
DefaultCategoryDataset defaultcategorydataset = new DefaultCategoryDataset();
FileOutputStream fos_jpg = null;
//设置值;
int cont=list.size();
for(int i=0;i<cont;i++){
PlantTo to=(PlantTo) list.get(i);
defaultcategorydataset.addValue(to.getMapValue(), to.getMapname(), to.getMapkey());
}
//绘图到内存
JFreeChart jfreechart1 = ChartFactory.createLineChart(
topName, vlineName, hlineName,
defaultcategorydataset, PlotOrientation.VERTICAL, true, true,
true);
//头信息的设置;
TextTitle texttitle = new TextTitle(topName);
texttitle.setFont(new Font("SansSerif", 0, 10));
texttitle.setPosition(RectangleEdge.BOTTOM);
texttitle.setHorizontalAlignment(HorizontalAlignment.RIGHT);
jfreechart1.addSubtitle(texttitle);
jfreechart1.setBackgroundPaint(Color.decode("#FFCC00"));
CategoryPlot categoryplot = (CategoryPlot) jfreechart1.getPlot();
//设置纵横条的颜色;
categoryplot.setBackgroundPaint(Color.decode("#996600"));
categoryplot.setRangeGridlinePaint(Color.white);
categoryplot.setDomainGridlinePaint(Color.white);
categoryplot.setDomainGridlinesVisible(true);//显示纵线
NumberAxis numberaxis = (NumberAxis) categoryplot.getRangeAxis();
numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
CategoryAxis categoryaxis = categoryplot.getDomainAxis();
categoryaxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);//文字倾斜45度
LineAndShapeRenderer lineandshaperenderer = (LineAndShapeRenderer) categoryplot
.getRenderer();
lineandshaperenderer.setShapesVisible(true);
lineandshaperenderer.setDrawOutlines(true);
lineandshaperenderer.setUseFillPaint(true);
//设置两条曲线的不同颜色;
//jfreechart1.getSubtitleCount()----表示有多少条曲线;
lineandshaperenderer.setSeriesPaint(0, Color.RED);
lineandshaperenderer.setSeriesPaint(1, Color.BLUE);
lineandshaperenderer.setSeriesFillPaint(0, Color.RED);
lineandshaperenderer.setSeriesFillPaint(1, Color.BLUE);
if(null !=contName && !"".equals(contName)){
lineandshaperenderer.setSeriesPaint(2, Color.yellow);
lineandshaperenderer.setSeriesFillPaint(2, Color.yellow);
} String imageFile_qx=null;
lineandshaperenderer.setBaseLinesVisible(true);
Calendar calendar=Calendar.getInstance();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm");
try {
Date date=df.parse(calendar.getTime().toLocaleString());
imageFile_qx=imgName+date.toLocaleString().split(" ")[0]+" "+date.toLocaleString().split(" ")[1].split(":")[0]+"时"+date.toLocaleString().split(" ")[1].split(":")[1]+"分"+".jpeg";
excelName=imageFile_qx.split(".jpeg")[0];
} catch (Exception e1) {
e1.printStackTrace();
}
// try {
// //向内存中绘制出真实的曲线图并且保存在session当中;
// imageFile_qx = ServletUtilities.saveChartAsJPEG(jfreechart1,600,450,request.getSession());//设置生成图片,包括图片的大小,长度是500,宽是400
// } catch (IOException e) {
// e.printStackTrace();
// }
String fullpath = InitServlet.sysPath+"JfreeImg\\"+imageFile_qx;
try {
fos_jpg = new FileOutputStream(fullpath);
ChartUtilities.writeChartAsJPEG(fos_jpg,1.0f,jfreechart1,600,450,null);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return fullpath;//图片路径;
}
public static String plantTimerSerLine(List list,String topName,String vlineName,String hlineName,HttpServletRequest request){
return null;
}}