📄 sdatreeview.java
字号:
/* * To change this template, choose Tools | Templates * and open the template in the editor. */package cn.sda.ui;import cn.sda.event.KeybordEvent;import cn.sda.event.PointerEvent;import cn.sda.event.TreeViewSelectChangeEvent;import cn.sda.event.TreeViewSelectNodeEvent;import java.util.Enumeration;import javax.microedition.lcdui.Graphics;import java.util.Vector;/** * @author not attributable * @version 1.0 */public class SDATreeView extends SDABaseControl { //边框 private int borderStyle = SDAConsts.bsFixedSingle; //隐藏选定内容 private boolean hideSelection = true; //滚动边框(多行) private int scrollBars = SDAConsts.srBoth; private int barwidth = 10; //边框线颜色 private int borderColor = SDAConsts.clBlack; //滚动条颜色 private int scrollBarColor = SDAConsts.clBtnFace; //选中后字体颜色 private int selectedFontColor = SDAConsts.clWhite; //内部变量 //行数,行最大长度 private int maxLineLenght = 0; private int maxLineNum = 0; //最大可见完整行数 private int maxVisibleLineNum = 0; //垂直开始显示行 private int startLine = 0; //水平开始显示位置 private int startLeft = 0; //变动前位置 private int oldStartLine = 0; private int oldStartLeft = 0; //水平滚条位置 private int HSLeft = 0; private int HSTop = 0; private int HSWidth = 0; private int HSHeight = 0; //垂直滚动条位置 private int VSLeft = 0; private int VSTop = 0; private int VSWidth = 0; private int VSHeight = 0; //点击的滚动条的位置 private int oldScrollPointx = 0; private int oldScrollPointy = 0; //按下滚动条 private boolean isscrollbarpointdown = false; //记录按下的滚动条0:水平,1:垂直的 private byte scrollbardownHV = 0; //行的列表 private Vector TreeNodes; //当前选中行 private int itemIndex = -1; private SDATreeNode CurNode = null; //绝对行 private int absIndex = -1; //间隔 private int indent = 10; //临时变量 private int p_index = 0; private int p_lindex = 0; private int p_len = 0; private SDATreeNode p_node = null; //事件 private TreeViewSelectChangeEvent onSelectChange = null; private TreeViewSelectNodeEvent onSelectNode = null; public SDATreeView() { super(); internalSDATreeView(); } private void internalSDATreeView() { TreeNodes = new Vector(); this.setVisible(true); setLeft(0); setTop(0); setBorderStyle(SDAConsts.bsFixedSingle); super.setWidth(160); setHeight(100); //高度根据字体高度来 setHeight(getFont().getHeight() + 4); super.setBackColor(SDAConsts.clWhite); this.onPointerPressed = new PointerEvent() { public void Event(SDABaseControl ctrl, int x, int y) { doPointerPressed(x, y); } }; this.onPointerReleased = new PointerEvent() { public void Event(SDABaseControl ctrl, int x, int y) { doPointerReleased(x, y); } }; this.onKeyUp = new KeybordEvent() { public void Event(SDABaseControl ctrl, int keyCode) { doKeyUp(keyCode); } }; } //处理index(absIndex,layerIndex,index) protected void setTreeNodesIndex() { SDATreeNode node = null; p_index = 0; p_lindex = 0; for (int i = 0; i < TreeNodes.size(); i++) { node = (SDATreeNode) TreeNodes.elementAt(i); node.setIndex(i); node.setLayerIndex(p_lindex); setTreeNodeIndex(node); } } private void setTreeNodeIndex(SDATreeNode node) { SDATreeNode cnode = null; node.setAbsIndex(p_index); node.setTree(this); p_index++; if (node.hasChild()) { p_lindex++; } int index = 0; for (int i = 0; i < node.getChildsCount(); i++) { cnode = (SDATreeNode) node.getChild(i); cnode.setIndex(index); cnode.setTree(this); cnode.setLayerIndex(p_lindex); index++; if (cnode.hasChild()) { setTreeNodeIndex(cnode); } } if (node.hasChild()) { p_lindex--; } } //增加项 public SDATreeNode addChild(SDATreeNode parent, String nodeString) { return internalAddChild(parent, nodeString); } private SDATreeNode internalAddChild(SDATreeNode parent, String nodeString) { SDATreeNode listitem = new SDATreeNode(); listitem.setNodeString(nodeString); if (parent == null) { TreeNodes.addElement(listitem); } else { parent.addChild(nodeString); } setTreeNodesIndex(); internalPaint(); return listitem; } public void addChild(SDATreeNode parent, SDATreeNode node) { if (parent == null) { if (!TreeNodes.contains(node)) { TreeNodes.addElement(node); } } else { if (!parent.hasChild(node)) { parent.addChild(node); } } setTreeNodesIndex(); internalPaint(); } //删除项 public void deleteChild(int nodeIndex) { internalDeleteChild(nodeIndex); } private void internalDeleteChild(int nodeIndex) { SDATreeNode node = getNodeFromItemIndex(nodeIndex); if (node.hasParent()) { node.getParent().removeChild(node); } else { TreeNodes.removeElement(node); } node.removeAllChild(); if (TreeNodes.size() == 0) { this.itemIndex = -1; } node = null; setTreeNodesIndex(); internalPaint(); System.gc(); } //清除所有项目 public void clear() { internalClear(); } private void internalClear() { SDATreeNode node = null; for (int i = 0; i < TreeNodes.size(); i++) { node = (SDATreeNode) TreeNodes.elementAt(i); node.removeAllChild(); } TreeNodes.removeAllElements(); itemIndex = -1; System.gc(); internalPaint(); } //获取项 public String getNodeString(int NodeIndex) { return internalGetNodeString(NodeIndex); } private String internalGetNodeString(int NodeIndex) { String result = null; SDATreeNode node = getNodeFromItemIndex(NodeIndex); if (node != null) { result = node.getNodeString(); } return result; } //查找判断是否有指定内容的项 public SDATreeNode getChild(int Index) { return getNodeFromItemIndex(Index); } public SDATreeNode getChild() { return getNodeFromItemIndex(itemIndex); } //获取所有node列表 public Enumeration getAllChildsNode() { Vector nodes = new Vector(); SDATreeNode node = null; for (int i = 0; i < TreeNodes.size(); i++) { node = (SDATreeNode) TreeNodes.elementAt(i); getChildNode(nodes, node); } return nodes.elements(); } private void getChildNode(Vector vt, SDATreeNode node) { vt.addElement(node); SDATreeNode cnode = null; if (node.hasChild()) { for (int i = 0; i < node.getChildsCount(); i++) { cnode = (SDATreeNode) node.getChild(i); getChildNode(vt, cnode); } } } //获取所有项目数 public int getChildsCount() { p_len = 0; SDATreeNode node = null; for (int i = 0; i < TreeNodes.size(); i++) { node = (SDATreeNode) TreeNodes.elementAt(i); getChildNum(node); } return p_len; } private void getChildNum(SDATreeNode node) { p_len++; SDATreeNode cnode = null; if (node.hasChild()) { for (int i = 0; i < node.getChildsCount(); i++) { cnode = (SDATreeNode) node.getChild(i); getChildNum(cnode); } } } //画 public void paint() { internalPaint(); } private void internalPaint() { if (!IsCanPaint()) { return; } Graphics g = form.getGraphics(); g.setFont(getFont()); InternalPaint(g); PaintChilds(); } protected void InternalPaint(Graphics g) { //可视下才画 if (isVisible()) { //初始化引用变量 int thisWidth = getWidth(); int thisHeight = getHeight(); int HBarWidth = getHBarWidth(); int VBarHeight = getVBarHeight(); //对齐方式处理后,画组件 //设置字体 g.setFont(getFont()); //外框 SetClip(g); //透明 if (!isTransparent()) { g.setColor(backColor); fillRect(g, 0, 0, thisWidth, thisHeight); } if (borderStyle == SDAConsts.bsFixed3D) { g.setColor(SDAConsts.clGray); drawLine(g, 0, 0, thisWidth, 0); drawLine(g, 0, 0, 0, thisHeight); g.setColor(SDAConsts.clBlack); drawLine(g, 1, 1, thisWidth - 1, 1); drawLine(g, 1, 1, 1, thisHeight - 1); g.setColor(SDAConsts.clBtnFace); drawLine(g, 2, thisHeight - 1, thisWidth - 2, thisHeight - 1); drawLine(g, thisWidth - 1, 2, thisWidth - 1, thisHeight - 1); g.setColor(SDAConsts.clWhite); drawLine(g, 1, thisHeight, thisWidth, thisHeight); drawLine(g, thisWidth, 1, thisWidth, thisHeight); if (isFoucsed()) { g.setColor(SDAConsts.clFocusShadow); drawRect(g, 1, 1, thisWidth - 2, thisHeight - 2); } } if (borderStyle == SDAConsts.bsFixedSingle) { //边框 g.setColor(this.getBorderColor()); drawRect(g, 0, 0, thisWidth, thisHeight); if (isFoucsed()) { g.setColor(SDAConsts.clFocusShadow); drawRect(g, 1, 1, thisWidth - 2, thisHeight - 2); } } //打字 g.setColor(getForeColor()); if (scrollBars == SDAConsts.srHorizontal) { SetClip(g, 2, 2, thisWidth - 4, thisHeight - barwidth - 4);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -