先不搞復雜的,就來一個最簡單的功能吧!
所需實現的功能:給出一個數組,以自然數序列為橫坐標,數組元素值為縱坐標,畫出其折線圖。
注意:只是折線圖,不添加其他坐標軸標簽和標題、網格等等。其實只是畫折線罷了
了解Swing編程的都知道,應該是畫在JPanel里面了,那么圖形繪制功能由awt包的Graphics類提供,繪制函數需要JFrame對象去重寫函數public void paint(Graphics g)
有了以上的鋪墊,就很容易寫出了。主函數來生成一個隨機的序列,進行繪制測試
package plotUtils; import java.awt.Color; import java.awt.Graphics; import java.util.Random; import javax.swing.JFrame; public class ResultPlot extends JFrame{ private double[] y; private int figureHeight = 600; /** * */ private static final long serialVersionUID = 1L; public ResultPlot(double[] y){ super(); this.y = y; setTitle("Line Draw"); setBounds(2, 100, 1500, figureHeight); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } @Override public void paint(Graphics g) { g.setColor(Color.red); int biasX = 15; int h = 2; int biasY = 100; g.drawLine(biasX, this.figureHeight-biasY, biasX+h*(y.length), this.figureHeight-biasY); g.drawLine(biasX,figureHeight-((int)y[0]+biasY), biasX+h, figureHeight-((int)y[1]+biasY)); int x1,y1, x2, y2; for (int i = 1; i < y.length-1; i++) { x1 = biasX+h*i; y1 = figureHeight-((int)y[i]+biasY); x2=biasX+h*(i+1); y2=figureHeight-((int)y[i+1]+biasY); g.drawLine(x1, y1, x2, y2); } g.drawString("("+h*(y.length-1)+","+(int)y[y.length-1]+")", biasX+h*(y.length-1), this.figureHeight-((int)y[y.length-1]+biasY)); } public static void main(String[] args) { double[] y = new double[700]; Random rand = new Random(); for (int i = 0; i < y.length; i++) { y[i] = rand.nextInt(200); } ResultPlot rp = new ResultPlot(y); } }
效果如下,畫了700個點,效果還是很令人滿意的,畢竟需要的功能已經實現了,不過還是繪制的過程挺花時間的。
顯然,只要傳入一個數組,就可以畫出折線了,封裝的還是不錯的,就是功能不夠多,樣式不夠好看。日后再添