Toggle Buttons(一)(二)

2014-11-24 00:34:46 · 作者: · 浏览: 1
Button组件的逻辑组合。ButtonGroup并不是一个可视化组件;所以,当使用ButtonGroup时在屏幕上并没有任何可见的内容。任何的AbstractButton组件可以通过public void add(AbstractButton abstractButton)方法添加到组合中。尽管任意的AbstractButton组件都可以属于一个ButtonGroup,只有当组件的数据模型是ToggleButtonModel时组合才会起作用。在ButtonGroup中具有一个模型为ToggleButtonModel的组件的结果是在组件被选中之后,ButtonGroup会出取消选中组合中当前被选中的组件。

尽管add()方法通常是我们唯一需要的方法,下面的类定义显示了其并不是ButtonGroup中唯一的方法:

public class ButtonGroup implements Serializable {
// Constructor
public ButtonGroup();
// Properties
public int getButtonCount();
public Enumeration getElements();
public ButtonModel getSelection();
// Other methods
public void add(AbstractButton aButton);
public boolean isSelected(ButtonModel theModel) ;
public void remove(AbstractButton aButton);
public void setSelected(ButtonModel theModel, boolean newValue);
}如上的类定义所显示的一件有趣的事就是给定一个ButtonGroup,我们并不能直接确定被选中的AbstractButton。我们只可以直接查询哪一个ButtonModel被选中。然而,getElements()可以返回组合中所有AbstractButton元素的Enumeration。然后我们可以使用类似如下的代码在所有的按钮中进行遍历来确定被选中的按钮:

Enumeration elements = group.getElements();
while (elements.hasMoreElements()) {
AbstractButton button = (AbstractButton)elements.nextElement();
if (button.isSelected()) {
System.out.println("The winner is: " + button.getText());
break; // Dont break if sharing models -- could show multiple buttons selected
}
}ButtonGroup另一个有趣的方法就是setSelected()。这个方法的两个参数是ButtonModel与boolean。如果boolean的值为false,则选中的请求会被忽略。如果ButtonModel并不是ButtonGroup中的按钮的模型,那么ButtonGroup会取消选中当前被选中的模型,从而使得组合中没有按钮被选中。这个方法的正确使用是使用组合中组件的模型以及一个true的新状态进行方法调用。例如,如果aButton是一个AbstractButton而aGroup是ButtonGroup,那么方法的调用类似于aGroup.setSelected(aButton.getModel(), true)。

下面我们来了解一下数据模型为ToggleButtonModel的各种组件。