热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

JavafxListViewContextMenu

如何解决《JavafxListViewContextMenu》经验,为你挑选了1个好方法。

我已经看过一些以前的问题,但它们似乎只能点击列表视图中的任何地方点击将触发事件,我正在寻找一个只触发事件的解决方案,并在a时打开上下文菜单单击列表视图中的属性.



1> James_D..:

这实际上是重复的,但我找不到上一个问题.

您应该使用单元工厂并在单元格上设置上下文菜单.然后,您可以确保仅在非空单元格上设置上下文菜单.(这也让您有机会获得特定于项目的上下文菜单.)

这是一个简单的例子:

import javafx.application.Application;
import javafx.beans.binding.Bindings;
import javafx.scene.Scene;
import javafx.scene.control.ContextMenu;
import javafx.scene.control.ListCell;
import javafx.scene.control.ListView;
import javafx.scene.control.MenuItem;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;

public class ListViewContextMenuExample extends Application {

    @Override
    public void start(Stage primaryStage) {
        ListView listView = new ListView<>();
        listView.getItems().addAll("One", "Two", "Three");

        listView.setCellFactory(lv -> {

            ListCell cell = new ListCell<>();

            ContextMenu cOntextMenu= new ContextMenu();


            MenuItem editItem = new MenuItem();
            editItem.textProperty().bind(Bindings.format("Edit \"%s\"", cell.itemProperty()));
            editItem.setOnAction(event -> {
                String item = cell.getItem();
                // code to edit item...
            });
            MenuItem deleteItem = new MenuItem();
            deleteItem.textProperty().bind(Bindings.format("Delete \"%s\"", cell.itemProperty()));
            deleteItem.setOnAction(event -> listView.getItems().remove(cell.getItem()));
            contextMenu.getItems().addAll(editItem, deleteItem);

            cell.textProperty().bind(cell.itemProperty());

            cell.emptyProperty().addListener((obs, wasEmpty, isNowEmpty) -> {
                if (isNowEmpty) {
                    cell.setContextMenu(null);
                } else {
                    cell.setContextMenu(contextMenu);
                }
            });
            return cell ;
        });

        BorderPane root = new BorderPane(listView);
        primaryStage.setScene(new Scene(root, 250, 400));
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}


推荐阅读
author-avatar
perfect--林榆盛
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有