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

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

給Java程序穿花衣

2019-11-18 11:52:49
字體:
來源:轉載
供稿:網友

  經常聽朋友說,java編寫的程序界面比較單一,不好進行個性化配置?,F在讓我們一起來了解有關Java界面樣式相關類的知識,以及如何用Java寫出變幻莫測的用戶界面,讓Java程序也擁有時髦的換膚功能。
  實現原理
  Java平臺成熟后,設計人員與開發人員就熟悉到需要連續性好、兼容性好、輕易使用的Java程序界面。這時Sun就推出了“Look and Feel”機制迎合這種需求。它提供了一種獨特的、與平臺無關的程序外觀,以及標準的界面行為。它可以在各個平臺上使用同一“Look and Feel”,從而縮短設計與開發周期,降低軟件使用人員的培訓費用。這是“Look and Feel”設計的初衷?,F在我們來使用這種特性為Java程序穿上花衣。
  
  要讓Java程序具備換膚功能,首先要求有以下JDK版本:
  
  1.Sun JDK1.1.7B/Swing1.1.1 (Windows);
  
  2.Sun JDK1.2.2 (Windows、Solaris、 linux);
  
  3.Sun JDK 1.3 或以上版本 (Windows)。
  
  我們先來熟悉“Look and Feel”幾個相關的類以及API,以便來理解我們的換膚術。與“Look and Feel”密切相關的是LookAndFeel抽象類和UIManager類。
  
  LookAndFeel類
  
  LookAndFeel是一個抽象類,除了提供了一些static方法,還定義了一些抽象的個性化設置方法來由子類實現。
  
  從JDK1.1.3開始,Sun提供了三個LookAndFeel的子類 javax.swing.plaf.metal.MetalLookAndFeel、com.sun.java.swing.plaf.motif.MotifLookAndFeel、com.sun.java.swing.plaf.windows. WindowsLookAndFeel。它們分別提供了“Metal”、“Motif”與“Windows”的界面式樣。也就是說,任何基于Swing的界面程序本身都可以使用三種系統提供的皮膚。實際上我們也可以直接或間接繼續LookAndFeel類,自己編寫一種“皮膚”。在這里我們要使用到一個開放源代碼的產品SKIN Look And Feel 1.2.2,在http://www.l2fPRod.com/可以找到它的全部源代碼。Skin Look And Feel本身還可以更換http://www.l2fprod.com/提供的各種“皮膚”,讓你的程序可以各種“皮膚”示人。
  
  UIManager類
  
  這個類就是Swing界面治理的核心,治理Swing的小應用程序以及應用程序樣式的狀態。UIManager類提供了下列靜態方法用于更換與治理“Look and Feel”:
  
  static void addAuxiliaryLookAndFeel(LookAndFeel laf)
  //增加一個“Look And Feel”到輔助的“look and feels”列表
  static LookAndFeel[] getAuxiliaryLookAndFeels()
  //返回輔助的“look and feels”列表(可能為空)。
  static String getCrossPlatformLookAndFeelClassName()
  //返回缺省的實現了跨平臺的Look and Feel——即Java Look and Feel(JLF)。
  static UIManager.LookAndFeelInfo[] getInstalledLookAndFeels()
  //返回了在目前已經安裝的LookAndFeel的信息。
  static LookAndFeel getLookAndFeel()
  //返回當前使用的Look and Feel
  static String getSystemLookAndFeelClassName()
  //返回與當前系統相關的本地系統Look and Feel,假如沒有實現本地Look and
  Feel則返回缺省的跨平臺的Look and Feel。
  static void installLookAndFeel(String name, String className)
  //創建一個新的Look and Feel并安裝到當前系統。
  static void installLookAndFeel(UIManager.LookAndFeelInfo info)
  //創建一個新的Look and Feel并安裝到當前系統。
  static boolean removeAuxiliaryLookAndFeel(LookAndFeel laf)
  //從輔助的“look and feels”列表刪除一個“Look And Feel”
  static void setInstalledLookAndFeels(UIManager.LookAndFeelInfo[] infos)
  //設置當前的已安裝Look and Feel信。
  static void setLookAndFeel(LookAndFeel newLookAndFeel)
  //設置當前使用的LookAndFeel。
  static void setLookAndFeel(String className)
  //設置當前使用的LookAndFeel。參數是類名。
  
  
  
  
  源碼剖析
  
  
  下面的源代碼可以在Skin Look And Feel 1.2.2下的源代碼根目錄下找到(比如我下載的zip包是skinlf-1.2.2-20020611.zip,解壓后,在src目錄下的Skinit.java)。
  
  public class Skinit extends javax.swing.JApplet
   {
   /**
   * The main program for the Skinit class
   *
   * @param args The command line arguments
   * @exception Exception Description of Exception
   */
   public static void main(String[] args) throws Exception
  {
   if (args.length == 0) {
   printUsage();
   }
   int mainClassNameIndex = -1;
   String gtktheme = null;
   String kdetheme = null;
   String packtheme = null;
  
   for (int i = 0, c = args.length; i < c; i++) {
   if (args[i].equals("-gtk")) {
   gtktheme = args[++i];
  }
  else if (args[i].equals("-kde")) {
  kdetheme = args[++i];
  }
  else if (args[i].equals("-pack")) {
  packtheme = args[++i];
  }
  else {
  mainClassNameIndex = i;
  break;
   }
  }
  
  String[] realArgs = new String[args.length - mainClassNameIndex - 1];
  for (int i = 0, c = realArgs.length; i < c; i++) {
  realArgs[i] = args[mainClassNameIndex + i + 1];
  }
  
  // First try to find the class
  Class clazz = null;
  try {
  clazz = Class.forName(args[mainClassNameIndex]);
  } catch (ClassNotFoundException e) {
  System.err.println("The class " + args[mainClassNameIndex] + "
  was not found in the classpath.");
  System.exit(1);
  } catch (Throwable e) {
  e.printStackTrace();
  System.exit(1);
  }
  // if the class exists, get the main method
  Method mainMethod = null;
  try {
  mainMethod = clazz.getMethod("main", new Class[]{String[].class});
  } catch (NoSUChMethodException e) {
  System.err.println("No method public static void main(String[] args) in " +
  clazz.getName());
  System.exit(1);
  } catch (Throwable e) {
  e.printStackTrace();
  System.exit(1);
  }
  // try to make sure the main method is accessible
  try {
  mainMethod.setAccessible(true);
  } catch (Throwable e) {
  }
  // main class and main method found, time to load the skin
  Skin skin = null;
  if (packtheme != null) {
  if (SkinUtils.DEBUG) {
  System.out.println("Loading themepack " + packtheme);
  }
  skin = SkinLookAndFeel.loadThemePack(packtheme);
  }
  else if (gtktheme != null) {
  if (kdetheme != null) {
  skin = new CompoundSkin(SkinLookAndFeel.loadSkin(gtktheme),
  SkinLookAndFeel.loadSkin(kdetheme));
  }
  else {
  skin = SkinLookAndFeel.loadSkin(gtktheme);
   }
  }
  /*
  * try to use the user default skin
  */
  if (skin == null) {
  if (SkinUtils.DEBUG) {
  System.out.println("Trying user skin");
  }
  skin = SkinLookAndFeel.getSkin();
  }
  if (skin != null) {
  SkinLookAndFeel.setSkin(skin);
  SkinLookAndFeel lnf = new SkinLookAndFeel();
  UIManager.setLookAndFeel(lnf);
  UIManager.addPropertyChangeListener(
  new PropertyChangeListener() {
  public void propertyChange(PropertyChangeEvent event) {
  Object newLF = event.getNewValue();
  if ((newLF instanceof SkinLookAndFeel) == false) {
  try {
  UIManager.setLookAndFeel(new SkinLookAndFeel());
  } catch (Exception e) {
  e.printStackTrace();
   }
   }
   }
   });
  }
  else {
  System.out.println("No GTK theme provided, defaulting to application Look And
  Feel");
  }
  try {
  mainMethod.invoke(null, new Object[]{realArgs});
  } catch (IllegalAccessException e) {
  System.err.println("Please make sure the class " + clazz.getName() +
  " and the method main(String[] args) are public.");
  System.exit(1);
  } catch (Throwable e) {
  e.printStackTrace();
  System.exit(1);
  }
  }
  /**
  * Description of the Method
  */
  static void printUsage() {
  String usage = "Skinit - Skin Look And Feel wrapper/n" +
  "Usage: skinit [options] class [args...]/n" +
  "

上一篇:Java的封裝功能

下一篇:HelloWorld 攻略

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
午夜精品99久久免费| 91国产高清在线| 欧美黑人一区二区三区| 精品久久久久久久大神国产| 日本久久亚洲电影| 欧美网站在线观看| 久久精品国产亚洲精品2020| 97视频在线观看免费| 亚洲美女激情视频| 久久久久亚洲精品| 欧美日韩中国免费专区在线看| 清纯唯美亚洲综合| 欧美日韩中文字幕综合视频| 欧美高跟鞋交xxxxxhd| 欧美另类精品xxxx孕妇| 日本精品久久中文字幕佐佐木| 九九热这里只有精品6| 免费97视频在线精品国自产拍| 中文字幕亚洲国产| 欧美激情乱人伦一区| 日韩精品极品毛片系列视频| 国产精品久久久久久久久免费看| 性欧美视频videos6一9| 亚洲欧美精品suv| 亚洲国产精品资源| 欧美电影在线免费观看网站| 欧美俄罗斯性视频| 久久福利网址导航| 91免费国产视频| 久久精品影视伊人网| 一本色道久久综合亚洲精品小说| 欧美日韩国产一中文字不卡| 日韩三级影视基地| 亚洲第一av在线| 国产精品久久久久久久一区探花| 久久久久久美女| 最近2019中文免费高清视频观看www99| 久久国产视频网站| 日本精品在线视频| 中文字幕国产精品| 97国产在线观看| 国产精品女人久久久久久| 一区二区成人精品| 亚洲精品日产aⅴ| 狠狠躁18三区二区一区| 国产精品日韩在线一区| 久久国产加勒比精品无码| 亚洲欧美日韩综合| 欧美性猛交xxxx免费看久久久| 久久久久久噜噜噜久久久精品| 日韩av在线最新| 性夜试看影院91社区| 亚洲www在线观看| 亚洲天堂av女优| 亚洲自拍偷拍色图| 91中文字幕在线| 国产综合在线看| 日本19禁啪啪免费观看www| 久久99精品久久久久久青青91| 日韩中文在线中文网在线观看| 欧美亚洲视频在线观看| 欧美国产日韩视频| 2020久久国产精品| 亚洲www在线| 成人写真视频福利网| 欧美区在线播放| 91免费福利视频| 久久久久久伊人| 欧美影院成年免费版| 国产一区二区三区18| 亚洲视频国产视频| 亚洲最大av网| 久青草国产97香蕉在线视频| 日韩中文字幕在线精品| 欧美巨乳在线观看| 久久久久久久久91| 午夜精品久久久久久久99热浪潮| 成人性生交大片免费看视频直播| 国产欧美中文字幕| 国产精品久久久久久久久久尿| 91精品在线播放| 欧美性开放视频| 久久精品视频在线观看| 欧美亚洲另类在线| 成人网页在线免费观看| 欧美理论电影在线播放| 国产欧美亚洲视频| 热久久免费视频精品| 91国产美女视频| 国产一区二区丝袜高跟鞋图片| 伊人久久免费视频| 日韩电影中文 亚洲精品乱码| 亚洲人成网站777色婷婷| 国产精品丝袜久久久久久高清| 亚洲精品456在线播放狼人| 日韩av在线精品| 欧美大全免费观看电视剧大泉洋| 国产精品日韩电影| 亚洲精品成人久久| 成人欧美一区二区三区黑人| 国产97在线视频| 久久精品美女视频网站| www.久久久久久.com| 中文字幕日韩在线视频| 97精品视频在线播放| 国产精品视频精品视频| 日韩美女在线看| 亚洲国产精品视频在线观看| 国产成人亚洲精品| 久久色精品视频| 日本三级韩国三级久久| 欧美性猛交xxxx富婆| 92裸体在线视频网站| 国产成人极品视频| 在线播放日韩专区| 亚洲欧美精品中文字幕在线| 久久久久久久爱| 91欧美日韩一区| 一区二区三区视频观看| 日韩国产欧美区| 国产日本欧美一区二区三区在线| 91亚洲午夜在线| 亚洲精品一区二区在线| 国产亚洲视频在线| 国产日韩在线一区| 亚洲欧洲中文天堂| 国模视频一区二区三区| 91精品在线观看视频| 国产精品国内视频| 国产精品久久久久av| 九九综合九九综合| 97精品国产97久久久久久春色| 97超级碰碰碰久久久| 亚洲成人国产精品| 精品视频久久久久久| 午夜伦理精品一区| 欧美丝袜一区二区| 亚洲自拍中文字幕| 亚洲国产精品小视频| 成人欧美在线观看| 日韩麻豆第一页| 91久久精品美女高潮| 九九热这里只有在线精品视| 欧美激情亚洲视频| 成人黄色免费网站在线观看| 久久精品国产免费观看| 精品毛片三在线观看| 成人午夜黄色影院| 2021久久精品国产99国产精品| 亚洲成人久久网| 日韩精品免费电影| 91视频免费在线| 亚洲精品国产美女| 色综合久久久久久中文网| 69av成年福利视频| 欧美重口另类videos人妖| 国产精品视频午夜| 国产视频在线观看一区二区| 国产中文日韩欧美| 中文字幕亚洲天堂| 色噜噜狠狠狠综合曰曰曰| 国模私拍视频一区| 成人欧美一区二区三区黑人| 俺去亚洲欧洲欧美日韩|