① 关于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中。