先来张效果图
这个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