TWaver中的Node对象加右键菜单项

network.sendtotoponselected =false;
上面那个机柜的图片里面的每个设备都是一个对象可以拖放,有没有办法控制这些设备对象的可拖动范围,比如只能在某一范围内上下拖动,还有就是拖动这些设备时有一个问题,点击一个对象后,它总是覆盖在其它对象的上面,这样如果两个设备比较接近时下层的设备就覆盖了上层的设备,有没有办法固定它的层次关系


这里面也是有两个小技巧
1.就是每个设备作图的时候,注意满足电话中跟你说的那个构图技巧
2.给这些设备加上个location监听,当设备拖拽的时候,不允许将设备拖动超出一个范围即可.这个范围可以由几个相关的参数来共同制定,比如某个设备位于机架的第三层(当成这个设备的一个属性), 第三层的 y 坐标根据我们的底图应该是在 levelY 处,我们定义这个范围是 levelY+/- 20. ok,现在开始编码.(1)添加属性变化监听器,专门监听这种设备的location变化(2)这类设备的location发生变化后,在监听器中判断这类设备处于机架的哪一层,例如第三层,当前设备的location是否满足了Math.abs(location.y - level3)>20的条件,如果一旦满足,那么就重新设置该设备location回到指定位置 element.location = new Point(location.x,level3-element.height);

基本的思路大概如此,你看看根据实际情况变通一下
Re: 请问如何给TWaver中的Node对象加右键菜单项
如果右键点击树节点时,让此节点选中最好,不过现在还没有通过ContextMenuEvent或者MouseEvent获得TreeData的方法,可以考虑先自己继承twaver.Tree,添加如下方法(TWaver Flex 1.5版本将添加):

view plaincopy to clipboardprint?
代码:
public function getTreeDataByContextMenuEvent(event:ContextMenuEvent):TreeData{
var itemRenderer:IListItemRenderer;
var target:DisplayObject = event.mouseTarget;
while (target && target != this) {
if (target is IListItemRenderer && target.parent == listContent) {
if (target.visible) {
itemRenderer = IListItemRenderer(target);
}
break;
}

if (target is IUIComponent){
target = IUIComponent(target).owner;
} else {
target = target.parent;
}
}

if(itemRenderer != null){
return this.getTreeDataByIndex(this.itemRendererToIndex(itemRenderer));
}
return null;
}
public function getTreeDataByMouseEvent(event:MouseEvent):TreeData{
var itemRenderer:IListItemRenderer = this.mouseEventToItemRenderer(event);
if(itemRenderer != null){
return this.getTreeDataByIndex(this.itemRendererToIndex(itemRenderer));
}
return null;
}
其实不难不过需要你扩展一下UI,我在CustomGridDemo里面增加了一种ClippableCell,所有代码就是下面寥寥几行 关键之处就是这一行);
view plaincopy to clipboardprint?
代码:
package demo.network.chassis.customgrid;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import twaver.Node;
import twaver.network.TNetwork;
import twaver.network.ui.ResizableNodeUI;
public class ClippableCellUI extends ResizableNodeUI {
public ClippableCellUI(TNetwork network, ClippableCell clippableCell) {
super(network, clippableCell);
}
public void paintBody(Graphics2D g2d) {
ClippableCell cell = (ClippableCell)this.element;
Node host = cell.getHost();
Rectangle drawBound = null;
if(host == null){
drawBound = cell.getBounds();
}else{
Rectangle hostRect;
if(host instanceof CustomGrid){
hostRect = ((CustomGrid)host).getInnerBounds();
}else{
hostRect = host.getBounds();
}
drawBound = hostRect.intersection(cell.getBounds());
}
if(drawBound != null){
g2d.setColor((Color)cell.getClientProperty("color"));
g2d.fill(drawBound);
}
}
}
代码:
package demo.network.chassis.customgrid;
import java.awt.Color;
import twaver.Follower;
public class ClippableCell extends Follower {

public ClippableCell(){
init();
}

public ClippableCell(Object id){
super(id);
init();
}

private void init(){
this.putClientProperty("color", Color.red);
}

public String getUIClassID() {
return ClippableCellUI.class.getName();
}
}

你可能感兴趣的:(Flex)