toggle button什么作用,Togglebutton

  toggle button什么作用,Togglebutton

  5.4 JCheckBox类

  JCheckBox类表示交换组件。默认情况下,该组件在双态选项选择的文本标签附近显示一个复选框图标。复选框使用可选的复选标记来显示对象的当前状态,而不是像JToggleButton一样保持按钮被按下。对于JCheckBox,图标显示对象的状态,而对于JToggleButton,图标是标签的一部分,通常不用于显示状态信息。除了UI相关的部分,JCheckBox和JToggleButton是相同的。图5-5展示了比萨饼预订程序中的复选框。

  JCheckBox由几个部分组成。与JToggleButton类似,JCheckBox使用ToggleButtonModel来表示其数据模型。用户界面委托是CheckBoxUI。虽然ButtonGroup可以用来组合复选框,但它通常并不合适。当多个JCheckBox组件在一个ButtonGroup中时,它们的行为类似于JRadioButton组件,但它们看起来像JCheckBox组件。出于可视化的原因,我们不应该将JCheckBox组件放在ButtonGroup中。

  现在我们知道了JCheckBox的不同部分,让我们学习如何使用它。

  5.4.1创建JCheckBox组件

  JCheckBox有八个构造函数:

  公共JCheckBox()

  JCheckBox aCheckBox=new JCheckBox();

  公共复选框(图标图标)

  JCheckBox aCheckBox=new JCheckBox(new diamond icon(Color。红色,假));

  aCheckBox.setSelectedIcon(新的DiamondIcon(颜色。粉红,真));

  公共复选框(图标图标,布尔选定)

  JCheckBox aCheckBox=new JCheckBox(new diamond icon(Color。红色,假),真);

  aCheckBox.setSelectedIcon(新的DiamondIcon(颜色。粉红,真));

  公共JCheckBox(字符串文本)

  JCheckBox aCheckBox=new JCheckBox(菠菜);

  公共JCheckBox(字符串文本,布尔选定)

  JCheckBox aCheckBox=new JCheckBox( Onions ,true);

  公共JCheckBox(字符串文本,图标图标)

  JCheckBox aCheckBox=new JCheckBox(大蒜,new DiamondIcon(颜色。红色,假));

  aCheckBox.setSelectedIcon(新的DiamondIcon(颜色。粉红,真));

  公共JCheckBox(字符串文本,图标图标,布尔选定)

  JCheckBox aCheckBox=new JCheckBox(凤尾鱼,new DiamondIcon(颜色。红色,

  假),真);

  aCheckBox.setSelectedIcon(新的DiamondIcon(颜色。粉红,真));

  公共JCheckBox(动作动作)

  动作动作=.

  JCheckBox aCheckBox=new JCheckBox(action);

  每个构造函数允许我们自定义零个或最多三个属性:标签、图标或初始选择状态。除非另有说明,否则默认情况下没有标签,复选框的默认选中/未选中图标处于未选中状态。

  如果我们在构造函数中初始化图标,当复选框未选中时使用图标,当复选框被选中时使用相同的图标。我们必须通过setSelectedIcon(Icon newValue)方法初始化选定的图标,或者确保图标是与状态相关的并能自我更新。如果我们不配置选中图标,而使用与状态相关的图标,则在选中和未选中状态下会出现相同的图标。一般来说,JCheckBox不需要在选中和未选中状态之间不改变外观的图标。

  JCheckBox属性

  创建JCheckBox后,我们可以修改它的属性。JCheckBox特有的两个属性覆盖了其父类JToggleButton的行为。第三个borderPaintedFlat属性是在JDK版本1.3中引入的。其余的属性继承自其父类JToggleButton。

  JCheckBox属性

  borderPaintedFlat属性可以将复选图标边框的外观显示为二维而不是三维。默认情况下,borderPaintedFlat属性为false,这意味着边框将是三维的。图5-6显示了平面边框的外观,其中第一个、第三个和第五个边框的边框是平面的,而第二个和第四个边框不是平面的。观感可以选择忽略这些属性。但是,这个属性对于组件渲染器非常有用,比如表和树,因为它们只显示状态,而不显示是否可以选择。Windows Motif外观类型使用该属性,而金属(和海洋)不使用。

  正如所列出的构造函数所显示的,如果我们选择通过构造函数设置图标,则构造函数只为未选中的状态设置一个图标。如果我们希望复选框图标显示实际的正确状态,我们必须使用一个状态感知图标,或者是通过setSelectedIcon()为选中状态关联一个不同的图标。具有两个不同的可视状态表示是大多数用户希望复选框所应用的,所有除非我们有特殊的理由,最好是遵循普通用户界面的设计约定。

  图5-7所显示的界面底部的第四个按钮演示了复选框的用法。复选框总是显示了选中状态。下图显示了选中披萨,未选中卡尔宗,未选中凤尾鱼以及未选中外壳时的状态。

  列表5-3演示了创建具有不同图标的复选框组件的三种可用方法,其中一个使用状态感知图标。最后一个复选框显示了坏图标的用法。

  包网。爱丽儿。ch05

  导入Java。awt。颜色;

  导入Java。awt。组件;

  导入Java。awt。事件队列;

  导入Java。awt。图形;

  导入Java。awt。gridlayout

  导入Java。awt。形象;

  导入javax。挥棒。抽象按钮;

  导入javax。挥棒。按钮型号;

  导入javax。挥棒。图标;

  导入javax。挥棒。图像图标;

  导入javax。挥棒。jcheckbox

  导入javax。挥棒。jframe

  导入网。爱丽儿。ch04。钻石图标;

  公共类IconCheckBoxSample {

  私有静态类复选框图标实现图标{

  私人图像图标检查edicon=新图像图标(加号。png’);

  私人图像图标取消选中图标=新图像图标(减号。png’);

  公共空绘制图标(组件组件,图形g,int x,int y) {

  抽象按钮抽象按钮=(抽象按钮)组件;

  按钮模型按钮模型=抽象按钮。获取模型();

  g.translate(x,y);

  图像图标图像图标=按钮模型。是selected()?checkedIcon:uncheckedIcon;

  图像图像=图像图标。getimage();

  g.drawImage(图像,0,0,分量);

  g.translate(-x,-y);

  public int geticonvwidth(){

  返回20;

  public int getIconHeight() {

  返回20;

  * @param args

  公共静态void main(String[] args) {

  //TODO自动生成的方法存根

  Runnable runner=new Runnable() {

  公共无效运行(){

  JFrame frame=新JFrame(图标化复选框);

  框架。setdefaultcloseoperation(JFrame .EXIT _ ON _ CLOSE);

  图标选中=新的菱形图标(颜色。黑,真);

  图标未选中=新的菱形图标(颜色。黑,假);

  JCheckBox acheckbox 1=new JCheckBox( Pizza ,未选中);

  JCheckBox acheckbox 2=new JCheckBox( cal zone );

  aCheckBox2.setIcon(未选中);

  aCheckBox2.setSelectedIcon(已选中);

  icon checkbox icon=新建复选框icon();

  JCheckBox acheckbox 3=new JCheckBox(凤尾鱼,复选框图标);

  JCheckBox acheckbox 4=new JCheckBox(填充外壳,已检查);

  框架。set layout(new GridLayout(0,1));

  框架。add(a check box 1);

  框架。add(a check box 2);

  框架。add(a check box 3);

  框架。add(a check box 4);

  frame.setSize(300,200);

  框架。设置可见(真);

  事件队列。稍后调用(runner);

  }

  5.4.3 处理复选框选中事件

  与开关按钮类似,我们也可以使用三种方法来处理复选框事件:使用ActionListener,ItemListener或是更改监听程序。接受行动的构造函数只是添加一个参数作为ActionListener

  使用动作监听器监听复选框事件

  使用动作监听器订阅动作事件事件可以使得我们确定用户何时切换复选框状态。与开关按钮类似,所订阅的监听器会被通知选中,但并不会通知新状态。要确定选中状态,我们必须获取事件源的模型并进行查询,如下面的动作监听器源码所示。这个监听器修改了复选框的标签来反映选中状态。

  操作监听器操作监听器=新操作监听器(){

  已执行公共void操作(ActionEvent ActionEvent){

  抽象按钮抽象按钮=(抽象按钮)动作事件。getsource();

  布尔选定=抽象按钮。获取模型().被选中();

  String newLabel=(选中?SELECTED _ LABEL:DESELECTED _ LABEL);

  抽象按钮。settext(新标签);

  };

  使用项目监听器监听复选框事件

  与开关按钮类似,对于复选框而言,更为适合的监听器是ItemListener传递给项目监听器的itemStateChanged()方法的项目事件事件包含复选框的当前状态。这使得我们可以进行正确的响应,而无需查询当前的按钮状态。

  为了进行演示,下面的项目监听器依据选中组件的状态切换前景色与背景色。在这个项目监听器中,只有状态被选中时才会进行前景色与背景色的切换。

  项目监听器项目监听器=新项目监听器(){

  public void itemStateChanged(项目事件项目事件){

  抽象按钮抽象按钮=(抽象按钮)项目事件。getsource();

  颜色前景=抽象按钮。get前台();

  彩色背景=抽象按钮。获取背景();

  int state=item事件。getstatechange();

  if (state==ItemEvent .选定){

  抽象按钮. setForeground(后台);

  抽象按钮. setBackground(前景);

  };

  使用更改监听器监听复选框事件

  与开关按钮类似,更改监听程序也可以响应复选框事件。当按钮被装备、按下、选择、释放时所订阅的更改监听器会得到通知。另外,更改监听程序也会得到按钮模型变化的通知,但是复选框的键盘快捷键。因为在开关按钮与复选框之间并没有更改监听器的区别,所以我们可以将开关按钮中的监听器关联到JCheckBox,而我们会得到相同的选中响应。

  列表5-4中的示例程序演示了监听一个复选框事件的所有监听器。为了演示更改监听器会得到其他按钮模型属性变化的通知,我们将一个执键与组件相关联。由于更改监听器的注册发生在记忆的属性变化之前,所以更改监听器会得到这个属性变化的通知。因为前景色,背景色与文本标签并不是按钮模型属性,更改监听程序并不会得到其他监听器所引起的这些属性变化的通知。

  包网。爱丽儿。ch05

  导入Java。awt。borderlayout

  导入Java。awt。颜色;

  导入Java。awt。事件队列;

  导入Java。awt。事件。动作事件;

  导入Java。awt。事件。动作监听器;

  导入Java。awt。事件。项目事件;

  导入Java。awt。事件。项目侦听器;

  导入Java。awt。事件。关键事件;

  导入javax。挥棒。抽象按钮;

  导入javax。挥棒。按钮型号;

  导入javax。挥棒。jcheckbox

  导入javax。挥棒。jframe

  导入javax。挥棒。事件。变更事件;

  导入javax。挥棒。事件。更改侦听器;

  公共类选择复选框{

  私有静态字符串取消选择_ LABEL=取消选择

  私有静态字符串SELECTED _ LABEL= Selected

  * @param args

  公共静态void main(String[] args) {

  //TODO自动生成的方法存根

  Runnable runner=new Runnable() {

  公共无效运行(){

  JFrame frame=新JFrame(选择复选框);

  框架。setdefaultcloseoperation(JFrame .EXIT _ ON _ CLOSE);

  JCheckBox checkBox=new JCheckBox(DESELECTED _ LABEL);

  操作监听器操作监听器=新操作监听器(){

  已执行公共无效操作(操作事件事件){

  抽象按钮抽象按钮=(抽象按钮)事件。getsource();

  布尔选定=抽象按钮。被选中();

  String newLabel=(选中?SELECTED _ LABEL:DESELECTED _ LABEL);

  抽象按钮。settext(新标签);

  更改监听程序更改监听程序=新更改监听程序(){

  公共无效状态已更改(更改事件事件){

  抽象按钮抽象按钮=(抽象按钮)事件。getsource();

  按钮模型按钮模型=抽象按钮。获取模型();

  布尔武装=按钮模型。是武装();

  布尔按下=按钮型号。被按下();

  布尔选定=按钮模型。被选中();

  系统。出去。println( Changed: armed / pressed / selected);

  项目监听器项目监听器=新项目监听器(){

  公共void itemStateChanged(项目事件事件){

  抽象按钮抽象按钮=(抽象按钮)事件。getsource();

  颜色前景=抽象按钮。get前台();

  彩色背景=抽象按钮。获取背景();

  int state=事件。getstatechange();

  if(state==ItemEvent .选定){

  抽象按钮. setForeground(后台);

  抽象按钮. setBackground(前景);

  复选框。addactionlistener(动作监听器);

  复选框。addchangelistener(更改监听器);

  复选框。additem listener(项目监听器);

  checkBox.setMnemonic(KeyEvent .VK _ S);

  frame.add(复选框,BorderLayout .北);

  frame.setSize(300,100);

  框架。设置可见(真);

  事件队列。稍后调用(runner);

  }

  选择复选框类在选中并取消选中后所产生的程序界面如图5-8所示。

  5.4.4 自定义复选框观感

  每一个安装的摇摆观感都会提供一个不同的复选框外观与一个默认的资源值集合。图5-9显示了预安装的观感类型集合的复选框组件外观:主题、窗户、海洋。第一,第三与第五个复选框为选中状态,而第三个具有输入焦点。

  表5-4显示了复选框的资源相关属性的集合复选框组件具有20个不同的属性。

  JCheckBox UIResource元素

toggle button什么作用,Togglebutton