2012-04-03 5 views
4

Ich möchte das (+) Zeichen anpassen, die auf der linken Seite der Baumansicht erscheint, ist es möglich, I Bild platziert werden soll in diesem OrtCustomizing Blackberry Treefield

ich versucht habe zu gestalten und durchsucht die Foren auch Blackberry-Foren, wo einer von ihnen sagte, dass seine nicht möglich, aber dann
bekam ich einen Link für dieses Wie unten, die besagt, es möglich ist,

http://supportforums.blackberry.com/t5/Java-Development/Custom-TreeField/td-p/354901

wo die HardwareDevice Klasse missin zu sein scheint g

Kann mir jemand dieses Konzept mit dem Link oder einer anderen Antwort erklären Bitte vorschlagen?

Antwort

7

[AKTUALISIERT] Wenn Sie wollen CUSTOMIZE die (+) - Zeichen und andere Attribute jeder Zeile eines TreeFieldanstatt Ihren eigenen Baum Feld Schreiben dann können Sie versuchen, neu zu schreiben, die drawTreeItem Methode von TreeFieldCallback wie unten dargestellt:

import net.rim.device.api.system.Bitmap; 
import net.rim.device.api.system.Display; 
import net.rim.device.api.ui.Field; 
import net.rim.device.api.ui.Graphics; 
import net.rim.device.api.ui.component.LabelField; 
import net.rim.device.api.ui.component.TreeField; 
import net.rim.device.api.ui.component.TreeFieldCallback; 
import net.rim.device.api.ui.container.MainScreen; 
import net.rim.device.api.ui.container.VerticalFieldManager; 

public class TreeDemo extends MainScreen { 
    int parent[] = {1,2,3,4,5,6,7,8,9}; 
    int child[][] = new int [10][10]; 
    int child_child[][][] = new int [10][10][10]; 

    int rowHeight = 27; 

    CustomTreeFieldCallback treeCallback = new CustomTreeFieldCallback(); 
    VerticalFieldManager vm = new VerticalFieldManager(Field.FOCUSABLE | VERTICAL_SCROLL | VERTICAL_SCROLLBAR); 
    TreeField myTree = new TreeField(treeCallback, Field.FOCUSABLE); 

    public TreeDemo() { 
     vm.add(new LabelField("Table:")); 
     myTree.setRowHeight(rowHeight); 
     myTree.setIndentWidth(15); 
     myTree.setDefaultExpanded(false); 
     for(int i = parent.length-1; i >= 0 ; i--) { 
      parent[i] = myTree.addChildNode(0, "Parent_" + (i+1)); 
      child[i] = new int[4]; 
      for(int j = child[i].length-1; j >=0 ; j--) { 
       child[i][j] = myTree.addChildNode(parent[i], "Child_"+ (i+1) + "_" + (j+1)); 
       child_child[i][j] = new int[3]; 
       for(int k = child_child[i][j].length-1; k >= 0 ; k--) { 
        child_child[i][j][k] = myTree.addChildNode(child[i][j], "Child_of_Child_"+ (i+1) + "_" + (j+1)+ "_" + (k+1)); 
       } 
      } 
     } 
     vm.add(myTree); 
     add(vm); 
    } 

    private class CustomTreeFieldCallback implements TreeFieldCallback { 

     public void drawTreeItem(TreeField treeField, Graphics graphics, int node, 
       int y, int width, int indent) { 
      // TODO Auto-generated method stub 
      String string = (String) treeField.getCookie(node); 
      int preservedColor = graphics.getColor(); 

      if(treeField.getCurrentNode() == node) { 
       graphics.setColor(0x0CCCC0); 
      } else { 
       graphics.setColor(0x404040); 
      } 
      graphics.fillRect(0, y, Display.getWidth(), treeField.getRowHeight()); 

      Bitmap iconImage; 
      int iconImageWidth = 0; 
      indent -= 20; // decrease the extra indentation for all nodes. 
      if(treeField.getFirstChild(node) != -1){ // if the node is not a leaf node 
       if(treeField.getExpanded(node)) { 
        iconImage = Bitmap.getBitmapResource("icon_arrow_down.png"); 
        iconImageWidth = iconImage.getWidth(); 
       } else { 
        iconImage = Bitmap.getBitmapResource("icon_arrow_right.png"); 
        iconImageWidth = iconImage.getWidth(); 
       } 
       graphics.drawBitmap(indent, y, indent+iconImageWidth, treeField.getRowHeight(), iconImage, 0, 0); 
      } 

      if(treeField.getCurrentNode() == node) { 
       graphics.setColor(0x404040);    
      } else { 
       graphics.setColor(0x0CCCC0); 
      } 
      graphics.drawText(string, indent+iconImageWidth, y); 

      graphics.setColor(preservedColor); 
     } 

    } 
} 

Customizing TreeField in BlackBerry

+0

Ok !!!! .. cool code @HeartBeat: Aber wenn es Kindknoten in den Kindknoten gibt, wird es dann überschrieben? – Yatin

+1

@Yatin K, Der vorherige Code hätte auch "Kindknoten innerhalb der Kindknoten" unterstützt, aber es gab ein kleines Problem mit dem Eindruck, dass ich zuvor nicht berücksichtigt habe. Jetzt habe ich den Code aktualisiert und dieses Problem behoben, überprüfen Sie es !! –

+0

Hallo, bitte beantworten Sie die folgende Frage zu dieser Frage. http://stackoverflow.com/questions/17723328/parent-node-orchildnode-in-blackberry-tree-field – Yatin

5

Versuchen Sie diesen folgenden Code Feind Brauch mit Bild treeField

import net.rim.device.api.system.Bitmap; 
import net.rim.device.api.system.Display; 
import net.rim.device.api.ui.Field; 
import net.rim.device.api.ui.FieldChangeListener; 
import net.rim.device.api.ui.Manager; 
import net.rim.device.api.ui.UiApplication; 
import net.rim.device.api.ui.component.BitmapField; 
import net.rim.device.api.ui.component.LabelField; 
import net.rim.device.api.ui.component.SeparatorField; 
import net.rim.device.api.ui.container.HorizontalFieldManager; 
import net.rim.device.api.ui.container.MainScreen; 
import net.rim.device.api.ui.container.VerticalFieldManager; 

/** 
* A class extending the MainScreen class, which provides default standard 
* behavior for BlackBerry GUI applications. 
*/ 
public final class MyScreen extends MainScreen implements FieldChangeListener 
{ 
    /** 
    * Creates a new MyScreen object 
    */ 
    private VerticalFieldManager main_manager; 
    private HorizontalFieldManager parentNodes; 
    private LabelField parent_lables[]; 
    private Bitmap bitmap,upbitmap; 
    private BitmapField bitmap_field[]; 
    private VerticalFieldManager submanager[]; 
    private int sizeOfParentNodes=3; 
    private int sizeOfChildNodes=5; 
    private static boolean flag[]; 

    public MyScreen() 
    {   
     // Set the displayed title of the screen  
     bitmap=Bitmap.getBitmapResource("arrow.png"); 
     upbitmap=Bitmap.getBitmapResource("uparrow.png"); 
     main_manager=new VerticalFieldManager(Manager.VERTICAL_SCROLL|VERTICAL_SCROLLBAR){ 
      protected void sublayout(int maxWidth, int maxHeight) { 
       super.sublayout(Display.getWidth(), Display.getHeight()); 
       setExtent(Display.getWidth(), Display.getHeight()); 
      }; 
     }; 
     parent_lables=new LabelField[sizeOfParentNodes]; 
     flag=new boolean[sizeOfParentNodes]; 
     submanager=new VerticalFieldManager[sizeOfParentNodes]; 
     bitmap_field=new BitmapField[sizeOfParentNodes]; 
     for(int i=0;i<sizeOfParentNodes;i++) 
     { 
      submanager[i]=new VerticalFieldManager(); 
      updateGUI(i); 
      main_manager.add(submanager[i]); 
     } 

     add(main_manager); 


    } 
    public void fieldChanged(Field field, int context) { 
     // TODO Auto-generated method stub 
     synchronized (UiApplication.getEventLock()) { 
      for(int i=0;i<sizeOfParentNodes;i++) 
      { if(field==parent_lables[i]) 
       { 
        if(flag[i]==true){ 
         flag[i]=false; 
         submanager[i].deleteAll(); 
         updateGUI(i); 
         parent_lables[i].setFocus(); 
        }else{ 
         flag[i]=true; 
         bitmap_field[i].setBitmap(upbitmap); 
         for(int j=0;j<sizeOfChildNodes;j++) 
         { 
          submanager[i].add(new LabelField("  Child :"+i+","+j,Field.FOCUSABLE)); 
          submanager[i].add(new SeparatorField()); 
         } 
         submanager[i].invalidate(); 
        } 

       } 
      } 
     } 


    } 
    public void updateGUI(int index) 
    { 
     parentNodes=new HorizontalFieldManager(USE_ALL_WIDTH); 
     bitmap_field[index]=new BitmapField(bitmap); 

     parentNodes.add(bitmap_field[index]); 
     parent_lables[index]=new LabelField("Day"+index,Field.FOCUSABLE){ 
      protected boolean navigationClick(int status, int time) { 
       fieldChangeNotify(1); 
       return true; 
      }; 
     }; 
     parentNodes.add(parent_lables[index]); 
     parent_lables[index].setChangeListener(this); 
     submanager[index].add(parentNodes); 
    } 
} 

Sie erhalten Ausgabe als

enter image description here