TWaver基本编程

上传人:012****78 文档编号:141913840 上传时间:2020-08-14 格式:DOC 页数:18 大小:122KB
返回 下载 相关 举报
TWaver基本编程_第1页
第1页 / 共18页
TWaver基本编程_第2页
第2页 / 共18页
TWaver基本编程_第3页
第3页 / 共18页
TWaver基本编程_第4页
第4页 / 共18页
TWaver基本编程_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《TWaver基本编程》由会员分享,可在线阅读,更多相关《TWaver基本编程(18页珍藏版)》请在金锄头文库上搜索。

1、TWaver基本编程 作者: 日期:TWaver基本编程2 Element的选中机制所有的Element数据都可以被选中。选中状态是Element的重要状态之一,它在实现人机交互过程中非常常用。理解和使用Element选择,对于熟练掌握TWaver开发具有重要意义。使用选择状态所有TWaver的Element都有一个选中状态。要么选中,要么没选中,它是一个boolean值。可以使用函数isSelected/setSelected进行获取或设置。一个对象处于选中状态时,其外观会有一定的变化,对于不同的组件,这种变化也有所不同。例如,对于拓扑图组件来说,选中的数据会显示一个高亮外框,而对于树来说,

2、选中数据会有一个高亮的背景框。如下图。实际上,这些默认的外观和行为都可以被定制和修改。后续章节我们将讲述这些用法。使用选择容器Selection ModelSelection Model可以成为选择容器,是一个DataBox附属的一个容器,它维护着DataBox中所有的被选中的数据对象的引用。DataBox作为一个大容器,它负责所有容纳其中数据的管理。但是,为了让管理职责更加清晰和明确、易于使用,DataBox还拆分出一些附属的、相对独立的小容器,分管不同的任务。选择容器Selection Model就是其中一个,专门负责管理数据的选中状态。其实,Element已经有了boolean值标识选中

3、状态,那为何DataBox还要设置选择容器进行选中状态的管理呢?主要是为了开发者使用更加方便。举一个简单的例子:如果DataBox容纳了1万个节点,其中有10个被用户选中,并进行了删除操作。如果没有选择容器,我们只能通过遍历这1万个节点来获得这10个数据进行删除,效率和方便性上都不够好。而有了选择容器,则可以直接访问选择容器,将其中的10个节点删除即可,因为TWaver已经保证所有的选中节点都会出现在选择容器中。通过选择容器,还可以通过API对选择状态进行控制。例如,将数据加入选择容器会造成数据被选中;清空选择容器,会取消所有数据的选中状态,等等。当然,选择容器仅仅负责选择状态的管理。无论对这

4、个容器怎么增、删、改操作,它仅仅影响数据的选中状态,而不会影响数据的其他属性,更不会导致数据从DataBox中被删除等行为。使用选择监听器选择监听器的作用是:用于监测数据的选择状态的变化。首先解释一下什么是监听器。如果读者熟悉Swing编程,可以从中看到大量使用监听器进行设计的例子。例如监听按钮被按下的动作是使用ActionListener,下拉框被修改是使用ChangeListener等等。同样,TWaver中的选择监听器SelectionListener的道理和用法类似,就是监听DataBox中数据的选中变化。其次解释一下为什么要监听选择的变化。根据实际应用场景的不同,其具体需求可能不同,

5、但是监听选中的变化作用还是比较大的。例如,当用户在屏幕上对拓扑图上的一些节点进行选中,我们希望把所有选中数据的名字动态显示在窗口底部的提示栏上。此时,就可以加装选择监听器,并对事件进行处理。下面的例子中,我们创建了一个新的选择监听器,当任何一个Element的选择状态发生变化时,我们都打印一个字符串,表示监听到了:DataBoxSelectionListener l =new DataBoxSelectionAdapter() public void selectionChanged(DataBoxSelectionEvent e) System.out.println(selection c

6、hanged.); ;TDataBox box=new TDataBox();box.getSelectionModel().addDataBoxSelectionListener (l);/add more code here.使用交互进行选择控制拓扑图提供了很多内置的交互模式,便于用户对数据进行选择操作。这样,我们可以通过API、鼠标或键盘等多种途径对数据选择进行控制。设备 操作 效果 鼠标 点击一个Element 选择Element 拓扑图拖拽矩形区域(左上到右下) 选中所有完全落入矩形区域内部的Element 拓扑图拖拽矩形区域(右下到左上) 选中所有完全和非完全落入矩形区域内部的El

7、ement 键盘+鼠标 Ctrl键+鼠标点击Element 设置或取消该Element的选中状态 Ctrl键+鼠标拖拽矩形框 设置或取消该矩形框内所有Element的选中状态 定制交互TWaver拓扑图提供了大量的默认的交互模式。例如拖拽模式、编辑模式、创建连线模式等等。如果这些模式依旧无法满足要求,可以通过扩展新的交互模式来解决。新的交互模式可以自定义鼠标、键盘等各种事件的具体行为,为用户提供更加丰富的交互方法。交互模式的定制是TWaver比较难的部分,后续章节我们将对此进行详细介绍。设置右键菜单右键菜单也成为弹出菜单,本章介绍如何在拓扑图以及其他图形组件中使用右键菜单。右键菜单是一个非常常

8、用的交互方法,通过对数据进行选择、右键菜单,可以快速调出上下文有关的操作选项,为软件使用者提供直观的交互方法。TWaver中,我们使用一个叫做弹出菜单生成器(PopupMenuGenerator)的接口,来制作各种不同的右键菜单。更多关于使用右键菜单的例子,请见后续章节。这里仅给出一个简单的例子,让读者了解弹出菜单是如何制作出来的。菜单生成器是一个接口,被设置在拓扑图或其他图形组件上。一旦设置,当鼠标右键点击图形组件时,TWaver就会回调这个接口获得右键菜单。TWaver会将当前的一些操作场景传入,例如被点击的图形组件、鼠标事件等等。我们要做的,就是根据这些信息,动态的生成需要的右键菜单,返

9、回即可。具体的菜单显示等细节,TWaver会帮我们完成。以下弹出菜单的例子弹出一个菜单,把所有的选中的对象的名字用菜单项显示出来。代码被封装在函数step4中。private void step4() /Create a popup menu generatorPopupMenuGenerator popupMenuGenerator = new PopupMenuGenerator() /* Add the identifier of each of the selected objects to the menu.* In this example, the items added to

10、the menu do nothing. * In a real application, you would probably associate an * implementation of the Swing Action interface with each menu item. */ public JPopupMenu generate(TView tview, MouseEvent mouseEvent) /Create an empty pop-up menu. JPopupMenu popMenu = new JPopupMenu(); JMenuItem item; /If

11、 the selectedObjects collection is empty, no objects are selected. if (tview.getDataBox().getSelectionModel().isEmpty() popMenu.add(Nothing selected); else /Access the selected objects from the selection model. Iterator it = tview.getDataBox().getSelectionModel().selection(); while (it.hasNext() Ele

12、ment element = (Element) it.next(); popMenu.add(element.getName(); /If menu is empty, return null. if (popMenu.getComponentCount() = 0) return null; else return popMenu; ;/Set the pop-up menu generator for network componentsnetwork.setPopupMenuGenerator(popupMenuGenerator); 注意:菜单生成器一旦创建,可以通过方法setPop

13、upMenuGenerator应用在多个图形组件上。例如,上述popupMenuGenerator可以被同时设置在tree上面或表格上面。这样,无论在tree、table、拓扑图上,只要选中同样的数据,点击右键弹出的菜单将是完全一模一样的,而且我们无需编写多个菜单生成器。添加鼠标和键盘动作拓扑图是Java Swing组件的扩展。和其他Swing组件一样,在Network上添加鼠标、键盘动作是很容易的。唯一需要注意的一点是,拓扑图并非一个简单JComponent那么简单,它由工具条、滚动窗、画布等部分组成。所以,实际上我们一般添加动作都是针对画布的,而不是Network本身。所以,要使用netw

14、ork.getCanvas()方法先获得画布对象。然后,就可以像其他Swing组件那样添加各种监听器了。为了演示,我们在例子中添加一个双击动作,弹出消息框显示被双击的数据对象。这段代码被封装在函数step5中。private void step5() network.getCanvas().addMouseListener(new MouseAdapter() public void mouseClicked(MouseEvent e) if (e.getClickCount() = 2) /get the element the mouse clicked. Element element = network.getElementPhysicalAt(e.getPoint(); String message; if (element = null) message = You clicked nothing.; else message = You clicked + element.getName() + ; JOptionPane.showMessageDialog(network, message); );

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号