• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • Swing-JFrame 淺談如何在JFrame中添加背景色及背景圖片

    標簽: image  swing  string  import  測試  添加  如何  class  照片

    原文地址為:Swing-JFrame 淺談如何在JFrame中添加背景色及背景圖片

    JFrame默認是BorderLayout

    JPanel默認是FlowLayout。

     

     

    1.JFrame設置背景色,注意體會注釋的那句話。

     

    package com.tools;
    
    import java.awt.Color;
    
    import javax.swing.JFrame;
    public class Test extends JFrame
    {
    	public static void main(String[] args)
    	{
    		new Test();
    	}
    	
    	
    	public Test()
    	{
    		this.setSize(400,300);
    		this.setLocation(400,300);
    		this.setBackground(Color.blue);
    		this.getContentPane().setBackground(Color.red);
    		this.getContentPane().setVisible(false);//如果改為true那么就變成了紅色。
    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		this.setVisible(true);
    	}
    }


     2.給JFrame設置背景圖片。

    方法1:通過在JFrame中添加一個JPanel,背景圖片放在JPanel上來實現。代碼如下:

    import java.awt.*;
    
    import javax.swing.*;
    
    
    public class Test extends JFrame
    {
    	//創建一個容器
    	Container ct;
    	//創建背景面板。
    	BackgroundPanel bgp;
    	
    	//創建一個按鈕,用來證明我們的確是創建了背景圖片,而不是一張圖片。
    	JButton jb;
    	public static void main(String[] args)
    	{
    		new Test();
    	}
    	public Test()
    	{
    		//不采用任何布局方式。
    		ct=this.getContentPane();
    		this.setLayout(null);
    		
    		//在這里隨便找一張400*300的照片既可以看到測試結果。
    		bgp=new BackgroundPanel((new ImageIcon("images\\background.jpg")).getImage());
    		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);
    	}
    	//Draw the back ground.
    	public void paintComponent(Graphics g)
    	{
    		super.paintComponents(g);
    		g.drawImage(im,0,0,this.getWidth(),this.getHeight(),this);
    		
    	}
    }


    效果如圖:

     方法2:我們用JLayeredPane,JLayeredPane 為 JFC/Swing 容器添加了深度,允許組件在需要時互相重疊。Integer 對象指定容器中每個組件的深度,其中編號較高的組件位于其他組件之上。常用的幾個層如下圖:

    具體實現代碼如下:

     

     

    /**
     * 給JFrame 添加一個背景圖案。
     */
    package com.swingpractise;
    
    
    import javax.swing.*;
    
    public class JFrameBackground4 extends JFrame
    {
    	//創建一個JLayeredPane用于分層的。
    	JLayeredPane layeredPane;
    	//創建一個Panel和一個Label用于存放圖片,作為背景。
    	JPanel jp;
    	JLabel jl;
    	ImageIcon image;
    	
    	//創建一個按鈕用于測試的。
    	JButton jb;
    	public static void main(String[] args)
    	{
    		new JFrameBackground4();
    	}
    	
    	public JFrameBackground4()
    	{
    		layeredPane=new JLayeredPane();
    		image=new ImageIcon("images\\background.jpg");//隨便找一張圖就可以看到效果。		
    		//創建背景的那些東西
    		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放到最底層。
    		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);	
    	}
    }

    測試效果如下圖:



     歡迎大家一起討論更好更優的方法。


    轉載請注明本文地址:Swing-JFrame 淺談如何在JFrame中添加背景色及背景圖片
    版權聲明:本文為wangchaoqi1985原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/wangchaoqi1985/article/details/80744752

    智能推薦

    vscode添加背景圖片

    1. 找到vscode 安裝目錄 D:\360ruanjian\Microsoft VS Code\resources\app\out\vs\workbench 2. workbench.desktop.main.css 文件添加樣式, 添加完后重啟軟件 3. 結果如下...

    MFC添加背景圖片

    將背景圖片轉化為bmp格式 選中所需的圖片,用Windows自帶的畫圖轉化圖片形式為bmp 在文件中點擊“打開”,選中所需圖片 在文件中另存為bmp格式 將bmp圖片拷入所需改變背景的MFC文件下的res文件里 在Dialog下的IDD_ABOUTBOX中導入res下的圖片 找到類向導,選擇類名,在消息中找到函數OnPaint...

    Next主題添加背景圖片

    文章目錄 操作步驟 添加背景圖片 設置透明 邊框圓角 hexo 和 Next 的版本如下: hexo: 5.2.0 NexT: 7.8.0 操作步驟 進入 themes\next\source\css 目錄中 打開 main.styl 文件 在末尾添加 css 代碼即可 添加背景圖片 值得注意的是,在 main.styl 文件末尾寫的 css 樣式,會覆蓋主題之前的樣式。 以 body 為例,我們...

    Qt添加背景圖片

    主界面中添加 首先,創建資源文件 我這個工程名字叫做untitled,右鍵untitled->添加新文件->Qt Resource file 在工程目錄下建立一個文件夾image用來存放圖片 在main.cpp中添加 得到效果圖 但是光是這樣,圖片不會隨著窗口大小變化而變化,就像是這樣 那么怎么才能動態固定圖片大小那,并且我發現一個問題,當設置子界面后 再退出后主界面背景就沒了 然后我...

    hive 導出數據之一列多行,轉為一行多列

    需求:提取數據 說明:原數據是一列多行,需要轉化為一行多列 待查詢表為:temp_05 待查詢數據為: 待查詢數據如圖: 需要提取的數據表頭如下: 預定日期 昨日價格 前天價格 2018-02-01 2018-02-02 2018-02-03 2018-02-04 可用提數 SQL 數據如圖: 以下為嘗試過程 數據如圖: 數據如圖: 數據如圖: 數據如圖:...

    猜你喜歡

    asp.net做一個簡易的聊天室

    要求: 結果: 關鍵代碼: Default.aspx Default.aspx.cs Default2.aspx Default2.aspx.cs Default3.aspx Default3.aspx.cs Default4.aspx...

    動態SQL和多表關聯-筆記

    《動態SQL與多表關聯》筆記 學習目標 能夠使用動態SQL完成SQL拼接 能夠使用resultMap完成多表查詢 能夠使用一對一查詢 能夠使用一對多查詢 (注:多對多其實就是兩個一個多) 映射文件:為什么要resultMap 目標 定義結果映射 使用結果映射 回顧 在mybatis中有2種配置文件: 核心配置文件,如:sqlMapConfig.xml 實體類映射文件,如:UserMapper.xm...

    【OpenGL C++ UE4】獲取模型頂點及面索引數據,并優化存儲結構供UE4繪制

    目錄 一、功能需求 二、成果 三、環境配置 四、詳細步驟 4.1 Max制作三棱錐并處理 4.2 核心代碼 4.2.1 傳入結構體數據 4.2.2 頂點去重、更新索引 4.2.3 輸出本地CSV文件 4.3 UE4繪制 一、功能需求 想必你肯定會問我一個問題,UE4直接導入模型不好么? 哈哈,前提是在做畢設時,導師提供的只有頂點與面索引數據,沒有模型。 下文詳細介紹了畢設開發中的難點,涉...

    解決Pyinstaller打包numpy和pandas庫文件過大問題

    解決Pyinstaller壓縮numpy和pandas庫文件過大問題 文件包類型和網上的方法 Windows下docker的安裝 在docker下實現打包     今天是2021年的第一天,先祝各位小伙伴現年快樂哈。最近因為做了一個項目,需要打包文件,文件中包含了numpy和pandas庫,結果打包出來幾百行的代碼居然要900m,人都傻了,翻遍了全網找解決方...

    精品国产乱码久久久久久蜜桃不卡