第一次用swing做一個可視化程序,寫第一篇隨筆,有寫的不好的地方請多多見諒。上個星期三在網上看到一個畫愛心的軟件,就想著自己用java也實現一個程序,畫愛心用到的數學函數知識在網上百度的,不是本人原創的。網上也有畫愛心的教程,不過那些教程只能在編譯器裡面運行,無法把文件導出來,導出來會出現圖片資源找不到的問題,只是因為資源的使用的路徑有問題,被這個問題困擾了好久,在網上找到了一種方法,把圖片放到src目錄下,使用類的相對路徑(就是以類為基准找資源的位置)。至於畫愛心主要是不斷重寫JPanel裡面的paint方法。
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JPanel;
public class DrawLove extends JPanel{
private Image image1;
private String str1;//圖片的位置,如果在src目錄下,直接輸入圖片的位置
private double theta=0.00 ;
private double x,y;
private Graphics g;
public double getTheta() {
return theta;
}
public void setTheta(double theta) {
this.theta += theta;
}
public DrawLove(String str1){
this.str1=str1;
this.setLayout(null);
}
public void paintComponent(Graphics g)
{
try {
//通過相對路徑獲取圖片的位置
image1=ImageIO.read(this.getClass().getClassLoader().getResourceAsStream(str1));
} catch (IOException e) {
e.printStackTrace();
}
Graphics2D g2 = (Graphics2D) g;
x= 580-15*(28*Math.pow(Math.sin(theta),3));
y= 240-15*(20*Math.cos(theta)-6*Math.cos(2*theta)-3*Math.cos(3*theta)-Math.cos(4*theta) );
g2.drawImage(image1,(int)x,(int)y,null);
}
}
上面只是畫一朵花的代碼,要花一個完整的愛心,我是通過線程裡面的循環調用這個方法實現的。
public void run() {
while(love.getTheta()< 2*Math.PI){
love.repaint();//容器的重畫
love.revalidate();
try {
Thread.sleep(time);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
frame.getContentPane().add(love);
love.setTheta(0.33);//花的數量
}
frame.getContentPane().remove(love);
}