Swing 邊框(二) – JAVA編程語言程序開發技術文章

作者ggmm


7.2 Examining the Predefined Borders
現在我們已經描述瞭邊框基礎,現在我們來瞭解一下每一個預定義的特定邊框,在某種程度上以復雜性的順序進行描述。


7.2.1 EmptyBorder Class
由邏輯上來說,空邊框就是在其內部不進行任何繪制的邊框。當我們在使用一個通常的AWT容器並且需要覆蓋insets()或是getInsets()方法時我們可以使用EmptyBorder。他可以使得我們保留組件周圍的額外空間從而略微向外一點擴展屏幕組件或是修改居中或是調整某些方面。圖7-3顯示瞭一個空邊框以及一個非空邊框。


 swing_7_3


EmptyBorder有兩個構造函數以及兩個BorderFactory的工廠方法:


public static Border createEmptyBorder()
Border emptyBorder = BorderFactory.createEmptyBorder();
public static Border createEmptyBorder(int top, int left, int bottom, int right)
Border emptyBorder = BorderFactory.createEmptyBorder(5, 10, 5, 10);
public EmptyBorder(Insets insets)
Insets insets = new Insets(5, 10, 5, 10);
Border EmptyBorder = new EmptyBorder(insets);
public EmptyBorder(int top, int left, int bottom, int right)
Border EmptyBorder = new EmptyBorder(5, 10, 5, 10);每一個都允許我們以方法特定的方式來自定義邊框的insets。無參數的版本會使用零insets創建一個空的邊框;否則,我們可以使用AWT Insets實例或是insets片段來指定insets。在默認情況下,EmptyBorder是透明的。


註意:當我們使用零insets創建一個空邊框時,我們應該使用工廠方法來創建邊框,而避免直接使用構造函數。這可以使用工廠創建一個共享的空邊框。如果我們所希望做的是隱藏邊框,而且組件是一個AbstractButton子類,則隻需要調用setBorderPainted(false)。


7.2.2 LineBorder Class
LineBorder是圍繞組件周圍用戶義定寬度的單色行邊框。他可以具有方角或是圓角。如果我們希望修改不同邊的粗細,我們需要使用MatteBorder,我們會在本章稍後進行討論。圖7-4顯示瞭一個青筋LineBorder的示例,在這個例子中兩個邊框分別為1像素與12像素寬,帶圓角以及不帶圓角。


創建LineBorder


LineBorder有三個構造函數,兩個工廠方法以及兩個BorderFactory工廠方法:


public LineBorder(Color color)
Border lineBorder = new LineBorder (Color.RED);
 
public LineBorder(Color color, int thickness)
Border lineBorder = new LineBorder (Color.RED, 5);
 
public LineBorder (Color color, int thickness, boolean roundedCorners)
Border lineBorder = new LineBorder (Color.RED, 5, true);
 
public static Border createBlackLineBorder()
Border blackLine = LineBorder.createBlackLineBorder();
 
public static Border createGrayLineBorder()
Border grayLine = LineBorder.createGrayLineBorder();
 
public static Border createLineBorder(Color color)
Border lineBorder = BorderFactory.createLineBorder(Color.RED);
 
public static Border createLineBorder(Color color, int thickness)
Border lineBorder = BorderFactory.createLineBorder(Color.RED, 5);註意:LineBorder工廠方法工作如下:如果我們兩次創建相同的邊框,則會返回相同的LineBorder對象。然而,如同所有的對象對比,我們應總是使用equals()方法來檢測對象相同。


每一個方法允許我們自定義邊框的顏色與線的粗細。如果沒有指定粗細,則默認值為1。LineBorder的兩個工廠方法可以用於通常使用的黑色與灰色。因為邊框填充整個insets區域,所以LineBorder是不透明的,除非他們是圓角。所以,邊框的透明性是圓角設置相反的。


設置LineBorder屬性


表7-1列出瞭由AbstractBorder繼承的borderOpaque屬性以及LineBorder的特定屬性。


LineBorder屬性


屬性名
 數據類型
 訪問性
 
borderOpaque
 Boolean
 隻讀
 
lineColor
 Color
 隻讀
 
roundedCorners
 boolean
 隻讀
 
thickness
 int
 隻讀
 


7.2.3 BevelBorder Class
BevelBorder以三維外觀繪制邊框,其可以表現為升起或是降低。當邊框升起時,在邊框的底部與右邊會出現陰影效果。當降低時,陰影的位置會相反。圖7-5顯示瞭帶有默認與自定義顏色的升起與降低BevelBorder。


 Swing_7_5


在組件周圍繪制一對一像素寬的線可以產生三維外觀的模擬效果。非陰影的邊框側邊以被稱為highlight顏色進行繪制,而其他兩邊以shadow顏色進行繪制。highlight顏色與shadow顏色對於BevelBorder的外邊與內邊使用不同的陰影進行繪制。所以,一個BevelBorder總共使用四種不同的顏色。圖7-6顯示這四種顏色是如何組合在一起的。


 swing_7_6


BevelBorder有三個構造函數以及一個工廠方法,同時還有BorderFactory創建BevelBorder對象的五個工廠方法:


public BevelBorder(int bevelType)
Border bevelBorder = new BevelBorder(BevelBorder.RAISED);
 
public static Border createBevelBorder(int bevelType)
Border bevelBorder = BorderFactory.createBevelBorder(BevelBorder.RAISED);
 
public static Border createLoweredBevelBorder()
Border bevelBorder = BorderFactory.createLoweredBevelBorder();
 
public static Border createRaisedBevelBorder()
Border bevelBorder = BorderFactory.createRaisedBevelBorder();
 
public BevelBorder(int bevelType, Color highlight, Color shadow)
Border bevelBorder = new BevelBorder(BevelBorder.RAISED, Color.PINK, Color.RED);
 
public static Border createBevelBorder(int bevelType, Color highlight, Color shadow)
Border bevelBorder = BorderFactory.createBevelBorder(BevelBorder.RAISED,
  Color.PINK, Color.RED);
 
public BevelBorder(int bevelType, Color highlightOuter, Color highlightInner,
  Color shadowOuter, Color shadowInner)
Border bevelBorder = new BevelBorder(BevelBorder.RAISED, Color.PINK,
  Color.PINK.brighter(), Color.RED, Color.RED.darker());
 
public static Border createBevelBorder(int bevelType, Color highlightOuter,
  Color highlightInner, Color shadowOuter, Color shadowInner)
Border bevelBorder = BorderFactory.createBevelBorder(BevelBorder.RAISED,
  Color.PINK, Color.PINK.brighter(), Color.RED, Color.RED.darker());每一個方法都可以使得我們自定義斜面類型以及邊框中明亮與陰影的顏色。斜面類型是通過下面兩個值來指定的:BevelBorder.RAISED或是BevelBorder.LOWERED。如果沒有指定明亮與陰影顏色,則會通過檢測邊框組件的背景顏色來生成合適的顏色。如果我們指定瞭相應的顏色,記住明亮顏色應亮一些,通常可以通過調用theColor.brighter()方法來實現。在默認情況下,BevelBorder是不透明的。


7.2.4 SoftBevelBorder Class
SoftBevelBorder是BevelBorder的近親。這個組件會包圍四角,所以他們的邊並不尖利,而他使用下邊與右邊的相應外邊顏色隻繪制一條線。如圖7-7所示,升起與落下的SoftBevelBorder與BevelBorder基本相同。


 swing_7_7


SoftBevelBorder有三個構造函數:


public SoftBevelBorder(int bevelType)
Border softBevelBorder = new SoftBevelBorder(SoftBevelBorder.RAISED);
public SoftBevelBorder(int bevelType, Color highlight, Color shadow)
Border softBevelBorder = new SoftBevelBorder(SoftBevelBorder.RAISED, Color.RED,
  Color.PINK);

發佈留言