<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    何以解憂?唯有Java

    其實程序員也懂得浪漫!
    posts - 90, comments - 637, trackbacks - 0, articles - 2
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理
    Swing 自定義組件系列-SwingHacks學習筆記(1)


    一、自定義JPanel(一個以圖像填充的組件)

    1.1 :一個JPanel 的定制子類

    ImagePanel.java:


    package org.component;



    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() 方法繪制圖像:


    public void paintComponent(Graphics g) {
            g.drawImage(img,
    0,0,null);
        }

    請注意:應當重寫paintComponent() 而不是paint(),否則面板中的子組件將無法被繪制。


    下面來測試一下我們些的組件:

    1.2測試圖像面板:

    ImagePanelTest.java


    import javax.swing.*;


    public class ImagePanelTest {


    public static void main(String[] args) {


    //ImagePanel panel = new ImagePanel(new ImageIcon("images/background.png").getImage());

    ImagePanel panel = new ImagePanel(new ImageIcon(ImagePanelTest.class.getResource("/images/java3d.png")).getImage());


    JFrame frame = new JFrame("自定義組件--ImagePanel");

    frame.getContentPane().add(panel);

    frame.pack();

    frame.setVisible(true);

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }

    }


    注意:如果你寫的java 代碼是用普通文本編輯器,如Editplus,或NotePad2 之類的并且使用命令行來編譯上面的java代碼,我建議你用用綠色那一行的代碼,把紅色的那一行代碼注釋掉。(其實不注釋掉也可以用) 但是如果你用的是NetBeans 或者eclipse 之類的

    IDE 那么你最好把用紅色部分的代碼,因為這是IDE 的資源定位問題,如果用綠色那一行代碼運行的結果就會出錯,顯示的不是你想要看到的結果。不信你試試看就知道了。


    運行的結果:(Linux 環境)  運行所需圖片:點這里下載







    評論

    # re: SwingHacks學習筆記(1)-----自定義JPanel(一個以圖像填充的組件)  回復  更多評論   

    2008-12-12 11:35 by eydp@163.com
    學習中,,,,謝謝樓主,希望樓主多提供些netBeans的資料,樓主有什么好的中文資料或是代碼能否發一份,謝謝eydp@163.com

    # re: SwingHacks學習筆記(1)-----自定義JPanel(一個以圖像填充的組件)  回復  更多評論   

    2008-12-12 12:45 by 日月雨林@gmail.com
    @eydp@163.com
    其實NetBeans官方已經提供了非常多的中文資料了,你有空的話去看看,里面有很多的教程。

    # re: SwingHacks學習筆記(1)-----自定義JPanel(一個以圖像填充的組件)  回復  更多評論   

    2008-12-24 09:56 by eydp@hotmail.com
    好的,謝謝了

    # re: SwingHacks學習筆記(1)-----自定義JPanel(一個以圖像填充的組件)  回復  更多評論   

    2009-05-25 17:09 by jzy
    參照你的
    setPreferredSize(size);
    setMinimumSize(size);
    setMaximumSize(size);
    setSize(size);
    解決了一個圖像不能scrollable的問題,非常感謝
    主站蜘蛛池模板: 猫咪www免费人成网站| 亚洲成a人片在线观| 99re在线免费视频| 男人免费视频一区二区在线观看 | 国产精品免费看久久久无码| 日韩精品无码免费视频| 亚洲人6666成人观看| 亚洲精品视频免费| 久久WWW色情成人免费观看| 久久国产精品免费| 亚洲国产欧美国产综合一区| 国产aⅴ无码专区亚洲av| 在线播放亚洲第一字幕| 国产91在线免费| 国产精品视频免费一区二区| 99久久精品免费精品国产| 免费91麻豆精品国产自产在线观看 | 久久免费看黄a级毛片| 日本卡1卡2卡三卡免费| av午夜福利一片免费看久久| 日韩毛片一区视频免费| 久久久免费观成人影院| 中文无码日韩欧免费视频| 一日本道a高清免费播放| 中国内地毛片免费高清| 国产三级在线免费观看| 思思久久99热免费精品6 | 午夜dj免费在线观看| 国产美女被遭强高潮免费网站 | 亚洲性一级理论片在线观看| 亚洲乱码一区av春药高潮| 日本亚洲精品色婷婷在线影院| 国产成人精品日本亚洲直接| wwwxxx亚洲| 麻豆一区二区三区蜜桃免费| 久青草国产免费观看| h视频在线免费看| 亚洲性久久久影院| 亚洲视频在线免费播放| 亚洲精品人成网在线播放影院| 一级一级一级毛片免费毛片|