程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> LWUIT自定義靈活Style的Component

LWUIT自定義靈活Style的Component

編輯:關於JAVA

當你使用LWUIT的這些Component時,如果一個頁面中的布局比較復雜,組件 很多,而且頁面比較多時,常用的組件諸如 Label,Button,TextField,TextArea 等會用的非常平凡。用起這些組件時,我們常常會設置它的Style,Style很像 web裡的css,它能夠讓我們自定義 Border,Font,FgColor,BgColor,Margin,Padding,設置一個組件的 Style的代碼 很簡單:

代碼

this.getStyle().setBorder(Border border)

但是大多數的組件都有Style和selectedStyle,能夠被點擊的Button及其子 類還有pressedStyle,以上面一句為例,它僅僅只能設置這個組件未選中的時候 的Border,當選中它時,又會回到系統代碼中設定的模樣。一個頁面有很多組件 ,大多數的組件都要設置 Style(選中和未選中的Style),雖然代碼是很簡單 ,但是一個頁面寫下來,你會發現你至少一半的代碼都花在布局和設置樣式上了 ,代碼看起來非常臃腫。

好在LWUIT是開源的,我們可以修改它的源代碼來自定義這些UI的方法,找到 Component.java文件,我們只需要在這個文件中添加幾個方法來簡化我們的 Style設置。

以下是我在Component.java類中添加的一些方法,代碼我寫的比較粗糙,你 們可以按照自己的方式來寫, 理論上每個方法都應該有兩個參數,未選中和選 中的狀態,傳參時可以為null,需要進行一些判斷以適合大多數的情況。

代碼

//1469行起是添加的代碼
     /**
      * 設置自定義的Font
      * @param font
      */
     public void setCustomFont(Font font) {
         this.getStyle().setFont(font);
         this.getSelectedStyle().setFont(font);
     }
     /**
      * 設置水平方向Margin
      * @param margin
      */
     public void setCustomHorizontalMargin(int margin) {
         this.getStyle().setMargin(Component.LEFT,  margin);
         this.getStyle().setMargin(Component.RIGHT,  margin);
         this.getSelectedStyle().setMargin(Component.LEFT,  margin);
         this.getSelectedStyle().setMargin(Component.RIGHT,  margin);
     }
     /**
      * 設置自定義的Border
      * @param border
      */
     public void setCustomBorder(Border border){
         this.getStyle().setBorder(border);
         this.getSelectedStyle().setBorder(border);
     }
     /**
      *設置自定義FgColor
      * @param unsectedColor
      *              未選中時的顏色
      * @param selectedColor
      *              選中時的顏色
      */
     public void setCustomFgColor(int unsectedColor, int  selectedColor){
         this.getStyle().setFgColor(unsectedColor);
         this.getSelectedStyle().setFgColor (selectedColor);
     }
     /**
      * 設置自定義的Style
      *              Style包含選中和未選中的情況 ,屬性包含Margin,Padding,Border,FgColor,BgColor,Font等
      * @param unselectedStyle
      * @param selectedStyle
      */
     public void setCustomStyle(Style unselectedStyle, Style  selectedStyle){
         this.setStyle(unselectedStyle);
         this.setSelectedStyle(selectedStyle);
     }

Button類及其子類就比較特殊,它有一個pressedStyle,我們需要對一些方 法進行重寫。

代碼

//301行起是添加的代碼
     /**
      * 設置自定義的Font
      * @param font
      */
     public void setCustomFont(Font font){
         super.setCustomFont(font);
         this.getPressedStyle().setFont(font);
     }
     /**
      * 設置自定義的Border
      * @param border
      */
     public void setCustomBorder(Border border){
         super.setCustomBorder(border);
         this.getPressedStyle().setBorder(border);
     }
     /**
      * 設置自定義FgColor
      * @param unsectedColor
      *              未選中時的FgColor
      * @param selectedColor
      *              選中時的FgColor
      * @param pressedColor
      *              點擊時的FgColor
      */
     public void setCustomFgColor(int unsectedColor, int  selectedColor,int pressedColor){
         super.setCustomFgColor(unsectedColor,  selectedColor);
         this.getPressedStyle().setFgColor (pressedColor);
     }
     /**
      * 設置自定義的Style
      * @param unselectedStyle
      *              未選中時的Style
      * @param selectedStyle
      *              選中時的Style
      * @param pressedStyle
      *              點擊時的Style
      */
     public void setCustomStyle(Style unselectedStyle, Style  selectedStyle, Style pressedStyle){
         super.setCustomStyle(unselectedStyle,  selectedStyle);
         this.setPressedStyle(pressedStyle);
     }

當修改完這些基本的組件類以後,我們就可以靈活的運用這些組件了。以 Button為例,在一個應用程序中會運用到很多Button,有邊框的,無邊框的,無 背景的,帶下劃線的(類似於超鏈接)等等。我們完全可以把這些樣式歸到一個 類中,那我們就寫一個類CustomButton繼承自Button。

代碼

import com.sun.lwuit.Button;
import com.sun.lwuit.Image;
/**
  *
  * @author Sunny Peng
  */
public class CustomButton extends Button{
     /**
      * 構造方法
      */
     public CustomButton(){

     }
     /**
      * 構造方法
      * @param text
      *          傳入文本
      */
     public CustomButton(String text){

     }
     /**
      * 構造方法
      * @param text
      *          文本
      * @param icon
      *          圖片
      */
     public CustomButton(String text,Image icon){

     }
     /**
      * 構造方法
      * @param text
      *          文本
      * @param icon
      *          圖片
      * @param direction
      *          方向,圖片和文本的位置,比如圖片在文 本下方,圖片在文本右邊等等。
      */
     public CustomButton(String text,Image icon, int  direction){

     }
     /**
      * 無邊框按鈕
      */
     public void setNoBorder(){

     }
     /**
      * 無背景按鈕
      */
     public void setNoBg(){

     }
     /**
      * 無邊框,無背景按鈕
      */
     public void setNoBorderBg(){

     }
     /**
      * 超鏈接形式的按鈕
      */
     public void setURLStyle(){

     }
}

以上方法的主體大家可以自己寫,方法參數也自己定義。

我現在用的源代碼是1.3版本之前最新的(1.3版本的目前還不能夠使用), 是我反編譯LWUIT.jar後,修改了代碼中混淆產生的錯誤,使用正常,下面是 LWUIT源代碼的下載地址:

http://download.csdn.net/source/1856358

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved