Here is an example of how we can customize a TreeField of BlackBerry:
In order to associate some actions for clicking on the leaf nodes, the navigationClick or touchEvent methods of TreeField class should be customized.
import net.rim.device.api.system.Bitmap; 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); } } }
No comments:
Post a Comment