<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的問題,非常感謝
    主站蜘蛛池模板: 亚洲国产精品激情在线观看| 久久精品视频免费看| 成年人免费网站在线观看| 亚洲an天堂an在线观看| 国产中文字幕在线免费观看| 国产精品亚洲产品一区二区三区| 免费无码午夜福利片| 天堂亚洲免费视频| 免费看一级一级人妻片| 亚洲国产高清精品线久久| 一区二区三区免费视频网站| 在线观看国产区亚洲一区成人| 中文字幕无码免费久久| 亚洲制服中文字幕第一区| 两个人的视频高清在线观看免费| 亚洲人成色777777精品| 四虎影视永久免费观看| 99精品视频在线观看免费| 久久国产亚洲精品无码| av无码久久久久不卡免费网站| 亚洲午夜无码久久久久小说 | 国产精成人品日日拍夜夜免费| 久久精品国产亚洲AV麻豆~| 91久久成人免费| 亚洲avav天堂av在线网毛片| 亚洲国产精品综合久久网络| 国产猛男猛女超爽免费视频| 亚洲日产2021三区在线| 国产成人免费一区二区三区| 全黄大全大色全免费大片| 亚洲人成777在线播放| 全部免费毛片免费播放| 免费日本一区二区| 亚洲国产欧美一区二区三区| 伊人久久大香线蕉亚洲五月天| 又大又硬又爽又粗又快的视频免费| 日韩欧美亚洲中文乱码| 亚洲成色999久久网站| 国产免费拔擦拔擦8x| 91精品国产免费久久国语蜜臀| 色偷偷亚洲第一综合|