1. 程式人生 > >JFrame 設定背景圖片

JFrame 設定背景圖片

設定JFrame的背景圖片由兩種方式:
1.Jpanel類的paintComponent(Graphics g)重新繪製背景圖片
2.利用LayeredPane為Swing控制元件增加了深度,允許組建在需要的時候互相重疊
    由低到高的層次是:Default,Palette,Modal,PopUp,Drag

執行展示:稍後上傳

Tips:
(1)paintComponent(Graphics g)以及paint()的區別:
super.paintComponent(g)是父類JPanel裡的方法,會把整個面板用背景色重畫一遍,起到清屏的作用

awt控制元件中是在paint方法進行繪製, 所以在awt控制元件繼承時,只要簡單的覆蓋paint方法就可以了。
而在swing控制元件中,paint方法會依次呼叫paintcomponent, paintborder,
paintchildren三個方法,後兩者一般預設即可,所以swing程式設計時,如果繼承jcomponent或者其子類,要覆蓋paintcomponent而不是paint方法

(2)LayeredPane的說明
JLayeredPanel 作為Java層次面板是建立多編輯視窗與實現某些特殊顯示層次效果的最好方法
當前已經內建支援JLayeredPanel的元件包括JFrame,JDialog,JDesktopPanel本身就是個JLayeredPanel物件,JLayeredPanel中可以包含多個JComponent元件物件,並且可以相互切換到編輯狀態。
*值得注意的是:
由於JLayeredPanel沒有layoutManager所以必須完成設定setBounds()函式對每個新增到JLayeredPanel的物件,否則會導致無法顯示該元件。由於JLayeredPanel沒有layoutManager所以必須完成設定setBounds()函式對每個新增到JLayeredPanel的物件,否則會導致無法顯示該元件。

方法1:

import java.awt.*;  
import javax.swing.*;  

//方法1:通過在JFrame中新增一個JPanel,背景圖片放在JPanel上來實現
public class Java_JFrame extends JFrame         //預設的事BorderLayout
{  
    //建立一個容器  
    Container ct;  
    //建立背景面板。  
    BackgroundPanel bgp;         //自定義的背景類 

    //建立一個按鈕,用來證明我們的確是建立了背景圖片,而不是一張圖片。  
    JButton jb;  
    public
static void main(String[] args) { new Java_JFrame(); } public Java_JFrame() { //不採用任何佈局方式。 ct=this.getContentPane(); this.setLayout(null); //重新繪製背景圖片 bgp=new BackgroundPanel((new ImageIcon("D:\\Fox DownLoad\\Editplus_CK_XP85\\5.png")).getImage()); //引數是一個Image物件, bgp.setBounds(0,0,400,300); ct.add(bgp); //建立按鈕 jb=new JButton("測試按鈕"); jb.setBounds(60,30,160,30); ct.add(jb); this.setSize(400,300); this.setLocation(400,300); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); } } class BackgroundPanel extends JPanel { Image im; public BackgroundPanel(Image im) { this.im=im; this.setOpaque(true); //設定控制元件不透明,若是false,那麼就是透明 } //Draw the background again,繼承自Jpanle,是Swing控制元件需要繼承實現的方法,而不是AWT中的Paint() public void paintComponent(Graphics g) //繪圖類,詳情可見博主的Java 下 java-Graphics { super.paintComponents(g); g.drawImage(im,0,0,this.getWidth(),this.getHeight(),this); //繪製指定影象中當前可用的影象。影象的左上角位於該圖形上下文座標空間的 (x, y)。影象中的透明畫素不影響該處已存在的畫素 } }

方法2:

//我們用JLayeredPane,JLayeredPane 為 JFC/Swing 容器添加了深度,允許元件在需要時互相重疊。
//Integer 物件指定容器中每個元件的深度,其中編號較高的元件位於其他元件之上
//層次依次是:Default,Palette,Modal,PopUp,Drag
public class Java_JFrame extends JFrame  
{  
    //建立一個JLayeredPane用於分層的。  
    JLayeredPane layeredPane;  
    //建立一個Panel和一個Label用於存放圖片,作為背景。  
    JPanel jp;  
    JLabel jl;  
    ImageIcon image;  

    //建立一個按鈕用於測試的。  
    JButton jb;  
    public static void main(String[] args)  
    {  
        new Java_JFrame();  
    }  

    public Java_JFrame()  
    {  
        layeredPane=new JLayeredPane();  
        image=new ImageIcon("D:\\Fox DownLoad\\Editplus_CK_XP85\\5.png");//隨便找一張圖就可以看到效果。        
        //建立背景的那些東西  
        jp=new JPanel();  
        jp.setBounds(0,0,image.getIconWidth(),image.getIconHeight());  

        jl=new JLabel(image);  
//      jl.setBounds(0,0,image.getIconWidth(),image.getIconHeight());  
        jp.add(jl);  

        //建立一個測試按鈕  
        jb=new JButton("測試按鈕");  
        jb.setBounds(100,100,100,100);  

        //將jp放到最底層。                                    /*層次關係可見方法2下面的註釋*/
        layeredPane.add(jp,JLayeredPane.DEFAULT_LAYER);  
        //將jb放到高一層的地方  
        layeredPane.add(jb,JLayeredPane.MODAL_LAYER);  

        this.setLayeredPane(layeredPane);  
        this.setSize(image.getIconWidth(),image.getIconHeight());  
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
        this.setLocation(image.getIconWidth(),image.getIconHeight());  
        this.setVisible(true);    
    }  
}

有什麼意見或者疑問可以提出來~

相關推薦

JFrame 設定背景圖片

設定JFrame的背景圖片由兩種方式: 1.Jpanel類的paintComponent(Graphics g)重新繪製背景圖片 2.利用LayeredPane為Swing控制元件增加了深度,允許組建在

74 - three.js 筆記 - 通過透明渲染設定背景圖片

1、示例 示例 http://ithanmang.com/threeJs/home/201809/20180910/01-canvas-background-image.html 效果 2、實現步驟 2.1、背景圖 2.2、設定背景 此處是給body元素設定了背景

vue.js div 設定背景圖片

佈局: <div class="middle" :style="backgroundDiv"> <img src="./images/[email protected]" style="width: auto; height: 40px;"> </

小程式設定背景圖片

小程式的元素,比如<view>不可以在wxss裡面設定背景圖片,只能在<image>裡面設定圖片 如果想在<view>標籤上設定背景圖片,只能在wxml裡面設定行內樣式,並且圖片還必須是線上圖片 <view style="background-ima

Visual Studio設定背景圖片

今天聽了公司的一個經驗分享會,發現VS竟然可以設定背景圖片!還是個萌妹子!!被萌了一臉鼻血!!! 設定方法很簡單:安裝擴充套件ClaudiaIDE 1、在這裡下載擴充套件,https://visualstudiogallery.msdn.microsoft.com/9ba50f8d-

CSS3——給div設定背景圖片

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <style type="text/css"> *{ margin: 0; padding: 0;

Vue專案中設定背景圖片方法

 例如css樣式 background:url("../../assets/head.jpg");  1、在data中定義如下: export default { name: 'productdetailspage', data() { return { n

PyCharm使用技巧之設定背景圖片

設定的路徑為: File | Settings | Appearance & Behavior | Appearance 選擇Background Image 彈窗的視窗中 Image:點選

background-size 設定背景圖片尺寸

background-size 有三個屬性 auto :背景圖片的真實大小 cover: 背景圖片等比例縮放到鋪滿盒子 contain:背景圖片拉伸以適應盒子大小 還可以直接設定大小 backgroun-size:100% 100%; 當寫一個100%的時候只有寬適應 上下出現留

給body設定背景圖片,整個圖片完整的充滿螢幕

我想讓整個登入介面有一個背景圖片,自然想到的是在body上加background,程式碼如下: body { width:100%; height: 100%; background-image: url(../../Content/images/back

Vue專案中設定背景圖片

在Vue專案開發中我們經常要向頁面中新增背景圖片,可是當我們在樣式中添加了背景圖片後,編譯打包後,配置到伺服器上時,由於路徑解析的問題,圖片並不能夠正確的顯示出來,如下CSS樣式: background:url("../../assets/head.jpg")

[Qt筆記]:QWidget設定背景圖片

QWidget - 設定背景圖片: //設定背景圖片 this->setAutoFillBackground(true); // 這句要加上, 否則可能顯示不出背景圖.

Android studio2.0在app中設定背景圖片及新增圖片資源

我還處於摸索階段,也是在慢慢倒騰,持續更新,希望能幫助到有需要的人 首先將需要的圖片轉成png格式(png格式的圖片顏色過渡平滑且支援透明度),牆紙或啟動畫面的圖片資源儲存為jpg格式。 將圖片儲存到相應的工程之下,不要放錯了。 某工程/app/src/m

【微信小程式常見問題】view標籤設定背景圖片手機無法預覽解決方案一

操作步驟: 1、將頁面放置於專案根目錄下,編寫頁面結構程式碼,如下圖 2、手機預覽除錯效果 ☛在使用樣式設定背景圖片過程中有遇到任何問題或者不明白的地方,歡迎新增我的微信進行諮詢,感謝您的支援!微

利用JPanel和JLabel設定背景圖片

     //建立面板1,放置背景圖片1 JPanel jPanelTop=new JPanel(); jPanelTop.setBounds(0,-5,100,100); //x=0,y=-5用來設定面板距離窗體左上角的距離(單位是畫素) jPanel

background-size設定背景圖片的大小

<!DOCTYPE www.dztcsd.comhtml> <html> <head>  <meta charset="utf-8"> <title>背景圖片大小</title> <style type="text/css">

django之設定背景圖片 CSS 拉伸 平鋪

django2.0   背景圖片存在static資料夾中1、設定setting.py資料夾。STATIC_URL = '/static/' STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'static'), ]2、在html檔

iOS UIView設定背景圖片

無法直接設定,可以通過如下方法進行設定: backgroundView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"123"]]; 這樣出來就是背景圖片了不過這樣實現的背景需

java中JLabel設定背景圖片

 先貼程式碼,再看註釋;//顯示圖片的JLabel ImageIcon background =new ImageIcon(test.class.getResource("jpan

IntelliJ IDEA 2018.2設定背景圖片及透明度

       最近剛到一家公司,之前用的是MyEclipse2014,現在卻要切換到IDEA上了,剛接觸的時候,感覺黑色的介面很酷,不過時間久了就覺得有點太單調,所以就在網上看了一下如何設定背景圖片,讓一些還不會的童鞋可以做個參考.       1. 安裝backgroun