Toggle Buttons(三) – JAVA編程語言程序開發技術文章

5.4 JCheckBox類


JCheckBox類表示切換組件,在默認情況下,這個組件在接近文本標簽處顯示瞭一個復選框圖標,用於兩狀態選項選擇。復選框使用一個可選的復選標記來顯示對象的當前狀態,而不是如JToggleButton保持按鈕按下狀態。對於JCheckBox,圖標顯示瞭對象的狀態,而對於JToggleButton,圖標則是標簽的一部分,通常並不用於顯示狀態信息。JCheckBox與JToggleButton之間除瞭UI相關部分不同外,這兩個組件是相同的。圖5-5演示瞭在一個匹薩預定程序中復選框的樣子。


Swing_5_5


JCheckBox是由幾部分構成的。與JToggleButton類似,JCheckBox使用一個ToggleButtonModel來表示其數據模型。用戶界面委托是CheckBoxUI。盡管ButtonGroup可以用來組合復選框,但是通常這並不合適。當多個JCheckBox組件位於一個ButtonGroup中時,他們的行為類似於JRadioButton組件,但是看上去是JCheckBox組件。由於可視化的原因,我們不應將JCheckBox組件放在ButtonGroup中。


現在我們已經瞭解瞭JCheckBox的不同部分,下面我們來瞭解一下如何來使用。


5.4.1 創建JCheckBox組件


JCheckBox有八個構造函數:


public JCheckBox()
JCheckBox aCheckBox = new JCheckBox();

public JCheckBox(Icon icon)
JCheckBox aCheckBox = new JCheckBox(new DiamondIcon(Color.RED, false));
aCheckBox.setSelectedIcon(new DiamondIcon(Color.PINK, true));

public JCheckBox(Icon icon, boolean selected)
JCheckBox aCheckBox = new JCheckBox(new DiamondIcon(Color.RED, false), true);
aCheckBox.setSelectedIcon(new DiamondIcon(Color.PINK, true));

public JCheckBox(String text)
JCheckBox aCheckBox = new JCheckBox(“Spinach”);

public JCheckBox(String text, boolean selected)
JCheckBox aCheckBox = new JCheckBox(“Onions”, true);

public JCheckBox(String text, Icon icon)
JCheckBox aCheckBox = new JCheckBox(“Garlic”, new DiamondIcon(Color.RED, false));
aCheckBox.setSelectedIcon(new DiamondIcon(Color.PINK, true));

public JCheckBox(String text, Icon icon, boolean selected)
JCheckBox aCheckBox = new JCheckBox(“Anchovies”, new DiamondIcon(Color.RED,
false), true);
aCheckBox.setSelectedIcon(new DiamondIcon(Color.PINK, true));

public JCheckBox(Action action)
Action action = …;
JCheckBox aCheckBox = new JCheckBox(action);


每一個構造函數都允許我們定制零個或是至多三個屬性:標簽,圖標或是初始選中狀態。除非特別指明,默認情況下並沒有標簽,而復選框的默認選中/未選中圖標表現為未選中。


如果我們在構造函數中初始化圖標,圖標用於復選框未選中狀態,而復選框選中時也使用相同的圖標。我們必須或者是通過setSelectedIcon(Icon newValue)方法來初始化選中圖標,或者是確保圖標是狀態相關的並更新自身。如果我們沒有配置選中圖標,也沒有使用狀態相關圖標,則相同的圖標會出現在選中與未選中狀態。通常而言,不在選中與未選中狀態之間變化其可視外觀的圖標並不是JCheckBox所要求的。


5.4.2 JCheckBox屬性


在創建瞭JCheckBox之後,我們可以修改其屬性。JCheckBox特定的兩個屬性覆蓋瞭其父類JToggleButton的行為。第三個borderPaintedFlat屬性是在JDK 1.3版本中引入的。其餘的屬性都是通過其父類JToggleButton繼承而來的。


JCheckBox屬性



















屬性名
數據類型

訪問性

accessibleContext
AccessibleContext

隻讀

borderPaintedFlat
boolean

讀寫綁定

UIClassID
String

隻讀


borderPaintedFlat屬性可以將復選圖標的邊框的觀感顯示為兩維而不是三維。在默認情況下,borderPaintedFlat屬性為false,意味著邊框將是三維的。圖5-6顯示瞭平坦邊框的樣子,其中第一個,第三個,第五個的邊框是平坦的,而第二個與第四個不是。觀感可以選擇忽略這些屬性。然而,對於組件的渲染者,例如表格與樹,這個屬性是十分用的,因為他們隻顯示狀態而不顯示是否可以選中。Windows與Motif觀感類型使用這個屬性,而Metal(以及Ocean)則不使用這個屬性。


swing_5_6


正如所列出的構造函數所顯示的,如果我們選擇通過構造函數設置圖標,則構造函數隻為未選中的狀態設置一個圖標。如果我們希望復選框圖標顯示實際的正確狀態,我們必須使用一個狀態感知圖標,或者是通過setSelectedIcon()為選中狀態關聯一個不同的圖標。具有兩個不同的可視狀態表示是大多數用戶希望JCheckBox所應用的,所有除非我們有特殊的理由,最好是遵循普通用戶界面的設計約定。


圖5-7所顯示的界面底部的第四個按鈕演示瞭JCheckBox的用法。復選框總是顯示瞭選中狀態。下圖顯示瞭選中Pizza,未選中Calzone,未選中Anchovies以及未選中Crust時的狀態。


swing_5_7


列表5-3演示瞭創建具有不同圖標的JCheckBox組件的三種可用方法,其中一個使用狀態感知圖標。最後一個復選框顯示瞭壞圖標的用法。


package net.ariel.ch05;
 
import java.awt.Color;
import java.awt.Component;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Image;
 
import javax.swing.AbstractButton;
import javax.swing.ButtonModel;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
 
import net.ariel.ch04.DiamondIcon;
 
public class IconCheck

發佈留言