SwingHacks學習筆記(1)-----自定義JPanel(一個以圖像填充的組件)
Posted on 2008-10-11 18:51 guanminglin@gmail.com 閱讀(28233) 評論(4) 編輯 收藏 所屬分類: JavaSE 、讀書筆記
一、自定義JPanel(一個以圖像填充的組件)
例1.1 :一個JPanel 的定制子類
ImagePanel.java:
import java.awt.*;
import javax.swing.*;
public class ImagePanel extends JPanel {
private Image img;
public ImagePanel(Image img) {
this.img = img;
Dimension size = new Dimension(img.getWidth(null),img.getHeight(null));
setPreferredSize(size);
setMinimumSize(size);
setMaximumSize(size);
setSize(size);
setLayout(null);
}
public void paintComponent(Graphics g) {
g.drawImage(img,0,0,null);
}
}
上述構造函數首先會接受等待繪制圖像,并將其存入image成員變量,為后面的的程序作準備。然后調用Dimension size = new Dimension(image.getWidth(null),image.getHeight(null));獲得圖像的的長和寬。之后調用setSize()和setPreferredSize() 來確保面板的大小和圖像的大小完全一致。因為子面板不是使用絕對布局(setLayout(null);) 所以必須將面板的首選值,最大和最小值統統設置一遍。
正確設置面板的大小后,就能通過重寫paintComponent() 方法繪制圖像:
g.drawImage(img,0,0,null);
}
請注意:應當重寫paintComponent() 而不是paint(),否則面板中的子組件將無法被繪制。
下面來測試一下我們些的組件:
例1.2測試圖像面板:
ImagePanelTest.java
注意:如果你寫的java 代碼是用普通文本編輯器,如Editplus,或NotePad2 之類的并且使用命令行來編譯上面的java代碼,我建議你用用綠色那一行的代碼,把紅色的那一行代碼注釋掉。(其實不注釋掉也可以用) 但是如果你用的是NetBeans 或者eclipse 之類的
IDE 那么你最好把用紅色部分的代碼,因為這是IDE 的資源定位問題,如果用綠色那一行代碼運行的結果就會出錯,顯示的不是你想要看到的結果。不信你試試看就知道了。
運行的結果:(Linux
環境) 運行所需圖片:點這里下載