① 關於MS Chart 繪曲線圖、餅圖的問題,曲線圖不需要事實顯示。
TWaver的Demo是很好的學習庫,很多東西都可以從Demo里找到。只要從頭到尾看一遍了,基本上日常應用都可以解決了。
我這個也是參照TWaver java Demo里的例子寫出來的,看看對你有沒有幫助:
package com;
import java.awt.BorderLayout;
import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JPanel;
import twaver.Node;
import twaver.TDataBox;
import twaver.TWaverUtil;
import twaver.TaskAdapter;
import twaver.TaskScheler;
import twaver.chart.LineChart;
public class LinkChartDemo extends JPanel{
private TDataBox box = new TDataBox();
private LineChart lineChart = new LineChart(box,"Real Time Line Chart",Color.BLACK,Color.WHITE);
public LinkChartDemo() {
final Node fromNode = new Node();
fromNode.setName("NodeA");
fromNode.putChartColor(Color.RED);
for(int i =0;i<20;i++){
fromNode.addChartValue(TWaverUtil.getRandomInt(100));
}
box.addElement(fromNode);
final Node toNode = new Node();
toNode.setName("NodeB");
toNode.putChartColor(Color.GREEN);
for(int i =0;i<20;i++){
toNode.addChartValue(TWaverUtil.getRandomInt(100));
}
box.addElement(toNode);
//set line chart property
lineChart.setYAxisVisible(true);
lineChart.setYScaleTextVisible(true);
lineChart.setXAxisVisible(true);
lineChart.setXScaleTextVisible(true);
lineChart.setInflexionVisible(true);
lineChart.setValueTextVisible(true);
this.setLayout(new BorderLayout());
this.add(lineChart, BorderLayout.CENTER);
TaskScheler.getInstance().register(new TaskAdapter() {
public void run(long clock) {
if (!lineChart.isShowing()) {
return;
}
fromNode.addChartValue(TWaverUtil.getRandomInt(100));
toNode.addChartValue(TWaverUtil.getRandomInt(100));
if (lineChart.valueCount() > 20) {
lineChart.removeHead(1);
}
}
});
}
public static void main(String[] args) {
JFrame frame = new JFrame();
LinkChartDemo demo = new LinkChartDemo();
frame.setContentPane(demo);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(1000, 500);
TWaverUtil.centerWindow(frame);
frame.setTitle("Alarm Table");
frame.setVisible(true);
}
}
② 如何給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
③ java 讓group不顯示name
1,可以用這個方法network.setElementlabelGenerator,將符合條件的label不畫上去;
2,setDisplayName(""),這樣將label設置為空,但是name依舊存在;
3,setName(""),這樣將已有的name已經改變了。
④ twaver java怎麼輸出xml
應該是這樣吧:http://blog.csdn.net/sun_ru/article/details/51785988
⑤ 如何讓HTML5的表格支持後台排序與分頁
如果資料庫中有幾千甚至幾萬條數據,一下子顯示出來也是不現實的,立馬就想要了分頁。查看TWaver的API,並沒有發現表格中提供了分頁的功能。算了,還是自己來擴展,想想TWaverJava中分頁的功能,HTML5實現起來應該也不算太難,我們需要定義一個PagedTablePane,panel中包含表格和分頁欄,分頁欄參考了TWaver Java的那種:
仔細看看上面的分頁條,其實也不是那麼復雜,幾個分頁按鈕加上分頁的信息,於是很快就模仿了一個類似的分頁欄,先上圖:
界面實現起來還是比較容易的,主要的是按鈕的操作和分頁信息的顯示,我們需要定義幾個變數:currentPage(當前頁)、countPerPage(每頁的條數)、pageCount(頁數)、count(總數),定義了這幾個變數就可以將上圖中分頁的信息表示出來
⑥ java里邊的TWaverUtil.getRandomColor()
TWaverUtil 應該是自定義的吧
看看自定義的包都導入了嗎
⑦ java中兩個繪制的兩個圖形怎麼用一跳帶箭頭的線連接起來(Swing...) 就如visio類似...麻煩了.
gef 或者 jgraph 或者 twaver jar包都可以 不過twaver是付費的
⑧ 請問twaver java如何去掉試用版的水印啊
TWaver是專業的圖形界面組件庫,提供了跨平台,跨瀏覽器的多語言平台組件.
,提供專業的拓撲組件、地圖組件、設備圖組件,以及表格、樹圖、屬性表、圖表等豐富的通用圖形界面組件.
waver-java-4.3,最新版本,需要去水印的請聯系[email protected]
TWaver「一站式」UI組件庫,包含網路拓撲圖、地圖、設備面板圖、流程圖、各種Chart圖表、樹、表格及其他通用組件;跨平台、跨設備,適應電信、電力、金融等各行各業;提供強大的API開發介面、完整的文檔和demo樣例代碼,讓您的UI界面更專業、更美觀、更高效;
獨特的企業級3D呈現引擎,可對各種企業數據進行三維建模並呈現。支持各種3D物體、貼圖紋理、燈光、粒子系統、動畫系統、場景特效,可直接運行在網頁、桌面及各種手持設備上。TWaver3D可視化工具包,結合2D圖形組件,為用戶帶來革命性的全新視覺感受和交互體驗;
Mono Design設計平台,包含強大的2D/3D建模工具和豐富的2D/3D模版庫,讓您在拖拖拽拽中建立復雜的3D圖形和應用場景。從電信機房、數據中心、車間廠房,到3D拓撲圖/流程圖、電信設備、IT設施,乃至家居傢具、山水花草人物,包羅萬象,為您所用。
⑨ 如何學習TWaver
一、全面了解 最好、最全面的資料莫過於下載包documents中的TWaver.Java.Dev.Guide.pdf文檔了,這個文檔全面、詳細的介紹了TWaver,通過這個文檔可以全面了解TWaver中的相關內容。這個文檔略讀即可(畢竟內容比較多,而且是英文的),雖然是英文的(沒有中文版),但是並不復雜,藉助一個金山詞霸,一般情況下都能搞定。 關於Guide文檔,略讀即可,通過這個文檔能搞清楚兩個知識點就可以了: 1、TWaver中的MVC結構。 Model: DataBox View: 各種組件(network,tree,table,chart) DataBox驅動各種View 二、具體代碼學習 看Demo及其源代碼 如果項目比較緊急的話,可以跳過第一步直接進入到這一步。 demo全面的展示了TWaver的功能。裡面的組織比較規律,左側樹的層次結構就是代碼中的package結構,如果想要哪個功能,可以直接找到對應的類,拷貝、修改代碼即可。其中還有很多Swing相關的知識點,可以用來學習Swing技術。建議在IDE中新建一個Demo的工程,方便代碼查看。 關於一二這兩步,可以同時進行,更加有助於理解,是一個理論聯系實際的過程。 三、關於API 關於這個,個人建議只可用來查找某個函數(常用到的函數在Demo中都能找到),不建議深入。 五、MSN、MAIL等直接找TWaver技術支持及相關技術人員
⑩ 如何用BlazeDS前後台數據交互
一般來講有兩種方式:構造XML數據,傳送到前台後,通過XMLSerializer反序列化到DataBox中;後台構建Java對象,通過BlazeDS傳送到前台後,映射成TWaver Flex的數據對象,然後直接添加到DataBox中。