首页 > 解决方案 > JavaFX Listview - 双击禁用编辑?

问题描述

我的应用程序中有一个 esitable 列表视图,它应该只在按下外部按钮时切换到编辑模式。但是当我使列表视图可编辑时,当我在列表单元上双击时,也会触发编辑事件。当我双击它时,如何防止列表单元切换到编辑模式?

标签: javajavafx

解决方案


使其ListView不可编辑,并且仅将其设置为可编辑以在按下按钮时编辑选定的单元格。

另请注意,当未选择任何项目时,如何通过绑定禁用按钮。

查看 MCVE 中的编辑方法:

控制器.java

import javafx.beans.binding.Bindings;
import javafx.collections.FXCollections;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.ListView;
import javafx.scene.control.cell.TextFieldListCell;

public class Controller {
    @FXML
    private ListView<String> list;

    @FXML
    private Button editSelectedItem;

    public void initialize() {
        list.setCellFactory(TextFieldListCell.forListView());
        list.setEditable(false);
        list.setItems(FXCollections.observableArrayList("a", "b", "c"));

        editSelectedItem.disableProperty().bind(Bindings.createBooleanBinding(
                () -> list.getSelectionModel().isEmpty(),
                list.getSelectionModel().getSelectedItems()
        ));
    }

    @FXML
    public void edit(final ActionEvent event) {
        if (!list.getSelectionModel().isEmpty()) {
            list.setEditable(true);
            list.edit(list.getSelectionModel().getSelectedIndex());
            list.setEditable(false);
        }
    }
}

主.java

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class Main extends Application {

    @Override
    public void start(final Stage primaryStage) throws Exception {
        final Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
        primaryStage.setScene(new Scene(root));
        primaryStage.show();
    }

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

示例.fxml

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ListView?>
<?import javafx.scene.layout.VBox?>
<VBox fx:controller="Controller"
      xmlns:fx="http://javafx.com/fxml">
    <ListView fx:id="list"/>
    <Button onAction="#edit" text="Edit selected item" fx:id="editSelectedItem"/>
</VBox>

推荐阅读