JavaFX tableview 启用和禁用行选择

阿楚摇滚

作为我项目的一部分,我想显示一个应该禁用一段时间的 tableview(在编辑时间 nb:不是 table 编辑)。所以我得到了一个将禁用 tableview 的工作代码。这是工作代码,

table.setSelectionModel(null);

所以我的问题是在单击一个按钮时编辑过程结束后我想重新启用它,但不幸的是我找不到任何替代代码。任何人请建议我启用行选择的代码。任何答案都会可观的。

詹姆斯_D

您可以在创建表时检索默认选择模型:

TableView<T> table = new TableView<>();
TableViewSelectionModel<T> defaultSelectionModel = table.getSelectionModel();

T你的表的类型在哪里(当然,如果您使用 FXML,只需将第二行放在控制器的initialize()方法中。)

然后禁用行选择做

table.setSelectionModel(null);

并再次启用它

table.setSelectionModel(defaultSelectionModel);

这是一个 SSCCE:

import java.util.function.Function;

import javafx.application.Application;
import javafx.beans.property.Property;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.CheckBox;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TableView.TableViewSelectionModel;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;

public class TableWithDisabledSelection extends Application {

    @Override
    public void start(Stage primaryStage) {

        TableView<Person> table = new TableView<>();
        TableViewSelectionModel<Person> defaultSelectionModel = table.getSelectionModel();

        table.getColumns().add(column("First Name", Person::firstNameProperty));
        table.getColumns().add(column("Last Name", Person::lastNameProperty));
        table.getColumns().add(column("Email", Person::emailProperty));

        table.getItems().addAll(
                new Person("Jacob", "Smith", "[email protected]"),
                new Person("Isabella", "Johnson", "[email protected]"),
                new Person("Ethan", "Williams", "[email protected]"),
                new Person("Emma", "Jones", "[email protected]"),
                new Person("Michael", "Brown", "[email protected]") 
        );

        CheckBox enableSelection = new CheckBox("Enable selection");
        enableSelection.setSelected(true);
        enableSelection.selectedProperty().addListener((obs, wasSelected, isNowSelected) -> {

            if (isNowSelected) {
                table.setSelectionModel(defaultSelectionModel);
            } else {
                table.setSelectionModel(null);
            }


        });

        BorderPane root = new BorderPane(table);
        BorderPane.setAlignment(enableSelection, Pos.CENTER);
        BorderPane.setMargin(enableSelection, new Insets(5));
        root.setBottom(enableSelection);

        primaryStage.setScene(new Scene(root, 600, 600));
        primaryStage.show();
    }

    private <S,T> TableColumn<S,T> column(String title, Function<S,Property<T>> prop) {
        TableColumn<S,T> col = new TableColumn<>(title);
        col.setCellValueFactory(cellData -> prop.apply(cellData.getValue()));
        return col ;
    }

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

    public static class Person {

        private final StringProperty firstName = new SimpleStringProperty();
        private final StringProperty lastName = new SimpleStringProperty();
        private final StringProperty email = new SimpleStringProperty();

        public Person(String firstName, String lastName, String email) {
            setFirstName(firstName);
            setLastName(lastName);
            setEmail(email);
        }

        public final StringProperty firstNameProperty() {
            return this.firstName;
        }


        public final String getFirstName() {
            return this.firstNameProperty().get();
        }


        public final void setFirstName(final String firstName) {
            this.firstNameProperty().set(firstName);
        }


        public final StringProperty lastNameProperty() {
            return this.lastName;
        }


        public final String getLastName() {
            return this.lastNameProperty().get();
        }


        public final void setLastName(final String lastName) {
            this.lastNameProperty().set(lastName);
        }


        public final StringProperty emailProperty() {
            return this.email;
        }


        public final String getEmail() {
            return this.emailProperty().get();
        }


        public final void setEmail(final String email) {
            this.emailProperty().set(email);
        }

    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

JavaFX:如何禁用TableView中的行?

来自分类Dev

JavaFX更改TableView选择行栏的蓝色

来自分类Dev

SceneBuilder中的JavaFX和TableView

来自分类Dev

检测双击TableView JavaFX的行

来自分类Dev

如何删除JavaFx TableView行

来自分类Dev

在JavaFX中禁用对TableView中某些TableRow项的选择

来自分类Dev

启用排序时的 JavaFX Tableview 标题颜色

来自分类Dev

JAVAFX:TableView获取多个选择数据

来自分类Dev

如何检测JavaFX TableView中选择的列?

来自分类Dev

JavaFX TableView:选择整个TableColumn并获取索引

来自分类Dev

JavaFX通过使用ComboBox选择填充TableView

来自分类Dev

colspan和rowspan用于JavaFX中的tableview

来自分类Dev

JavaFX TableView的String []列和String [] []值

来自分类Dev

colspan和rowspan用于JavaFX中的tableview

来自分类Dev

JavaFX中的TableView和微调器

来自分类Dev

javaFX tableview 和 sqlite 的内存泄漏

来自分类Dev

在JavaFX中汇总特定的TableView列/行

来自分类Dev

javafx tableview如何获取我单击的行?

来自分类Dev

JavaFX如何从Tableview获取选定行的数据

来自分类Dev

JavaFX tableview删除默认的备用行颜色

来自分类Dev

如何使用javaFx更新TableView行

来自分类Dev

如何在JavaFX tableview中侦听对行的取消选择?

来自分类Dev

在TableView中禁用行选择

来自分类Dev

JavaFX TableView:从表中删除/禁用 scollbars(使用 ScrollPane 代替)

来自分类Dev

如果在TableView JavaFx中选择了多行,则禁用某些上下文菜单项

来自分类Dev

如果在TableView JavaFx中选择了多行,则禁用某些上下文菜单项

来自分类Dev

带有复选框的Javafx 8 Tableview选择

来自分类Dev

带有ChangeListener的JavaFX TableView用于多项选择

来自分类Dev

JavaFX 8-绑定TableView选择模型属性

Related 相关文章

热门标签

归档