/**
*@author blovedr
* 功能: java繪圖原理------在窗口界面(或面板上)畫出一張或多張圖片問題解決方法
* 日期: 2018年4月28日 16:20
* 注釋: 學習java的點點記錄, 歡迎各位大神批評指導與交流。
*/
package com.test1;
import javax.swing.*;
import java.awt.*;
public class Demo_1 extends JFrame{
MyPanel mp = null; //自注: 定義MyPanel
public static void main(String[] args) {
// TODO Auto-generated method stub
Demo_1 demo_1 = new Demo_1();
}
public Demo_1()
{
mp = new MyPanel(); //自注: 創建一個MyPanel類的對象mp
this.add(mp); //自注: 將mp加入到this(JFrame)里面去
this.setSize(400, 300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //自注: 為了防止內存泄漏 設置窗口關閉按鈕的默認操作(點擊關閉時退出進程)
this.setVisible(true); //自注: 設置窗體是可見的
}
}
//定義一個MyPanel(我自己的面板, 是用於繪圖和顯示繪圖的區域)
class MyPanel extends JPanel
{
//覆蓋JPanel 的paint方法
//Graphics 是繪圖的重要類, 你可以把它理解成一只畫筆
public void paint(Graphics g)
{
//1. 調用父類函數完成初始化(任務)
//這句話, 不能少
super.paint(g);
System.out.println("paint被調用");
//先畫出一個圓
//g.drawOval(10, 10, 30, 30);
//畫出直線
//g.drawLine(10, 10, 40, 40);
//畫出矩形邊框
//g.drawRect(10, 10, 40, 60); //自注: g.drawRect(x, y, width, height); ---x和y代表矩形的左上角坐標
//填充矩形
//設置顏色
// g.setColor(Color.blue);
// g.fillRect(10, 10, 40, 60);
// g.setColor(Color.red);
// g.fillRect(70, 70, 40, 60);
//在面板上畫出圖片---問題
//Image im = Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/hua.jpg")); //error
//自注:Toolkit 是個類, 它里面有個靜態方法叫 getDefaultToolkit() (得到它工具的集), 然后它有個getImage
// Panel.class.getResource() ---用Panel這個類里面的getResource() 方法把這個圖片加載到這個對象m里面去了。
//解決方法: Image im = Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/hua.jpg"));---將“Panel.class.getResource("/hua.jpg")"替換成圖片的路徑, // 如下面的方法1_示例, 可以在面板上畫出一張或多張圖片。
//在面板上畫出一張圖片問題解決方法1_示例1---三朵花屬於不同路徑(hua,hua2,hua3分別屬於不同文件夾下的單獨一個圖片)
//Image im = Toolkit.getDefaultToolkit().getImage("D:\\picture\\hua\\hua.jpg"); //正確 2018.4.28 11:29
//在面板上畫出一張圖片問題解決方法1_示例2---hua2和hua屬於不同路徑
Image im2 = Toolkit.getDefaultToolkit().getImage("D:\\picture\\hua2\\hua2.jpg"); //正確 2018.4.28 15:18
//在面板上畫出一張圖片問題解決方法1_示例3---hua3和(hua與hua2)屬於不同路徑
//Image im3 = Toolkit.getDefaultToolkit().getImage("D:\\picture\\hua3\\hua3.jpg"); //正確 2018.4.28 15:29
//在面板上畫出一張圖片問題解決方法2_示例---三朵花屬於同一個文件夾(hua,hua2,hua3分別屬於相同同文件夾下的單獨一個圖片)
//Image im = Toolkit.getDefaultToolkit().getImage("D:\\picture\\hua\\hua.jpg");
//Image im2 = Toolkit.getDefaultToolkit().getImage("D:\\picture\\hua\\hua2.jpg"); //error 自注: 如果三個花屬於同一個文件, 程序在這個程序中單獨無法正常顯示圖片 。
//Image im3 = Toolkit.getDefaultToolkit().getImage("D:\\picture\\hua\\hua3.jpg");
//顯示
//g.drawImage(im, 90, 90, 100, 50, this); //示例1 //正確 2018.4.28 11:29
g.drawImage(im2, 90, 90, 100, 50, this); //示例2 //正確 2018.4.28 15:18
//g.drawImage(im3, 90, 90, 100, 50, this); //示例3 //正確 2018.4.28 15:29
//自注: g.drawImage(im, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, observer)
// dx1, dy1表示你畫的圖片的左上角, dx2, dy2表示你用的圖片要畫多寬多高(dx2, dy2 ---寬, 高), this代表JPanel本身。
}
}