亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

JFC/Swing活學活用之創建自定義圖像組件

2019-11-18 11:15:47
字體:
來源:轉載
供稿:網友
下載本文源代碼

  引言

  本文將講述如何應用JFC/Swing內建的圖像組件來創建完全自定義的基于圖像的用戶接口。

  大多數Swing應用程序是通過標準VM提供的,或者是客戶提供的外觀和感覺(L&F)來獲取它們的外在展示。L&F是一個完整的體系架構,VM需要做很多內在的工作,并且它還不是完全自定義的。舉個例子來說吧,在基于L&F的前提下,我們可以創建一個按鈕,看起來有點像交通崗上的"紅燈",隨之而來的在你的應用中所有的按鈕就都有了這樣的"相貌"。然而有時我們所真正需要的就是一個看起來與圖像完全一樣的按鈕,就像Web上面基于圖像的按鈕一樣。

  為了讓大家更好的了解我們所要介紹的內容,先來看一下最終的顯示效果,如下圖所示:一個帶面板(Panel)的窗格(Frame)包含了一個標簽(Label),一個按鈕(Button),一個復選框(Checkbox)。面板、標簽和按鈕完全由圖像繪制,完全沒有使用到標準的L&F。復選框是一個標準的Checkbox,但它將被設計成是透明的以搭配圖像背景。

JFC/Swing活學活用之創建自定義圖像組件(圖一)



  第一步 創建背景Panel

  要完成這"天堂"般的工程,首先我們要做的是創建一個圖像背景。因為這樣的組件可重用性(reusable)很高,所以我們創建了JPanel類的一個子類,叫做ImagePanel,參考下面的代碼示例:

  示例代碼1:

package com.demo.jcomponents;

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

/**
* 創建圖像面板
* @author xiazhi
*/
public class ImagePanel extends JPanel
{
 /**
 * 圖形對象
 */
 PRivate Image img;

 /**
 * 構造函數
 *
 * @param img 圖像對象
 */
 public ImagePanel(String img)
 {
  this(new ImageIcon(img).getImage());
 }

 /**
 * 構造函數
 *
 * @param 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的實例作為參數,并將繪制的圖像保存在變量img中以備以后使用。接著調用setSize()和setPreferredSize()方法,并以圖像的尺寸作為參數。這樣可以確保Panel的尺寸與圖像的尺寸完全一致。接下來的操作非常重要,必須顯示地指定Panel的preferred、maximum和minimum尺寸,因為Panel類的父類和子類可能不會使用絕對布局方式。

  小提示:我們都知道,Swing是使用布局治理器(Layout Manager)來控制組件的位置,絕對布局的意思就是不使用布局治理器來控制組件的位置。(可以通過setLayout(null)方法來指定采用絕對布局方式)

  既然這樣,顯示指定的尺寸和位置將會被使用(可以通過setSize()和setLocation()方法)。當使用指定的布局治理器時,preferred,minimum和maximum尺寸可能會被使用。為了適應上面所有的情況,我們只要簡單的設置上面所提及的四個方法就可以了。

  現在,Panel已經設置了適當的尺寸,我們可以通過重載paintComponent()方法來繪制圖像:

public void paintComponent(Graphics g)
{
 g.drawImage(img, 0, 0, null);
}
  小提示:在這里我們重載了paintComponent()方法,而不是paint()方法,這是很重要的一點,要不然子類將不會被重新繪制。

  現在來測試一下我們工作的成果,我們將自定義的Panel添加到一個Frame中,然后顯示該Frame,參考下面的代碼示例:

  示例代碼2:

package com.demo.jcomponents;

import javax.swing.*;

/**
* 測試圖像Panel組件
* @author xiazhi
*/
public class ImageTest1
{
 public static void main(String[] args)
 {

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

  JFrame frame = new JFrame("JFC/Swing:創建以圖像為主題的組件");
  frame.getContentPane().add(panel);

  frame.pack();
  frame.setVisible(true);
 }

 protected static ImageIcon createImageIcon(String path)
 {
  java.net.URL imgURL = ImageTest1.class.getResource(path);
  if (imgURL != null)
  {
   return new ImageIcon(imgURL);
  }
  else
  {
   System.err.println("不能找到指定文件: " + path);
   return null;
  }
 }
}
  程序運行后,顯示效果如下:



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲欧美制服第一页| 91沈先生作品| 日韩在线一区二区三区免费视频| 欧美成人午夜视频| 精品中文字幕在线| 日韩美女写真福利在线观看| 一区二区三区四区在线观看视频| 日韩a**中文字幕| 色综合男人天堂| 成人在线视频网| 日韩最新免费不卡| 国产精品天天狠天天看| 深夜福利91大全| 欧美大尺度电影在线观看| 亚洲精品欧美日韩| 在线视频免费一区二区| 91精品综合视频| 久久伊人91精品综合网站| 精品国内亚洲在观看18黄| 美女av一区二区| 欧美精品免费在线观看| 搡老女人一区二区三区视频tv| 欧美日韩中文字幕综合视频| 亚洲欧美制服另类日韩| 亚洲最新在线视频| 中文字幕亚洲综合久久筱田步美| 国产精品九九久久久久久久| 国产精品热视频| 91国语精品自产拍在线观看性色| 日韩在线视频播放| 色阁综合伊人av| 日韩欧美综合在线视频| 国产偷国产偷亚洲清高网站| 92看片淫黄大片看国产片| 日韩av在线免费观看一区| 欧美情侣性视频| 日韩电视剧在线观看免费网站| 国产精品免费久久久久久| 国产欧美精品一区二区三区-老狼| 成人精品一区二区三区电影免费| 精品日韩视频在线观看| 一区二区日韩精品| 国产精品∨欧美精品v日韩精品| 亚洲精品之草原avav久久| 久久久久久av| 日韩在线视频导航| 亚洲美女av黄| 96pao国产成视频永久免费| 欧美大片va欧美在线播放| 久久久久久久亚洲精品| 韩国v欧美v日本v亚洲| 秋霞午夜一区二区| 国产亚洲精品综合一区91| 国产成人在线播放| 欧美性极品少妇精品网站| 欧美一级大片在线观看| 中文字幕久久精品| 欧美疯狂性受xxxxx另类| 国产精品无码专区在线观看| 亚洲qvod图片区电影| 夜夜嗨av一区二区三区四区| 精品久久久久久久大神国产| 精品日本美女福利在线观看| 亚洲国产一区二区三区四区| 亚洲欧美国产另类| 亚洲专区中文字幕| 自拍偷拍亚洲一区| 精品免费在线视频| 亚洲国产美女精品久久久久∴| 亚洲伊人第一页| 欧美成人精品激情在线观看| 久久精品91久久久久久再现| 亚洲国产精品va在线观看黑人| 亚洲精品在线视频| 欧美日韩中文字幕综合视频| 黄色精品一区二区| 在线日韩欧美视频| 国产精品久久久久久久久| 欧美体内谢she精2性欧美| 日韩亚洲国产中文字幕| 亚洲美女动态图120秒| 日韩成人中文字幕在线观看| 久久人人爽人人| 欧美在线视频播放| 亚洲欧美日韩天堂| 成人免费淫片视频软件| 日韩av日韩在线观看| 国模视频一区二区三区| 色老头一区二区三区| 日韩av综合中文字幕| 亚洲视频在线播放| 91欧美视频网站| 亚洲欧洲免费视频| 午夜剧场成人观在线视频免费观看| 国产精品久久久久久亚洲影视| 欧美第一淫aaasss性| 91精品久久久久久久久青青| 91国产精品91| 欧美激情中文网| 久久亚洲精品中文字幕冲田杏梨| 亚洲成人动漫在线播放| 91在线国产电影| 日韩av第一页| 亚洲美女av电影| 亚洲视频一区二区| 7777免费精品视频| 欧美激情精品久久久久久大尺度| 国产精品看片资源| 高清欧美性猛交| 亚洲欧洲av一区二区| 久久久精品2019中文字幕神马| 国产精品扒开腿做爽爽爽的视频| 精品亚洲一区二区| 国产在线日韩在线| 国产精品美女免费视频| 国产欧美日韩中文| 最近2019年好看中文字幕视频| 亚洲大胆人体视频| 亚洲国产精品女人久久久| 韩国日本不卡在线| 亚洲国产私拍精品国模在线观看| 亚洲精品短视频| 黑人与娇小精品av专区| 国产精品久久久久久五月尺| 97在线视频免费观看| 色偷偷偷亚洲综合网另类| 国产99久久精品一区二区 夜夜躁日日躁| 中文字幕av一区二区三区谷原希美| www.欧美免费| 另类天堂视频在线观看| 国产性猛交xxxx免费看久久| 精品亚洲va在线va天堂资源站| 国产裸体写真av一区二区| 久久在线免费观看视频| 欧美激情在线有限公司| 日韩在线高清视频| 日韩欧美高清视频| 欧美性一区二区三区| 欧美黑人又粗大| 欧美高清在线视频观看不卡| 福利视频一区二区| 欧美日韩日本国产| 日韩欧美在线字幕| 亚洲午夜av久久乱码| 亚洲国产精品久久精品怡红院| 国产欧美日韩精品在线观看| 亚洲欧洲日本专区| 亚洲久久久久久久久久| 最新日韩中文字幕| 2019中文字幕在线观看| 欧美国产高跟鞋裸体秀xxxhd| 久久精品国产亚洲精品| 欧美日本在线视频中文字字幕| 亚洲bt天天射| 欧美国产日韩一区| 中文字幕亚洲欧美日韩高清| 91欧美精品成人综合在线观看| 欧美午夜xxx| 亚洲天堂精品在线| 成人激情视频在线| 2019中文字幕免费视频| 亚洲综合精品一区二区| 亚洲国产欧美一区二区三区同亚洲| www.亚洲一区|