`

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;
    }
}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics