首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在javafx上知道tableview的动态创建按钮的行

在JavaFX中,要知道TableView动态创建按钮的行,可以通过以下步骤实现:

  1. 创建一个TableView对象,并定义表格的列和数据模型。
  2. 创建一个TableColumn对象,设置列的标题和数据提供器。
  3. 创建一个Callback对象,用于自定义单元格的显示和编辑。
  4. 在Callback对象的call方法中,根据数据模型创建一个按钮,并设置按钮的事件处理程序。
  5. 将Callback对象设置为TableColumn的CellFactory,以便在每个单元格中显示按钮。
  6. 将TableColumn添加到TableView中。
  7. 将数据添加到TableView中。

下面是一个示例代码,演示如何在JavaFX中实现动态创建按钮的行:

代码语言:java
复制
import javafx.application.Application;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TableCell;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javafx.util.Callback;

public class TableViewExample extends Application {

    public static class Person {
        private final SimpleStringProperty name;
        private final SimpleStringProperty action;

        public Person(String name, String action) {
            this.name = new SimpleStringProperty(name);
            this.action = new SimpleStringProperty(action);
        }

        public String getName() {
            return name.get();
        }

        public void setName(String name) {
            this.name.set(name);
        }

        public String getAction() {
            return action.get();
        }

        public void setAction(String action) {
            this.action.set(action);
        }
    }

    @Override
    public void start(Stage primaryStage) {
        TableView<Person> tableView = new TableView<>();
        ObservableList<Person> data = FXCollections.observableArrayList(
                new Person("John", "Edit"),
                new Person("Jane", "Delete"),
                new Person("Bob", "Save")
        );

        TableColumn<Person, String> nameColumn = new TableColumn<>("Name");
        nameColumn.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<Person, String>, ObservableValue<String>>() {
            @Override
            public ObservableValue<String> call(TableColumn.CellDataFeatures<Person, String> param) {
                return param.getValue().name;
            }
        });

        TableColumn<Person, String> actionColumn = new TableColumn<>("Action");
        actionColumn.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<Person, String>, ObservableValue<String>>() {
            @Override
            public ObservableValue<String> call(TableColumn.CellDataFeatures<Person, String> param) {
                return param.getValue().action;
            }
        });

        Callback<TableColumn<Person, String>, TableCell<Person, String>> cellFactory = new Callback<TableColumn<Person, String>, TableCell<Person, String>>() {
            @Override
            public TableCell<Person, String> call(TableColumn<Person, String> param) {
                final TableCell<Person, String> cell = new TableCell<Person, String>() {
                    final Button button = new Button();

                    @Override
                    public void updateItem(String item, boolean empty) {
                        super.updateItem(item, empty);
                        if (empty) {
                            setGraphic(null);
                        } else {
                            button.setText(item);
                            setGraphic(button);
                        }
                    }
                };

                cell.getStylesheets().add(getClass().getResource("button-cell.css").toExternalForm());
                return cell;
            }
        };

        actionColumn.setCellFactory(cellFactory);

        tableView.getColumns().addAll(nameColumn, actionColumn);
        tableView.setItems(data);

        VBox vbox = new VBox(tableView);
        Scene scene = new Scene(vbox);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

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

在上述示例代码中,我们创建了一个TableView对象,其中包含两列:Name和Action。Name列显示人名,Action列显示按钮。我们使用Callback对象来自定义Action列的单元格显示和编辑,通过updateItem方法来更新单元格的内容。在updateItem方法中,我们创建了一个按钮,并根据数据模型设置按钮的文本。然后,我们将按钮设置为单元格的图形。最后,我们将Callback对象设置为Action列的CellFactory,以便在每个单元格中显示按钮。

请注意,示例代码中的CSS文件"button-cell.css"用于设置按钮的样式,你可以根据需要自定义按钮的外观。

这是一个简单的示例,演示了如何在JavaFX中实现动态创建按钮的行。你可以根据实际需求进行修改和扩展。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券