當前位置:首頁 » 網頁前端 » twaverweb
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

twaverweb

發布時間: 2022-11-20 23:06:50

① 哪位大神用過TWaver Java

TWaver Java是基於Java Swing和Java2D技術的產品。它由一個MVP開發框架、DataBox數據容器、一組Swing可視化組件和大量預定義的管理對象所構成,用於呈現各種電信網路數據和信息。尤其適用於大數據量,交互操作復雜,實時性強,運行效率要求苛刻的電信運營支撐系統。最終產品可以在桌面直接部署運行,或者通過Applet小程序嵌入瀏覽器Web頁面,也可以使用Java Web Start技術將程序進行打包並部署在Web上,通過JNLP進行引導、啟動和自動更新。

② 如何使用twaver web-CSDN論壇

twaver-web主要是針對Web畫圖的比如網路拓撲圖等 js+css來實現,以下給出關鍵代碼
//set file directory for twaver-all-min.js
TWaver.Const.BASE_PATH = 'twaver/';
//create databox and set 'helloTWaver' as url which is the mapping address of HelloTWaverServlet
var databox = new TWaver.DataBox('helloTWaver');
//create network object and bind with databox, set container
var network = new TWaver.SVGNetwork(databox, document.body);
//dataBox request data
databox.update();

③ 如何給TWaver中的Node對象加右鍵菜單項

選中樹節點,多出一個按鈕,可以用tree.iconsComponentsFunction(用法參考AlarmMappingDemo)。
菜單用Menu.createMenu(用法參考Flex如何定製Menu的Icon)

如果右鍵點擊樹節點時,讓此節點選中最好,不過現在還沒有通過ContextMenuEvent或者MouseEvent獲得TreeData的方法,可以考慮先自己繼承twaver.Tree,添加如下方法(TWaver Flex 1.5版本將添加):
代碼:
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;
}
默認Menu上的Icon必須通過iconField和iconFunction去指定,但是這兩種方式都必須用嵌入資源Class名字去指定Icon,如果想用動態的圖片(比如URL)作為Menu的Icon,就必須定製一把MenuItemRenderer。

首先寫個類CustomMenuItemRenderer繼承MenuItemRenderer,裡面增加一個如下變數作為自定義Icon的組件:

1
private var image:UIComponent = new UIComponent();
然後裡面重寫measure方法(計算MenuItem的寬高):

01
override protected function measure():void {
02
super.measure();
03

04
if (separatorIcon || listData == null) {
05
return;
06
}
07

08
var imageAsset:IImageAsset = Utils.getImageAsset(data.@iconName);
09
if(imageAsset == null){
10
return;
11
}
12
measuredWidth += imageAsset.width;
13
if(imageAsset.height > measuredHeight){
14
measuredHeight = imageAsset.height;
15
}
16
}
重寫commitProperties方法(重畫並增加Icon,指定Icon寬高):

查看源代碼列印幫助

Java代碼
override protected function commitProperties():void {
super.commitProperties();

if (separatorIcon || listData == null) {
return;
}

var imageAsset:IImageAsset = Utils.getImageAsset(data.@iconName);
if(imageAsset == null){
return;
}
image.width = imageAsset.width;
image.height = imageAsset.height;
image.graphics.beginBitmapFill(imageAsset.getBitmapData());
image.graphics.drawRect(0, 0, image.width, image.height);
image.graphics.endFill();
if(!this.contains(image)){
this.addChild(image);
}
}

重寫updateDisplayList方法(指定Icon的位置,由於Icon在左邊,所以super一把後,再移動Labe等的位置):
Java代碼
override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void{
super.updateDisplayList(unscaledWidth, unscaledHeight);

if (separatorIcon || listData == null) {
return;
}

var imageAsset:IImageAsset = Utils.getImageAsset(data.@iconName);
if(imageAsset == null){
return;
}
if(typeIcon){
typeIcon.x += imageAsset.width;
}
if(label){
label.x += imageAsset.width;
}
}

重寫measuredIconWidth方法(計算Icon的寬度):
Java代碼

1
override public function get measuredIconWidth():Number {
2
var imageAsset:IImageAsset = Utils.getImageAsset(data.@iconName);
3
if(imageAsset == null){
4
return 0 ;
5
}else{
6
var horizontalGap:Number = getStyle("horizontalGap");
7
return imageAsset.width + horizontalGap;
8
}
9
}
最後用自定義的CustomMenuItemRenderer指定Menu的ItemRenderer,注意使用iconName指定icon的名字(這里為TWaver注冊圖片的名字)。也可以用別的名字,注意把CustomMenuItemRenderer裡面的@iconName換一下

1
var menu:Menu = Menu.createMenu(network, myMenuData, false);
2
menu.labelField = "@label";
3
menu.itemRenderer = new ClassFactory(CustomMenuItemRenderer);
4
var point:Point = network.getLogicalPoint(event.mouseEvent);
5
network.callLater(function():void{
6
menu.show(point.x, point.y);
7
});
指定Menu數據的XML文件如下:

查看源代碼列印幫助
01
<mx:XML format="e4x" id="myMenuData">
02
<root>
03
<menuitem label="www.servasoftware.com" iconName="databox_icon">
04
<menuitem label="TWaver" type="check" toggled="true">
05
<menuitem label="Java" type="radio" groupName="one"/>
06
<menuitem label="Web" type="radio" groupName="one" toggled="true"/>
07
<menuitem label="Flex" type="radio" groupName="one" iconName="bus_icon"/>
08
<menuitem label="Silverlight" type="radio" groupName="one"/>
09
</menuitem>
10
<menuitem type="separator"/>
11
<menuitem label="2BizBox" iconName="data_icon"/>
12
</menuitem>
13
<menuitem label="www.2bizbox.com"/>
14
<menuitem label="twaver.servasoft.com"/>
15
</root>
16
</mx:XML>
17
</code>
源代碼見TWa

④ 如何給TWaver中的Node對象加右鍵菜單項

選中樹節點,多出一個按鈕,可以用tree.iconsComponentsFunction(用法參考AlarmMappingDemo)。
菜單用Menu.createMenu(用法參考Flex如何定製Menu的Icon)

如果右鍵點擊樹節點時,讓此節點選中最好,不過現在還沒有通過ContextMenuEvent或者MouseEvent獲得TreeData的方法,可以考慮先自己繼承twaver.Tree,添加如下方法(TWaver Flex 1.5版本將添加):
代碼:
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;
}
默認Menu上的Icon必須通過iconField和iconFunction去指定,但是這兩種方式都必須用嵌入資源Class名字去指定Icon,如果想用動態的圖片(比如URL)作為Menu的Icon,就必須定製一把MenuItemRenderer。

首先寫個類CustomMenuItemRenderer繼承MenuItemRenderer,裡面增加一個如下變數作為自定義Icon的組件:

1
private var image:UIComponent = new UIComponent();
然後裡面重寫measure方法(計算MenuItem的寬高):

01
override protected function measure():void {
02
super.measure();
03

04
if (separatorIcon || listData == null) {
05
return;
06
}
07

08
var imageAsset:IImageAsset = Utils.getImageAsset(data.@iconName);
09
if(imageAsset == null){
10
return;
11
}
12
measuredWidth += imageAsset.width;
13
if(imageAsset.height > measuredHeight){
14
measuredHeight = imageAsset.height;
15
}
16
}
重寫commitProperties方法(重畫並增加Icon,指定Icon寬高):

查看源代碼列印幫助
Java代碼 收藏代碼
override protected function commitProperties():void {
super.commitProperties();

if (separatorIcon || listData == null) {
return;
}

var imageAsset:IImageAsset = Utils.getImageAsset(data.@iconName);
if(imageAsset == null){
return;
}
image.width = imageAsset.width;
image.height = imageAsset.height;
image.graphics.beginBitmapFill(imageAsset.getBitmapData());
image.graphics.drawRect(0, 0, image.width, image.height);
image.graphics.endFill();
if(!this.contains(image)){
this.addChild(image);
}
}

重寫updateDisplayList方法(指定Icon的位置,由於Icon在左邊,所以super一把後,再移動Labe等的位置):
Java代碼 收藏代碼
override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void{
super.updateDisplayList(unscaledWidth, unscaledHeight);

if (separatorIcon || listData == null) {
return;
}

var imageAsset:IImageAsset = Utils.getImageAsset(data.@iconName);
if(imageAsset == null){
return;
}
if(typeIcon){
typeIcon.x += imageAsset.width;
}
if(label){
label.x += imageAsset.width;
}
}

重寫measuredIconWidth方法(計算Icon的寬度):
Java代碼 收藏代碼

1
override public function get measuredIconWidth():Number {
2
var imageAsset:IImageAsset = Utils.getImageAsset(data.@iconName);
3
if(imageAsset == null){
4
return 0 ;
5
}else{
6
var horizontalGap:Number = getStyle("horizontalGap");
7
return imageAsset.width + horizontalGap;
8
}
9
}
最後用自定義的CustomMenuItemRenderer指定Menu的ItemRenderer,注意使用iconName指定icon的名字(這里為TWaver注冊圖片的名字)。也可以用別的名字,注意把CustomMenuItemRenderer裡面的@iconName換一下

1
var menu:Menu = Menu.createMenu(network, myMenuData, false);
2
menu.labelField = "@label";
3
menu.itemRenderer = new ClassFactory(CustomMenuItemRenderer);
4
var point:Point = network.getLogicalPoint(event.mouseEvent);
5
network.callLater(function():void{
6
menu.show(point.x, point.y);
7
});
指定Menu數據的XML文件如下:

查看源代碼列印幫助
01
<mx:XML format="e4x" id="myMenuData">
02
<root>
03
<menuitem label="www.servasoftware.com" iconName="databox_icon">
04
<menuitem label="TWaver" type="check" toggled="true">
05
<menuitem label="Java" type="radio" groupName="one"/>
06
<menuitem label="Web" type="radio" groupName="one" toggled="true"/>
07
<menuitem label="Flex" type="radio" groupName="one" iconName="bus_icon"/>
08
<menuitem label="Silverlight" type="radio" groupName="one"/>
09
</menuitem>
10
<menuitem type="separator"/>
11
<menuitem label="2BizBox" iconName="data_icon"/>
12
</menuitem>
13
<menuitem label="www.2bizbox.com"/>
14
<menuitem label="twaver.servasoft.com"/>
15
</root>
16
</mx:XML>
17
</code>

⑤ 解決webgl使用canvas.toDataURL()沒有內容的問題

1 var url = canvas.toDataURL("image/png");
2 node.setStyle('front.m.texture.image',url);
球形布局坐標計算代碼片段:
1 var radius=1000;
2 var phi = Math.acos( -1 + ( 2 * index ) / total );
3 var theta = Math.sqrt( total * Math.PI ) * phi;
4 var x = radius * Math.cos( theta ) * Math.sin( phi );
5 var y = radius * Math.sin( theta ) * Math.sin( phi );
6 var z = radius * Math.cos( phi );
程序和源代碼都已經在TWaver的MONO DESIGN產品中,感興趣的朋友可以登錄在線網址www.mono-design.cn或下載產品包。趕緊試試吧!

⑥ 如何給TWaver中的Node對象加右鍵菜單項

選中樹節點,多出一個按鈕,可以用tree.iconsComponentsFunction(用法參考AlarmMappingDemo)。
菜單用Menu.createMenu(用法參考Flex如何定製Menu的Icon)

如果右鍵點擊樹節點時,讓此節點選中最好,不過現在還沒有通過ContextMenuEvent或者MouseEvent獲得TreeData的方法,可以考慮先自己繼承twaver.Tree,添加如下方法(TWaver Flex 1.5版本將添加):
代碼:
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;
}
默認Menu上的Icon必須通過iconField和iconFunction去指定,但是這兩種方式都必須用嵌入資源Class名字去指定Icon,如果想用動態的圖片(比如URL)作為Menu的Icon,就必須定製一把MenuItemRenderer。

首先寫個類CustomMenuItemRenderer繼承MenuItemRenderer,裡面增加一個如下變數作為自定義Icon的組件:

1
private var image:UIComponent = new UIComponent();
然後裡面重寫measure方法(計算MenuItem的寬高):

01
override protected function measure():void {
02
super.measure();
03

04
if (separatorIcon || listData == null) {
05
return;
06
}
07

08
var imageAsset:IImageAsset = Utils.getImageAsset(data.@iconName);
09
if(imageAsset == null){
10
return;
11
}
12
measuredWidth += imageAsset.width;
13
if(imageAsset.height > measuredHeight){
14
measuredHeight = imageAsset.height;
15
}
16
}
重寫commitProperties方法(重畫並增加Icon,指定Icon寬高):

查看源代碼列印幫助

Java代碼
override protected function commitProperties():void {
super.commitProperties();

if (separatorIcon || listData == null) {
return;
}

var imageAsset:IImageAsset = Utils.getImageAsset(data.@iconName);
if(imageAsset == null){
return;
}
image.width = imageAsset.width;
image.height = imageAsset.height;
image.graphics.beginBitmapFill(imageAsset.getBitmapData());
image.graphics.drawRect(0, 0, image.width, image.height);
image.graphics.endFill();
if(!this.contains(image)){
this.addChild(image);
}
}

重寫updateDisplayList方法(指定Icon的位置,由於Icon在左邊,所以super一把後,再移動Labe等的位置):
Java代碼
override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void{
super.updateDisplayList(unscaledWidth, unscaledHeight);

if (separatorIcon || listData == null) {
return;
}

var imageAsset:IImageAsset = Utils.getImageAsset(data.@iconName);
if(imageAsset == null){
return;
}
if(typeIcon){
typeIcon.x += imageAsset.width;
}
if(label){
label.x += imageAsset.width;
}
}

重寫measuredIconWidth方法(計算Icon的寬度):
Java代碼

1
override public function get measuredIconWidth():Number {
2
var imageAsset:IImageAsset = Utils.getImageAsset(data.@iconName);
3
if(imageAsset == null){
4
return 0 ;
5
}else{
6
var horizontalGap:Number = getStyle("horizontalGap");
7
return imageAsset.width + horizontalGap;
8
}
9
}
最後用自定義的CustomMenuItemRenderer指定Menu的ItemRenderer,注意使用iconName指定icon的名字(這里為TWaver注冊圖片的名字)。也可以用別的名字,注意把CustomMenuItemRenderer裡面的@iconName換一下

1
var menu:Menu = Menu.createMenu(network, myMenuData, false);
2
menu.labelField = "@label";
3
menu.itemRenderer = new ClassFactory(CustomMenuItemRenderer);
4
var point:Point = network.getLogicalPoint(event.mouseEvent);
5
network.callLater(function():void{
6
menu.show(point.x, point.y);
7
});
指定Menu數據的XML文件如下:

查看源代碼列印幫助
01
<mx:XML format="e4x" id="myMenuData">
02
<root>
03
<menuitem label="www.servasoftware.com" iconName="databox_icon">
04
<menuitem label="TWaver" type="check" toggled="true">
05
<menuitem label="Java" type="radio" groupName="one"/>
06
<menuitem label="Web" type="radio" groupName="one" toggled="true"/>
07
<menuitem label="Flex" type="radio" groupName="one" iconName="bus_icon"/>
08
<menuitem label="Silverlight" type="radio" groupName="one"/>
09
</menuitem>
10
<menuitem type="separator"/>
11
<menuitem label="2BizBox" iconName="data_icon"/>
12
</menuitem>
13
<menuitem label="www.2bizbox.com"/>
14
<menuitem label="twaver.servasoft.com"/>
15
</root>
16
</mx:XML>
17
</code>