程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> java swing畫圖片愛心,javaswing畫愛心

java swing畫圖片愛心,javaswing畫愛心

編輯:JAVA綜合教程

java swing畫圖片愛心,javaswing畫愛心


  第一次用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);
        
    }

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved