`

CheckBox Listener

    博客分类:
  • GWT
阅读更多

先上一个GWT的CheckBox的Listener的练习

 

项目名为:testCheckBoxListener

 

以下为各个文件:

1.TestCheckBoxListener.html

<!doctype html>

<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">

    <link type="text/css" rel="stylesheet" href="TestCheckBoxListener.css">

    <title>test ChenkBox Listener</title>
   
    <script type="text/javascript" language="javascript" src="testcheckboxlistener/testcheckboxlistener.nocache.js"></script>
  </head>

  <body>

    <iframe src="javascript:''" id="__gwt_historyFrame" tabIndex='-1' style="position:absolute;width:0;height:0;border:0"></iframe>
   
    <h1>测试 ChenkBox Listener</h1>

    <table align="center">
        <tr>
        <td id="BtnPanel"></td>
        </tr>
      <tr>
        <td id="MainPanel"></td>
      </tr>
    </table>
  </body>
</html>

 

 

2.TestCheckBoxListener.gwt.xml

<?xml version="1.0" encoding="UTF-8"?>
<module rename-to='testcheckboxlistener'>
  <inherits name='com.google.gwt.user.User'/>

  <inherits name='com.google.gwt.user.theme.standard.Standard'/>

  <entry-point class='com.checkBox.listener.client.TestCheckBoxListener'/>

  <source path='client'/>
  <source path='shared'/>

</module>

 

 

3.TestCheckBoxListener.java

package com.checkBox.listener.client;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.SimplePanel;

public class TestCheckBoxListener implements EntryPoint {

    public void onModuleLoad() {
        final String ps = "GP1_1|GP1_2|GP1_3|GP5_1|GP5_2|GP5_3|";
       
        final Button setValueBtn = new Button("设CheckBoxs特定的值");
        final Button reSetBtn = new Button("重设CheckBoxs的值");
        final Button getValueBtn = new Button("取CheckBoxs值");

        final HorizontalPanel BtnPanel = new HorizontalPanel();
        final SimplePanel mainPanel = new SimplePanel();
       
        final PermissionsComposite permissions = new PermissionsComposite();
       
        RootPanel.get("BtnPanel").add(BtnPanel);
        RootPanel.get("MainPanel").add(mainPanel);
       
        BtnPanel.add(setValueBtn);
        BtnPanel.add(reSetBtn);
        BtnPanel.add(getValueBtn);
        BtnPanel.setSpacing(5);
       
        mainPanel.add(permissions);
       
       
        ClickHandler clickHandler = new ClickHandler() {
            @Override
            public void onClick(ClickEvent event) {
                if(event.getSource() == getValueBtn){
                    String values = permissions.getPermissionsValues();
                    Window.alert(values);
                }else if(event.getSource() == setValueBtn){
                    permissions.setPermissionsValues(ps);
                }else if(event.getSource() == reSetBtn){
                    permissions.reSetValue();
                }
            }
        };
       
       
        setValueBtn.addClickHandler(clickHandler);
        reSetBtn.addClickHandler(clickHandler);
        getValueBtn.addClickHandler(clickHandler);
    }
}

 

 

4.PermissionsComposite.java

package com.checkBox.listener.client;

import java.util.ArrayList;
import java.util.List;

import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.HorizontalPanel;

public class PermissionsComposite extends Composite {
    private ALLCheckBox allBox = null;
    private final FlexTable mainTable = new FlexTable();
    List<ParentCheckBox> parentCheckBoxs = new ArrayList<ParentCheckBox>();

    public PermissionsComposite() {
        initWidget(mainTable);
       
        initCheckBoxItem();
    }

    public String getPermissionsValues(){
        if(allBox.getValue()){
            return Permissions.ALL.name();
        }else {
            StringBuffer sb = new StringBuffer();
            for(ParentCheckBox prBox : parentCheckBoxs){
                sb.append(prBox.getChildBoxValues());
            }
            return sb.toString();
        }
    }
   
    public void setPermissionsValues(String permissions){
        reSetValue();
       
        String[] values = permissions.split("\\|");
       
        if(values[0].equals(Permissions.ALL.name())){
            allBox.setValue(true);
            allBox.onClick(null);
        }else {
            for(String v : values){
                B: for(ParentCheckBox prBox : parentCheckBoxs){
                    for(ChildCheckBox childBox : prBox.childBoxs){
                        if(childBox.getName().equals(v)){
                            childBox.setValue(true);
                            prBox.refreshValueByChildBox();
                            break B;
                        }
                    }
                }
            }
        }
       
    }
   
    public void reSetValue(){
        allBox.setValue(false);
        allBox.onClick(null);
    }
   
    private void initCheckBoxItem() {
        int row = -1;
        ParentCheckBox parentBox = null;
        HorizontalPanel hPanel = null;
       
        Permissions[] permissions = Permissions.values();
        for (Permissions p : permissions) {
            if(p.name().contains("Group") || p.name().contains("ALL")){
                row++;
                if(p.name().contains("ALL")){
                    mainTable.setWidget(row, 0, allBox = new ALLCheckBox(p.getLabelName()));
                   
                }else{
                    mainTable.setWidget(row, 0, parentBox = new ParentCheckBox(p.getLabelName()));
                    parentCheckBoxs.add(parentBox);
                }
               
                mainTable.setWidget(row, 1, hPanel = new HorizontalPanel());
               
                mainTable.getFlexCellFormatter().setHorizontalAlignment(row, 0, HorizontalPanel.ALIGN_LEFT);
                mainTable.getFlexCellFormatter().setHorizontalAlignment(row, 1, HorizontalPanel.ALIGN_LEFT);
               
            }else {
                ChildCheckBox childBox = new ChildCheckBox(p.getLabelName(), parentBox);
                childBox.setName(p.name());
                hPanel.add(childBox);
            }
        }
       
        mainTable.setBorderWidth(1);
        mainTable.setCellPadding(1);
        mainTable.setCellSpacing(0);
        mainTable.setWidth("100%");
    }
   
   
    class ALLCheckBox extends CheckBox implements ClickHandler{
        public ALLCheckBox(String label) {
            super(label);
           
            this.addClickHandler(this);
        }
        @Override
        public void onClick(ClickEvent event) {
            Boolean value = getValue();
            for (ParentCheckBox prBox : parentCheckBoxs) {
                prBox.setValue(value);
               
                prBox.refresChildBoxs(value);
            }
        }
    }
   
    class ParentCheckBox extends CheckBox implements ClickHandler{
        List<ChildCheckBox> childBoxs = new ArrayList<ChildCheckBox>();
       
        public ParentCheckBox(String label) {
            super(label);
           
            this.addClickHandler(this);
        }

        @Override
        public void onClick(ClickEvent event) {
            boolean value = getValue()? true : false;
           
            refresChildBoxs(value);
            changeALLCheckBox();
        }

        private void refresChildBoxs(boolean value) {
            for (ChildCheckBox childBox : childBoxs) {
                childBox.setValue(value);
            }
        }
       
        public void refreshValueByChildBox() {
            int i = 0;
            for (ChildCheckBox childBox : childBoxs) {
                if(childBox.getValue())
                    i++;
                else
                    break;
            }
           
            if(i == childBoxs.size())
                this.setValue(true);
            else
                this.setValue(false);
        }
       
        public void changeALLCheckBox(){
            int i = 0;
            for (ParentCheckBox prBox : parentCheckBoxs) {
                if(prBox.getValue())
                    i++;
                else
                    break;
               
                if(i == parentCheckBoxs.size())
                    allBox.setValue(true);
                else
                    allBox.setValue(false);
            }
        }
       
        public String getChildBoxValues(){
            StringBuffer sb = new StringBuffer();
            for(ChildCheckBox childBox : childBoxs) {
                if(childBox.getValue())
                    sb.append(childBox.getName()).append("|");
            }
            return sb.toString();
        }
       
    }
   
    static class ChildCheckBox extends CheckBox implements ClickHandler{
        final ParentCheckBox parentBox;
       
        public ChildCheckBox(String label, ParentCheckBox parentBox) {
            super(label);
           
            this.parentBox = parentBox;
            this.parentBox.childBoxs.add(this);
            this.addClickHandler(this);
        }

        @Override
        public void onClick(ClickEvent event) {
            this.parentBox.refreshValueByChildBox();
            this.parentBox.changeALLCheckBox();
        }
    }
}

 

 

5.Permissions.java

package com.checkBox.listener.client;

public enum Permissions {
   
    Group1("一组"),GP1_1("一组1"),GP1_2("一组2"),GP1_3("一组3"),
    Group2("二组"),GP2_1("二组1"),GP2_2("二组2"),
    Group3("三组"),GP3_1("三组1"),
    Group4("四组"),GP4_1("四组1"),GP4_2("四组2"),GP4_3("四组3"),GP4_4("四组4"),
    Group5("五组"),GP5_1("五组1"),GP5_2("五组2"),GP5_3("五组3"),
    Group6("六组"),GP6_1("六组1"),GP6_2("六组2"),
    ALL("全选");

    private String labelName;
   
    private Permissions(String labelName) {
        this.labelName = labelName;
    }
   
    public String getLabelName() {
        return labelName;
    }
}

分享到:
评论

相关推荐

    Android 两级都带CheckBox的 ExpandableListView

    - `setOnCheckedChangeListener(OnCheckedChangeListener listener)` 方法,为`CheckBox`设置监听器。 - `setChecked(boolean checked)` 方法,用于设置`CheckBox`的选中状态。 在代码中,我们需要处理以下逻辑: ...

    recycleView嵌套recycleView+checkbox实现简单购物车功能

    private OnItemClickListener listener; //...省略其他方法 public static class ProductViewHolder extends RecyclerView.ViewHolder { TextView productName, productPrice; CheckBox checkBox; //......

    Android Listener侦听的N种写法

    在Android开发中,Listener接口是实现用户交互和事件处理的关键组件。它们允许应用程序对用户的操作进行响应,如点击按钮、滑动屏幕等。本篇文章将深入探讨Android中Listener的多种实现方式,帮助开发者更好地理解和...

    servlet+filter+listener 详解

    * getParameterValues(String key) :返回一个字符串数组,获得 name 和 key 一样的表单控件的数据,但相同 name 的控件会有多个,如同名的多个 checkbox 等。 * getParameterMap() :返回一个包含所有参数的 Map,...

    listview内嵌checkbox的批处理

    当需要在ListView的每一项中添加可选功能,例如勾选或选择,我们通常会内嵌Checkbox控件。本教程将深入探讨如何实现ListView内嵌Checkbox的批处理功能,以提供用户选择多个条目并进行统一操作的能力。 首先,我们...

    Android应用开发-CheckBox.pptx

    3. `setOnCheckedChangeListener(RadioGroup.OnCheckedChangeListener listener)`:此方法用于设置一个监听器,每当CheckBox的选中状态发生变化时,都会触发这个监听器中的回调函数。你可以在这里编写处理用户选择...

    Android中CheckBox的常用方法一览.pdf

    - **setOnCheckedChangeListener(listener)**: 这个方法用于设置一个 CompoundButton.OnCheckedChangeListener,监听CheckBox的选择状态变化。当CheckBox的状态发生改变时,监听器的onCheckedChanged方法会被调用。...

    Android ListView支持批量选择

    本篇将重点讲解如何利用CheckBox在ListView中实现批量选择功能,以及如何获取用户的选择信息。 首先,批量选择的核心是ListView中的复选框(CheckBox)元素。每个ListView项都可以包含一个CheckBox,允许用户通过...

    ListViewAndCheckBox

    而CheckBox则是提供多选功能的UI元素,用户可以勾选或取消以选择一个选项。将ListView与CheckBox结合使用,能够实现用户对列表中的多项内容进行选择,例如全选、反选或者单个选择,然后执行相应的操作,如批量删除。...

    Android开发之自定义CheckBox

    在Android开发中,自定义控件是一个常见的需求,特别是对于UI元素如CheckBox,有时需要根据设计需求进行定制化。本文将详细介绍如何自定义一个CheckBox,包括处理`wrap_content`问题和实现动画效果。 首先,从描述...

    应用源码之RadioAndCheckbox.zip

    1. `setCheckedChangeListener(CompoundButton.OnCheckedChangeListener listener)`: 设置CheckedChangeListener来监听CheckBox的选中状态变化。 2. `isChecked()`: 返回CheckBox当前是否被选中。 3. `setChecked...

    Android开发配置教程

    CheckBox checkBox = (CheckBox) this.findViewById(R.id.plain_cb); boolean isChecked = checkBox.isChecked(); // 检查是否选中 String selectedText = checkBox.getText().toString(); // 获取选中文字 ``` ...

    JSF中使用BooleanCheckbox实现全选功能

    &lt;f:ajax event="change" listener="#{bean.onSelectAllChanged}" /&gt; ``` 5. **标签`源码`和`工具`**:这两个标签可能暗示了文章会分享有关如何阅读和理解JSF组件的源码,以及可能使用的辅助工具或调试技巧。例如...

    Java Swing JCheckBox复选框的实现方法

    checkBox01.addChangeListener(new ChangeListener() { @Override public void stateChanged(ChangeEvent e) { // 获取事件源(即复选框本身) JCheckBox checkBox = (JCheckBox) e.getSource(); System.out....

    Android自定义控件之实现滑动选择开关代码

    最后,为了让开发者能够像使用系统自带的`CheckBox`或`RadioButton`那样监听开关状态的变化,我们需要覆盖`setOnCheckedChangeListener()`方法,并在状态改变时调用传入的监听器。 ```java @Override public void ...

    Android_UI_组件介绍.pdf

    private View.OnClickListener button_listener = new View.OnClickListener() { @Override public void onClick(View v) { // 处理点击事件 } }; ``` #### 四、文本框(TextView) **1. XML描述:** `...

    Android代码-Untriggered

    Untriggered Sometimes, you just want to set ... UntriggeredCheckBox and the like allow you to set this checked state without triggering the listener. Wow! Usage final UntriggeredCheckBox checkBox =

    java中各种控件使用范例

    使用 ItemListener 或 ChangeListener 监听选中/未选中的状态。 5. **布局管理器** Java Swing 提供了几种布局管理器,如 FlowLayout、GridLayout、BorderLayout 和 GridBagLayout,用于控制组件在窗口中的位置和...

    android Preference的Demo

    SharedPreferences.OnSharedPreferenceChangeListener listener = new SharedPreferences.OnSharedPreferenceChangeListener() { @Override public void onSharedPreferenceChanged(SharedPreferences ...

    Java常用函数.txt

    - **方法**: `addItemListener(ItemListener listener)`, `removeItemListener(ItemListener listener)`, `getState()`, `setState(boolean state)` - **示例**: ```java JCheckBox checkbox = new JCheckBox(...

Global site tag (gtag.js) - Google Analytics