swing内存监控效果

 

先来张效果图


swing内存监控效果

这个demo用到了一个商业组件库,虽然是商业的,但是可以申请试用,还是值得学习的,哈哈,本文最后会附上申请地址

 

全部代码如下

 

package mydemo;

import javax.swing.*;
import twaver.Node;
import twaver.TDataBox;
import twaver.TWaverConst;
import twaver.chart.LineChart;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.TimerTask;
public class MemoryMonitor extends JPanel {
	TDataBox box=new TDataBox();
	LineChart lineChart=new LineChart(box);
	public MemoryMonitor(){
		this.setLayout(new BorderLayout());
		this.add(lineChart,BorderLayout.CENTER);
		final Node memory=new Node();
		memory.putChartStroke(TWaverConst.STROKE_SOLID_2);
		memory.putChartColor(new Color(255,255,0,255));
		box.addElement(memory);
		final Runtime rt = Runtime.getRuntime();
		
		lineChart.getLegendPane().setVisible(false);
		
		lineChart.setFixedValueCount(20);
		lineChart.setBackground(Color.BLACK);
		lineChart.setBackgroundGradient(false);
		lineChart.setBackgroundVisible(true);
		lineChart.setBackgroundOutlineColor(new Color(46,139,87));
		lineChart.setEnableXTranslate(false);
		lineChart.setEnableYZoom(false);
		lineChart.setLowerLimit(0);
		lineChart.setXScaleLineVisible(true);
		lineChart.setYScaleTextVisible(true);
		lineChart.setYScaleTextColor(Color.green);
		lineChart.setXScaleLineStroke(TWaverConst.STROKE_SOLID_1);
		lineChart.setYScaleLineStroke(TWaverConst.STROKE_SOLID_1);
		lineChart.setXScaleLineColor(new Color(46,139,87));
		lineChart.setYScaleLineColor(new Color(46,139,87));
		lineChart.setYAxisVisible(false);
		lineChart.setXAxisVisible(false);
		lineChart.setLineType(TWaverConst.LINE_TYPE_DEFAULT);
		lineChart.setYScaleValueGap(2);
		lineChart.setInterruptedWhenNullValue(true);
		lineChart.setYAxisTextColor(Color.green);
		lineChart.setXAxisFillColor(Color.yellow);
		lineChart.setForeground(Color.green);
		for(int i=0;i<19;i++){
			memory.addChartValue(null);
		}

		Timer t=new Timer(1000,new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				long total = rt.totalMemory();
				lineChart.setYAxisText("Total:"+(total/1024/1024)+"M");
				lineChart.setUpperLimit(total/1024/1024);
				memory.addChartValue((rt.totalMemory()-rt.freeMemory())/1024/1024);
				lineChart.setTitle("Used:"+((rt.totalMemory()-rt.freeMemory())/1024/1024)+"M");
			}
		});
		t.start();
	
		java.util.Timer timer=new java.util.Timer(true);
		timer.schedule(new TimerTask() {
			@Override
			public void run() {
				for(int i=0;i<80000;i++){
					System.out.println();
				}
			}
		}, 0,1000);
	}
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			@Override
			public void run() {
				JFrame frame=new JFrame();
				frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
				frame.setSize(400, 300);
				frame.setLocationRelativeTo(null);
				frame.setResizable(false);
				frame.setContentPane(new MemoryMonitor());
				frame.setVisible(true);
			}
		});
	}
}

 

 
这个demo使用了一个名叫LineChart的图表控件,比较方便的地方是不用自己写2D代码绘制了,在对象上设置各种属性就可以(对于我这种喜欢偷懒的人来说真是福音啊)。

简单的介绍下LineChart的属性

setY/XAxis.... 用来设置坐标轴的相关属性

setY/XScale... 用来设置刻度的相关属性

 

属性太多不一一解释了,有兴趣的同学可以自行查看API

组件库的申请地址:http://www.servasoftware.com/ch/twaver.php?p_id=99

你可能感兴趣的:(swing)