2

Est-il possible d'ajouter un CheckBoxField à un TreeField dans BlackBerry?BlackBerry - TreeField avec CheckBoxField?

Si oui, comment puis-je le faire?

+0

Bonjour utilisent api RIM vous ou juste un MIDP? –

+0

RIM API ... Je suis en mesure d'ajouter un champ d'arbre sur le formulaire ... mais je veux ceux avec des cases à cocher pour la sélection multiple ... Comment puis-je faire cela? – iOSDev

Répondre

7

trick Comme avec ListBox CheckBoxes:
alt text http://img441.imageshack.us/img441/5120/checkboxtree.jpg

class CBTreeField extends VerticalFieldManager implements TreeFieldCallback, 
     DrawStyle { 
    boolean[] mBooleanValues = new boolean[] {}; 
    String[] mStringValues = new String[] {}; 

    public boolean getNodeBooleanValue(int node) { 
     return mBooleanValues[node]; 
    } 

    public void setNodeBooleanValue(int node, boolean value) { 
     mBooleanValues[node] = value; 
    } 

    TreeField mRootField = null; 

    public CBTreeField(String rootString, boolean rootBoolean) { 
     mRootField = new TreeField(this, TreeField.FOCUSABLE); 
     add(mRootField); 
     mStringValues = insertAt(mStringValues, 0, rootString); 
     mBooleanValues = insertAt(mBooleanValues, 0, rootBoolean); 
    } 

    public int addSiblingNode(int previousSibling, String stringValue, 
      boolean booleanValue, Object cookie) { 
     int index = mRootField.addSiblingNode(previousSibling, cookie); 
     mBooleanValues = insertAt(mBooleanValues, index, booleanValue); 
     mStringValues = insertAt(mStringValues, index, stringValue); 
     return index; 
    } 

    public int addChildNode(int parent, String stringValue, 
      boolean booleanValue, Object cookie) { 
     int index = mRootField.addChildNode(parent, cookie); 
     mBooleanValues = insertAt(mBooleanValues, index, booleanValue); 
     mStringValues = insertAt(mStringValues, index, stringValue); 
     return index; 
    } 

    static boolean[] insertAt(boolean[] inArray, int index, boolean value) { 
     int newLen = inArray.length + 1; 
     boolean[] outArray = new boolean[newLen]; 
     for (int i = 0, j = 0; i < newLen; i++, j++) { 
      outArray[i] = (i != index) ? inArray[j] : value; 
      if (i == index) 
       j++; 
     } 
     return outArray; 
    } 

    static String[] insertAt(String[] inArray, int index, String value) { 
     int newLen = inArray.length + 1; 
     String[] outArray = new String[newLen]; 
     for (int i = 0, j = 0; i < newLen; i++, j++) { 
      outArray[i] = (i != index) ? inArray[j] : value; 
      if (i == index) 
       j++; 
     } 
     return outArray; 
    } 

    public void drawTreeItem(TreeField treeField, Graphics g, int node, int y, 
      int width, int indent) { 
     String check = String 
       .valueOf(mBooleanValues[node] ? 
       Characters.BALLOT_BOX_WITH_CHECK : Characters.BALLOT_BOX); 
     g.drawText(check, indent, y, DrawStyle.LEFT); 
     g.drawText(mStringValues[node], indent + 20, y, DrawStyle.RIGHT 
       | ELLIPSIS); 
    } 

    protected void makeMenu(Menu menu, int instance) { 
     super.makeMenu(menu, instance); 
     menu.add(new MenuItem("Change value", 0, 0) { 
      public void run() { 
       int node = mRootField.getCurrentNode(); 
       mBooleanValues[node] = !mBooleanValues[node]; 
       invalidate(); 
      } 
     }); 
    } 
} 
échantillon

d'utilisation:

class Scr extends MainScreen { 
    public Scr() { 
     CBTreeField tree = new CBTreeField("root", false); 
     add(tree); 

     int ch01 = tree.addChildNode(0, "child 0-1", true, null); 
     int ch02 = tree.addChildNode(0, "child 0-2", false, null); 
     int ch03 = tree.addChildNode(0, "child 0-3", false, null); 
     int ch011 = tree.addChildNode(ch01, "child 0-1-1", false, null); 
     int ch012 = tree.addChildNode(ch01, "child 0-1-2", true, null); 
     int ch031 = tree.addChildNode(ch03, "child 0-3-1", true, null); 
    } 
} 
+0

Merci! c'est utile, y ce n'est pas accepté comme une réponse ??? –