1 利用標(biāo)簽組件來(lái)設(shè)置
創(chuàng)新互聯(lián)致力于互聯(lián)網(wǎng)網(wǎng)站建設(shè)與網(wǎng)站營(yíng)銷,提供成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、網(wǎng)站開發(fā)、seo優(yōu)化、網(wǎng)站排名、互聯(lián)網(wǎng)營(yíng)銷、成都小程序開發(fā)、公眾號(hào)商城、等建站開發(fā),創(chuàng)新互聯(lián)網(wǎng)站建設(shè)策劃專家,為不同類型的客戶提供良好的互聯(lián)網(wǎng)應(yīng)用定制解決方案,幫助客戶在新的全球化互聯(lián)網(wǎng)環(huán)境中保持優(yōu)勢(shì)。
標(biāo)簽本來(lái)是一種最簡(jiǎn)單的組件,為什么可以將它設(shè)置成為一個(gè)窗體的背景呢?首先還是要了解框架JFrame中的層次結(jié)構(gòu)。JFrame中的層次分布及相對(duì)關(guān)系是:最底層是JRootPane,第二層是JlayerPane,最上層就是ContentPane,也正是我們常說的內(nèi)容面板。所以一般我們拖放的控件就是在ContentPane層上。也就是說我們只需將背景圖片放在JFrame的第二層是JlayerPane上,再把內(nèi)容面板ContentPane設(shè)置為透明,則第二層JlayerPane上放置的圖片即成為內(nèi)容面板的背景了。具體代碼如下:
JPanelpnlMain=new JPanel(); //創(chuàng)建面板pnlMain。
getContentPane().add(pnlMain); //將pnlMain設(shè)置為主面板。
Iconi=new ImageIcon("背景.jpg"); /*用源圖片“背景.jpg”構(gòu)造一個(gè)ImageIcon對(duì)象i,需要注意如果圖片的路徑使用的是相對(duì)路徑,則圖片文件必須放在類文件所在文件夾或項(xiàng)目的根文件夾中,否則圖片的路徑必須用絕對(duì)路徑。*/
JLabellblLogo = new JLabel(i); //用指定的圖片構(gòu)造標(biāo)簽對(duì)象lb
this.getLayeredPane().add(lb, new Integer(Integer.MIN_VALUE));
//把標(biāo)簽放在第二層JlayerPane上。
lb.setBounds(0, 0,ii.getIconWidth(),i.getIconHeight());
//設(shè)置標(biāo)簽的尺寸,即背景圖象的大小。
getConentPane().setOpaque(false); /*把內(nèi)容面板設(shè)置為透明,這樣整個(gè)框架的背景就不再是內(nèi)容面板的背景色,而是第二層中標(biāo)簽的圖像。*/
pnlMain.add(lb); //將標(biāo)簽添加到主面板pnlMain中。
用標(biāo)簽組件JLabel來(lái)設(shè)置窗體背景,其擴(kuò)展性上比較差,且在標(biāo)簽上不能放置其他組件,比如:在放置一個(gè)JButton,整個(gè)布局背景圖就錯(cuò)亂。導(dǎo)致這種現(xiàn)象是因?yàn)镴ava加載組件是有順序的,作為背景的JLabel的代碼一定要放在全部組件代碼的最后,這樣JLabel的背景圖片才不會(huì)被其他組件遮住,從而使整個(gè)布局背景錯(cuò)亂。所以采用這種方式來(lái)設(shè)置窗體背景有很大的局限性。因此最好是采用以下方式來(lái)設(shè)置窗體背景。
2 通過JPanel面板來(lái)設(shè)置窗體背景
JPanel面板是Java中的容器之一。而Java中的容器是沒有背景圖片的屬性的,它們只有背景顏色,如果需要在JPanel面板上設(shè)置窗體背景,就需要重寫paintComponent(Graphics g)方法,即把所要設(shè)置的背景圖片畫上作為JPanel面板的背景。具體實(shí)現(xiàn)如下:
首先定義一個(gè)JPanel的子類BjPanel,由于JPanel的構(gòu)造方法不能添加圖像,因此在創(chuàng)建此子類的時(shí)候先用getImage載入一幅背景圖片,在重寫paintComponent(Graphics g)方法時(shí),利用drawImage方法將其逐漸繪制到屏幕上,并將該面板添加到框架中,最后將該面板設(shè)置為透明。其代碼如下:
import java.awt.*;
import javax.swing.*;
public class bkground
{
public static void main(String args[])
{
BjFramef=newBjFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}
class BjFrame extends JFrame
{
public BjFrame()
{
setSize(WTH,HHT);
BjPanel pl=new BjPanel();
Container contentPane=getContentPane();
contentPane.add(pl);
pl. setOpaque(true);
}
public static final int WTH=300;
public static final int HHT=200;
}
class BjPanel extends JPanel
{
Image im;
public BjPanel()
{
im=Toolkit.getDefaultToolkit().getImage("背景.jpg");//需要注意的是如果用相對(duì)路徑載入圖片,則圖片文件必須放在類文件所在文件夾或項(xiàng)目的根文件夾中,否則必須用絕對(duì)路徑。
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
int imWidth=image.getWidth(this);
Int imHeight=image.getHeight(this); //定義圖片的寬度、高度
int FWidth=getWidth();
int FHeight=getHeight();//定義窗口的寬度、高度
int x=(FWidth-imWidth)/2;
int y=(FHeight-imHeight)/2;//計(jì)算圖片的坐標(biāo),使圖片顯示在窗口正中間
g.drawImage(image,x,y,null);//繪制圖片
}
}
有兩種方式,一個(gè)是用CSS層疊樣式表設(shè)定,第二個(gè)就是在div里面寫,代碼我這也有一些,我copy給你,在CSS文件中寫body {
background:#fff;寫上要用的背景圖片url,一般設(shè)一個(gè)包中,寫入路徑
font-size:12px;
color:#000;
font-family:"宋體";
height:100%;
}
你說的如果是java swing程序,有兩種方法,1、JPanel上放背景;2、JLabel放背景
//?初始化窗口??
public?void?initFrame()?{??
//?利用JPanel添加背景圖片??
GImage?=?new?JPanel()?{??
protected?void?paintComponent(Graphics?g)?{??
ImageIcon?icon?=?new?ImageIcon("image\\benbenla.jpg");??
Image?img?=?icon.getImage();??
g.drawImage(img,?0,?0,?icon.getIconWidth(),??
icon.getIconHeight(),?icon.getImageObserver());??
jframe.setSize(icon.getIconWidth(),?icon.getIconHeight());??
}??
};??
jframe.setTitle("測(cè)試背景圖片");??
jframe.add(GImage);??
jframe.pack();??
jframe.setVisible(true);??
jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);??
}
ImageIcon?icon?=?new?ImageIcon("image\\benbenla.jpg");??
icon.setImage(icon.getImage().getScaledInstance(icon.getIconWidth(),??
icon.getIconHeight(),?Image.SCALE_DEFAULT));??
System.out.println(icon.getIconHeight()?+?""?+?icon.getIconWidth());??
jlpic.setBounds(0,?0,?1366,?768);??
jlpic.setHorizontalAlignment(0);??
jlpic.setIcon(icon);??
jframe.setSize(1366,?768);??
jframe.add(jlpic);??
jframe.pack();??
jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);??
jframe.setVisible(true);
首先繼承JPanel類,然后重寫paintComponent方法
給你個(gè)例子,這是重寫的方法
public void paintComponent(Graphics gs) {
Graphics2D g = (Graphics2D) gs;
super.paintComponent(g);
//畫背景圖片
g.drawImage(gameBG.getImage(), 0, 0, 800, 560, this);
}
記住,要先畫圖片,再畫文字,否則會(huì)被覆蓋
可以利用標(biāo)簽組件來(lái)設(shè)置。
具體方法如下:
利用標(biāo)簽組件來(lái)設(shè)置,具體代碼如下:
JPanelpnlMain=new JPanel(); //創(chuàng)建面板pnlMain。
getContentPane().add(pnlMain); //將pnlMain設(shè)置為主面板。
Iconi=new ImageIcon("背景.jpg"); /*用源圖片“背景.jpg”構(gòu)造一個(gè)ImageIcon對(duì)象i,需要注意如果圖片的路徑使用的是相對(duì)路徑,則圖片文件必須放在類文件所在文件夾或項(xiàng)目的根文件夾中,否則圖片的路徑必須用絕對(duì)路徑。*/
JLabellblLogo = new JLabel(i); //用指定的圖片構(gòu)造標(biāo)簽對(duì)象lb
this.getLayeredPane().add(lb, new Integer(Integer.MIN_VALUE));
//把標(biāo)簽放在第二層JlayerPane上。
lb.setBounds(0, 0,ii.getIconWidth(),i.getIconHeight());
//設(shè)置標(biāo)簽的尺寸,即背景圖象的大小。
getConentPane().setOpaque(false); /*把內(nèi)容面板設(shè)置為透明,這樣整個(gè)框架的背景就不再是內(nèi)容面板的背景色,而是第二層中標(biāo)簽的圖像。*/
pnlMain.add(lb); //將標(biāo)簽添加到主面板pnlMain中。