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

5.5 JRadionButton類


當我們希望創建一個相斥的可切換組件組時我們可以使用JRadioButton。盡管由技術上來說,我們可以將一組JCheckBox組件放在一個ButtonGroup中,並且每次隻有一個可以選中,但是他們看起來並不正確。至少由預定義的觀感類型來看,JRadioButton與JCheckBox組件看起來是不同的,如圖5-10所示。這種外觀上的區別可以告訴終端用戶可以期望組件的特定行為。


package net.ariel.ch05;
 
import java.awt.Container;
import java.awt.GridLayout;
 
import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.border.Border;
 
public class RadioButtonUtils {
 
 private RadioButtonUtils() {
 
 }
 
 public static Container createRadioButtonGrouping(String elements[], String title) {
  JPanel panel = new JPanel(new GridLayout(0,1));
 
  if(title != null) {
   Border border = BorderFactory.createTitledBorder(title);
   panel.setBorder(border);
  }
 
  ButtonGroup group = new ButtonGroup();
  JRadioButton aRadioButton;
 
  for(int i=0, n=elements.length; inew JRadioButton(elements[i]);
   panel.add(aRadioButton);
   group.add(aRadioButton);
  }
 
  return panel;
 }
}
現在我們可以更為簡單的創建組合瞭,如列表5-6中的示例程序所示。


/**
 *
 */
package net.ariel.ch05;
 
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.EventQueue;
 
import javax.swing.JFrame;
 
/**
 * @author mylxiaoyi
 *
 */
public class GroupRadio {
 
 private static final String sliceOptions[] = {
  “4 slices”, “8 slices”, “12 slices”, “16 slices”
 };
 private static final String crustOptions[] = {
  “Sicilian”, “Thin Crust”, “Thick Crust”, “Stuffed Crust”
 };
 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
 
  Runnable runner = new Runnable() {
   public void run() {
    JFrame frame = new JFrame(“Grouping Example”);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
    Container sliceContainer = RadioButtonUtils.createRadioButtonGrouping(sliceOptions, “Slice Count”);
    Container crustContainer = RadioButtonUtils.createRadioButtonGrouping(crustOptions, “Crust Type”);
 
    frame.add(sliceContainer, BorderLayout.WEST);
    frame.add(crustContainer, BorderLayout.EAST);
 
    frame.setSize(300, 200);
    frame.setVisible(true);
   }
  };
  EventQueue.invokeLater(runner);
 }
 
}

swing_5_10

JRadioButton是由幾方面構成的。類似於JToggleButton與JCheckBox,JRadioButton也使用一個ToggleButtonModel來表示其數據模型。他使用ButtonGroup通過AbstractButton來提供互斥的組合,並且用戶界面委托是RadioButtonUI。


下面我們就來探討如何使用JRadioButton的不同方同。


5.5.1 創建JRadioButton組件


與JCheckBox以及JToggleButton類似,JRadioButton有八個構造函數:


public JRadioButton()
JRadioButton aRadioButton = new JRadioButton();

public JRadioButton(Icon icon)
JRadioButton aRadioButton = new JRadioButton(new DiamondIcon(Color.CYAN, false));
aRadioButton.setSelectedIcon(new DiamondIcon(Color.BLUE, true));

public JRadioButton(Icon icon, boolean selected)
JRadioButton aRadioButton = new JRadioButton(new DiamondIcon(Color.CYAN, false),
true);
aRadioButton.setSelectedIcon(new DiamondIcon(Color.BLUE, true));

public JRadioButton(String text)
JRadioButton aRadioButton = new JRadioButton(“4 slices”);

public JRadioButton(String text, boolean selected)
JRadioButton aRadioButton = new JRadioButton(“8 slices”, true);

public JRadioButton(String text, Icon icon)
JRadioButton aRadioButton = new JRadioButton(“12 slices”,
new DiamondIcon(Color.CYAN, false));
aRadioButton.setSelectedIcon(new DiamondIcon(Color.BLUE, true));

public JRadioButton(String text, Icon icon, boolean selected)
JRadioButton aRadioButton = new JRadioButton(“16 slices”,
new DiamondIcon(Color.CYAN, false), true);
aRadioButton.setSelectedIcon(new DiamondIcon(Color.BLUE, true));

public JRadioButton(Action action)
Action action = …;
JRadioButton aRadioButton = new JRadioButton(action);


每一個都允許我們定制一個或是多個標簽,圖標或是初始選中狀態屬性。除非特別指定,在標簽中並沒有文本,而且復選框的默認選中/未選中狀態圖標為未選中。在創建一組單選按鈕組件之後,我們需要將每一個放在一個ButtonGroup中,從而他們可以正常工作,在組合中每次隻有一個按鈕可以選中。如果我們在構造函數中初始化圖標,則是復選框未選中狀態的圖標,當復選框被選中時也顯示相同的圖標。我們或者是使用JCheckBox中所描述的setSelectedIcon(Icon newValue)方法初始選中圖標,或者是確保圖標是狀態感知的並進行自動更新。


5.5.2 JRadioButton屬性

JRadioButton具有兩個覆蓋瞭父類JToggleButton的屬性,如圖表5-5所示。


JRadioButton屬性















屬性名
數據類型

訪問性

accessibleContext
AccessibleContext

隻讀

UIClassID
String

隻讀


5.5.3 將JRadioButton組件組合為一個ButtonGroup


JRa

發佈留言