`

javafx中如何手动的触发事件,如树节点的更新事件

 
阅读更多
应用场景:
修改树节点的显示字段,但是树节点并没有refresh或者重新渲染的方法来实现树节点的刷新从而来感知这种修改。
实现方式:
可以实现采用手动触发事件的方式。
TreeItem<AbstractTreeNode> currentTreeItem = ****;//当前发生修改的树节点
currentTreeItem.getValue().setNodeText("abc");
//自动触发修改的事件,使树节点的显示信息能同步修改
Event.fireEvent(currentTreeItem, new TreeItem.TreeModificationEvent<AbstractTreeNode>(TreeItem.valueChangedEvent(), currentTreeItem, currentTreeItem.getValue()));

构建树节点的显示时自定义渲染方式:
TreeView<AbstractTreeNode> leftNodeTree = new TreeView<AbstractTreeNode>();
....
 leftNodeTree.setCellFactory(new Callback<TreeView<AbstractTreeNode>, TreeCell<AbstractTreeNode>>() {
            @Override
            public TreeCell<AbstractTreeNode> call(TreeView<AbstractTreeNode> param) {
                return new TreeCellImpl();
            }
        });

public class TreeCellImpl extends TreeCell<AbstractTreeNode> {
@Override
    public void updateItem(AbstractTreeNode item, boolean empty) {
        super.updateItem(item, empty);
        if (empty) {
            setText(null);
            setGraphic(null);
        } else {
            setText(item.getNodeText());
            setGraphic(item.getGraphic());
            if (item.getNodeType().equals(NodeType.TREE_CONFIG_NODE)) {
                setContextMenu(new TreeConfigContextMenu(this.getTreeView(), this.getTreeItem(), item));
            } else if (item.getNodeType().equals(NodeType.TREE_DETAIL_CONFIG_NODE)) {
                setContextMenu(new TreeDetailConfigContextMenu(this.getTreeView(), this.getTreeItem(), item));
            } else if (item.getNodeType().equals(NodeType.SHAREDATA_FIELDS_NODE)) {
//                setContextMenu(new TreeConfigContextMenu(item));
            }
        }
    }
}

class AbstractTreeNode {
    private String nodeId;
    private String nodeText;
    public String getNodeId() {
        return nodeId;
    }

    public void setNodeId(String nodeId) {
        this.nodeId = nodeId;
    }

     public String getNodeText() {
        return nodeText;
    }

    public void setNodeText(String nodeText) {
        this.nodeText = nodeText;
    }
分享到:
评论

相关推荐

    JavaFX 监听窗口关闭事件实例详解

    在JavaFX中,窗口(Stage)是场景(Scene)的容器,场景是实际的UI布局内容,如按钮、文本框等。开发JavaFX应用程序时,管理窗口的关闭事件是一项重要的任务,特别是在涉及到多线程时。在多线程环境下,如果程序退出...

    JavaFX2.x事件处理

    - **定义**:事件过滤器允许开发者在事件传递过程中拦截事件,并决定是否继续传递事件给下一个节点。 - **示例**:可以创建一个`EventHandler&lt;MouseEvent&gt;`实例,并将其添加到节点的`setOnMousePressed`方法中。 ##...

    javafx tableview鼠标触发更新属性详解

    在 JavaFX 中,我们可以使用鼠标触发事件来更新 TableView 的内容。例如,我们可以在鼠标滑过单元格时更新其内容,或者在鼠标点击单元格时触发编辑事件。下面是一个简单的示例代码: ```java public class ...

    JavaFX2.x 专题教程 之 事件处理

    - **事件源**:触发事件的对象,可能会随着事件传播路径的变化而变化。 - **目标**:事件发生的节点或最后一个节点,目标不会改变。 ##### 2.2 事件类型(EventTypes) 事件类型由`EventType`类表示。事件类型可以...

    JavaFX 教程 (中文).docx

    在这个过程中,你会了解到如何在JavaFX中使用各种控件,如TableView的行选择和ObservableLists的数据绑定,以及如何通过MVC模式分离业务逻辑和界面显示。此外,你还将掌握如何利用Scene Builder的拖放功能来快速搭建...

    javafx显示多个窗口以及javafx多窗口之间数据交互传输项目原文件

    JavaFX中的数据交互通常通过事件处理和公共变量来实现。事件处理是通过监听器实现的,当用户触发某个操作(如点击按钮)时,相应的事件处理器会被调用。例如,一个按钮的点击事件可以用来打开新窗口或传递数据。 `...

    javafx2.0 中文文档.zip

    此外,JavaFX还支持手势识别,如拖放操作和触摸事件,使得应用更具互动性。 除此之外,JavaFX 2.0的多媒体支持也是一大亮点。它内建了对音频和视频的播放支持,包括流媒体,开发者可以轻松地在应用中嵌入多媒体内容...

    JavaFx中的表格

    在JavaFX中,`TableView`是用于显示二维数据的组件,通常与数据模型(如`ObservableList`)绑定。在这个类中,你可以看到如何定义列(`TableColumn`),设置列头文本,以及定义数据如何与列关联。此外,`Customer...

    简单的JavaFx登陆

    在JavaFX中处理用户交互通常涉及事件处理。例如,当用户点击登录按钮时,会触发一个ActionEvent。我们可以通过为Button添加一个事件监听器,来实现处理用户输入的功能。监听器方法会在事件发生时被调用,通常会检查...

    JavaFx函数库[参照].pdf

    * MouseEvent:MouseEvent 是 JavaFx 中的鼠标事件类,提供了鼠标事件处理的功能。 * KeyEvent:KeyEvent 是 JavaFx 中的键盘事件类,提供了键盘事件处理的功能。 布局和对齐 * Layout:Layout 是 JavaFx 中的布局...

    JavaFX拖放操作示例

    在JavaFX中,实现这一功能主要依赖于`Dragboard`、`TransferMode`和事件处理器如`onDragDetected`、`onDragEntered`、`onDragExited`、`onDragOver`、`onDragDropped`以及`onDragDone`。 首先,我们需要定义源节点...

    javafx的一个完整demo

    3. **Scene和Stage**:在JavaFX中,Stage是应用程序的顶级窗口,而Scene则是Stage内显示的内容区域。一个Stage可以包含多个Scene,每个Scene有自己的布局和组件。 4. **FXML和控制器**:为了实现多窗口触发,可以...

    javaFX 图片放大缩小移动

    在JavaFX中,我们可以利用其丰富的图形和媒体处理能力来实现动态的图像操作,如放大、缩小和移动图片。本项目就是针对这些需求,提供了一个在JavaFX环境中能够同时进行图片缩放和移动的实例。 在JavaFX中,我们通常...

    JavaFx电子书HTML格式

    每个图形元素都是树形结构中的一个节点,这种结构允许高效地渲染和操作用户界面。 3. **FXML**: FXML是一种XML格式的文件,用于描述JavaFX用户界面的布局和控件。它允许将UI设计与业务逻辑分离,方便使用Java控制器...

    JavaFX中使用布局精简教程

    JavaFX中的布局管理器,被称为布局窗格(Pane),它们负责管理其子节点的位置和大小,能够适应窗口的缩放,并且提供了多种布局方式,如边框布局(BorderPane)、水平盒子布局(HBox)、垂直盒子布局(VBox)、网格...

    javaFX高级教程JavaFX2.0的FXML语言 中文文档

    在这个例子中,我们首先加载了 FXML 文件 `Sample.fxml`,并将其设置为场景的根节点。接下来创建了一个舞台,并设置了舞台的标题、场景以及显示。 #### 结论 通过这个简单的示例,我们可以看到 FXML 在创建复杂的...

    javaFX登陆和跳转

    本主题聚焦于JavaFX中的用户登录系统及其页面跳转机制。 在JavaFX中实现登录功能通常涉及以下步骤: 1. **创建UI组件**:首先,我们需要使用JavaFX的控件库来设计登录界面,这可能包括`Label`(用于提示信息)、`...

    JavaFX官方教程(中文版)

    2. **CSS样式和皮肤化**:JavaFX允许使用CSS来样式化和布局控件,这与Web开发中的CSS语法非常相似,降低了学习曲线,同时提高了应用程序的外观一致性。 3. **动态性和响应性**:JavaFX支持数据绑定和反应式编程,...

    在 JavaFx 中使用 JFreeChart 生成图表

    在JavaFX中,JFreeChart是一个非常有用的库,它允许开发者创建各种复杂的图表,如折线图、柱状图、饼图、散点图等。本文将深入探讨如何结合JavaFX与JFreeChart来实现图表的生成。 首先,我们需要了解JFreeChart库的...

Global site tag (gtag.js) - Google Analytics