2012-02-17 9 views
1

マルチセレクト機能を備えたサイズComboBox(GXT)のコントロールを設計する作業があります。 ComboBoxのsetViewを使ってCheckBoxListViewを設定しようとしましたが、動作していないようです。私はこれを達成することができますGXTフレームワークを使用して任意の方法があれば、誰も私を案内してくださいできますか?GXT - マルチセレクト機能を備えたComoboBox

PS:私は、煎茶のフォーラムでXComboBoxと呼ばれるコンポーネントに良い作品(Javaクラス、ソースコード)を見つけましたが、事前にそのGNU GPLライセンスの下で

感謝として使用するカント!

答えて

5

ご協力ありがとうございます。私はCheckBoxListViewとTriggerFieldクラスでDialogを統合して解決策を見出しました。

完全なコードリストは..です



    package com.ui.test.client; 

    import java.util.List; 

    import com.extjs.gxt.ui.client.data.ModelData; 
    import com.extjs.gxt.ui.client.event.ComponentEvent; 
    import com.extjs.gxt.ui.client.event.WindowEvent; 
    import com.extjs.gxt.ui.client.event.WindowListener; 
    import com.extjs.gxt.ui.client.store.ListStore; 
    import com.extjs.gxt.ui.client.widget.CheckBoxListView; 
    import com.extjs.gxt.ui.client.widget.Dialog; 
    import com.extjs.gxt.ui.client.widget.form.TriggerField; 
    import com.extjs.gxt.ui.client.widget.layout.FillLayout; 
    import com.google.gwt.user.client.Element; 

    public class MultiSelectComboBox extends TriggerField { 

     private Dialog checkBoxListHolder; 
     private CheckBoxListView listView; 
     private ListStore store; 

     private String delimiter = ","; 
     private boolean readOnly; 


     public MultiSelectComboBox() { 
      store = new ListStore(); 
      listView = new CheckBoxListView(); 
     } 




     @Override 
     protected void onTriggerClick(ComponentEvent ce) { 
      super.onTriggerClick(ce); 
      if(readOnly) { 
       return; 
      } 
      checkBoxListHolder.setSize(getWidth(), 200); 
      listView.setWidth(getWidth()); 
      checkBoxListHolder.setPosition(getAbsoluteLeft(), 
        getAbsoluteTop() + getHeight()); 
      if(checkBoxListHolder.isVisible()) { 
       checkBoxListHolder.hide(); 
      } 
      else { 
       checkBoxListHolder.show(); 
      } 
     } 




     @Override 
     protected void onRender(Element target, int index) { 
      super.onRender(target, index); 

      checkBoxListHolder = new Dialog(); 
      checkBoxListHolder.setClosable(false); 
      checkBoxListHolder.setHeaderVisible(false); 
      checkBoxListHolder.setFooter(false); 
      checkBoxListHolder.setFrame(false); 
      checkBoxListHolder.setResizable(false); 
      checkBoxListHolder.setAutoHide(false); 
      checkBoxListHolder.getButtonBar().setVisible(false); 
      checkBoxListHolder.setLayout(new FillLayout()); 
      checkBoxListHolder.add(listView); 
      listView.setStore(store); 

      checkBoxListHolder.addWindowListener(new WindowListener(){ 

       @Override 
       public void windowHide(WindowEvent we) { 
        setValue(parseCheckedValues(listView)); 
       } 

      }); 

     } 




     private String parseCheckedValues(CheckBoxListView checkBoxView) { 
      StringBuffer buf = new StringBuffer(); 
      if(checkBoxView != null) { 
       List selected = checkBoxView.getChecked(); 
       int index = 1, len = selected.size(); 
       for(D c : selected) { 
        buf.append(c.get(listView.getDisplayProperty())); 
        if(index getListView() { 
      return listView; 
     } 

     public void setListView(CheckBoxListView listView) { 
      this.listView = listView; 
     } 

     public ListStore getStore() { 
      return store; 
     } 

     public void setStore(ListStore store) { 
      this.store = store; 
     } 

     public String getDelimiter() { 
      return delimiter; 
     } 

     public void setDelimiter(String delimiter) { 
      this.delimiter = delimiter; 
     } 

     public boolean isReadOnly() { 
      return readOnly; 
     } 

     public void setReadOnly(boolean readOnly) { 
      this.readOnly = readOnly; 
     } 


    } 

コードはここで説明されている... http://bhat86.blogspot.com/2012/02/gxt-comobobox-with-multi-select-feature.html

ありがとうございました!

+0

上記のコードを使用すると、Label 9までのすべてのチェックボックスが表示され、すべてのチェックボックスがオフになります。 私の必要性は「ラベル2」のチェックボックスをオンにし、残りをチェックしないでください。 私は、checkboxlistviewをリフレッシュしたり、ストアを再描画するなど、さまざまなオプションを試しました。私はどこに間違っているのかわかりません..ご協力ください – Jayesh

+0

上記のウィジェットを作成した後(MultiSelectComboBox mscb = new MultiSelectComboBox())、listViewのゲッターを追加してmscb.getListView()と言うことができますsetChecked(yourModel、true )。 – sanbhat

0

例を参照してください。listviewおよびadvanced list viewそれらは、複数の選択肢を持つコンボボックスを開発する際に何らかの助けになるかもしれません。

+0

XComboBoxはGXTコンポーネントではありません。 GPLライセンスの下で配布したいフォーラムメンバーの1人からプラグインとして書かれたソースコード。それはGXTと一緒に来ません! – sanbhat

関連する問題