TabPane下的全局表-JavaFX

问题描述 投票:0回答:1

我正在阅读有关表的Oracle教程,并在此代码中实现了自己的tabPane。我想要的是将表变成全局表,因此当我转到选项卡2时,它与选项卡1完全相同,只是与编辑全部相比,我可以编辑选项卡2中的某些列在标签1中。

无论如何,可以这样做,而不是基本上复制代码并创建第二个表,我认为这很乏味,因为我不想要两个表,我想要一个全局表。

public class TableSample extends Application {

    private TableView<Person> table = new TableView<Person>();
    private final ObservableList<Person> data =
            FXCollections.observableArrayList(
            new Person("Jacob", "Smith", "[email protected]"),
            new Person("Isabella", "Johnson", "[email protected]"));

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

    private TableView table = new TableView();

    public void start(Stage stage) {
        Scene scene = new Scene(new Group());

        TabPane tabPane = new TabPane();

        Tab tab1 = new Tab("Tab 1");
        tabPane.getTabs().add(tab1);

        Tab tab2 = new Tab("Tab 2");
        tabPane.getTabs().add(tab2);

        table.setEditable(true);

        TableColumn firstNameCol = new TableColumn("First Name");
        firstNameCol.setCellValueFactory(
                new PropertyValueFactory<Person, String>("firstName"));
        firstNameCol.setCellFactory(TextFieldTableCell.forTableColumn());
        firstNameCol.setOnEditCommit(
            new EventHandler<CellEditEvent<Person, String>>() {
                @Override
                public void handle(CellEditEvent<Person, String> t) {
                    ((Person) t.getTableView().getItems().get(
                            t.getTablePosition().getRow())
                            ).setFirstName(t.getNewValue());
                }
            }
        );

        TableColumn lastNameCol = new TableColumn("Last Name");
        lastNameCol.setCellValueFactory(
                new PropertyValueFactory<Person, String>("lastName"));
        lastNameCol.setCellFactory(TextFieldTableCell.forTableColumn());
        lastNameCol.setOnEditCommit(
            new EventHandler<CellEditEvent<Person, String>>() {
                @Override
                public void handle(CellEditEvent<Person, String> t) {
                    ((Person) t.getTableView().getItems().get(
                        t.getTablePosition().getRow())
                        ).setLastName(t.getNewValue());
                }
            }
        );

        TableColumn emailCol = new TableColumn("Email");
        emailCol.setCellValueFactory(
                new PropertyValueFactory<Person, String>("email"));
        emailCol.setCellFactory(TextFieldTableCell.forTableColumn());
        emailCol.setOnEditCommit(
            new EventHandler<CellEditEvent<Person, String>>() {
                @Override
                public void handle(CellEditEvent<Person, String> t) {
                    ((Person) t.getTableView().getItems().get(
                        t.getTablePosition().getRow())
                        ).setEmail(t.getNewValue());
                }
            }
        );

        table.setItems(data);
        table.getColumns().addAll(firstNameCol, lastNameCol, emailCol);

        final VBox vbox = new VBox();
        vbox.getChildren().addAll(tabPane, table);

        ((Group) scene.getRoot()).getChildren().addAll(vbox);

        stage.setScene(scene);
        stage.show();
    }

    public static class Person {

        private final SimpleStringProperty firstName;
        private final SimpleStringProperty lastName;
        private final SimpleStringProperty email;

        private Person(String fName, String lName, String email) {
            this.firstName = new SimpleStringProperty(fName);
            this.lastName = new SimpleStringProperty(lName);
            this.email = new SimpleStringProperty(email);
        }

        public String getFirstName() {
            return firstName.get();
        }

        public void setFirstName(String fName) {
            firstName.set(fName);
        }

        public String getLastName() {
            return lastName.get();
        }

        public void setLastName(String fName) {
            lastName.set(fName);
        }

        public String getEmail() {
            return email.get();
        }

        public void setEmail(String fName) {
            email.set(fName);
        }
    }
} 
java javafx tableview tabpanel
1个回答
0
投票

您的代码结构已正确设置。您只需要将Nodes添加到其他Tabs

Key Code:您需要为每个Tab添加一个根节点。每个根节点将包含赋予其每个Tab外观的其他节点。

    Tab tab1 = new Tab("Tab 1");
    Label tab1Label = new Label("Use tab1Root to add nodes for tab1!");
    StackPane tab1Root = new StackPane(tab1Label);
    tab1Root.setPrefSize(500, 500);
    tab1.setContent(tab1Root);
    tabPane.getTabs().add(tab1);

    Tab tab2 = new Tab("Tab 2");
    Button tab2Button = new Button("Press Me!");
    tab2Button.setOnAction((event) -> {
        System.out.println("Use tab2Root to add nodes for tab2!");
    });
    StackPane tab2Root = new StackPane(tab2Button);
    tab2Root.setPrefSize(500, 500);
    tab2.setContent(tab2Root);
    tabPane.getTabs().add(tab2);

完整代码

import javafx.application.Application;
import javafx.beans.property.SimpleStringProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.Tab;
import javafx.scene.control.TabPane;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TreeTableColumn.CellEditEvent;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.control.cell.TextFieldTableCell;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class TestingGround extends Application
{
    private TableView<Person> table = new TableView<Person>();
    private final ObservableList<Person> data
            = FXCollections.observableArrayList(
                    new Person("Jacob", "Smith", "[email protected]"),
                    new Person("Isabella", "Johnson", "[email protected]"));

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

    public void start(Stage stage)
    {
        Scene scene = new Scene(new Group());

        TabPane tabPane = new TabPane();

        Tab tab1 = new Tab("Tab 1");
        Label tab1Label = new Label("Use tab1Root to add nodes for tab1!");
        StackPane tab1Root = new StackPane(tab1Label);
        tab1Root.setPrefSize(500, 500);
        tab1.setContent(tab1Root);
        tabPane.getTabs().add(tab1);

        Tab tab2 = new Tab("Tab 2");
        Button tab2Button = new Button("Press Me!");
        tab2Button.setOnAction((event) -> {
            System.out.println("Use tab2Root to add nodes for tab2!");
        });
        StackPane tab2Root = new StackPane(tab2Button);
        tab2Root.setPrefSize(500, 500);
        tab2.setContent(tab2Root);
        tabPane.getTabs().add(tab2);

        table.setEditable(true);

        TableColumn firstNameCol = new TableColumn("First Name");
        firstNameCol.setCellValueFactory(
                new PropertyValueFactory<Person, String>("firstName"));
        firstNameCol.setCellFactory(TextFieldTableCell.forTableColumn());
        firstNameCol.setOnEditCommit(
                new EventHandler<CellEditEvent<Person, String>>()
        {
            @Override
            public void handle(CellEditEvent<Person, String> t)
            {
//                ((Person) t.getTableView().getItems().get(
//                        t.getTablePosition().getRow())).setFirstName(t.getNewValue());
            }
        }
        );

        TableColumn lastNameCol = new TableColumn("Last Name");
        lastNameCol.setCellValueFactory(
                new PropertyValueFactory<Person, String>("lastName"));
        lastNameCol.setCellFactory(TextFieldTableCell.forTableColumn());
        lastNameCol.setOnEditCommit(
                new EventHandler<CellEditEvent<Person, String>>()
        {
            @Override
            public void handle(CellEditEvent<Person, String> t)
            {
//                ((Person) t.getTableView().getItems().get(
//                        t.getTablePosition().getRow())).setLastName(t.getNewValue());
            }
        }
        );

        TableColumn emailCol = new TableColumn("Email");
        emailCol.setCellValueFactory(
                new PropertyValueFactory<Person, String>("email"));
        emailCol.setCellFactory(TextFieldTableCell.forTableColumn());
        emailCol.setOnEditCommit(
                new EventHandler<CellEditEvent<Person, String>>()
        {
            @Override
            public void handle(CellEditEvent<Person, String> t)
            {
//                ((Person) t.getTableView().getItems().get(
//                        t.getTablePosition().getRow())).setEmail(t.getNewValue());
            }
        }
        );

        table.setItems(data);
        table.getColumns().addAll(firstNameCol, lastNameCol, emailCol);

        final VBox vbox = new VBox();
        vbox.getChildren().addAll(tabPane, table);

        ((Group) scene.getRoot()).getChildren().addAll(vbox);

        stage.setScene(scene);
        stage.show();
    }

    public static class Person
    {

        private final SimpleStringProperty firstName;
        private final SimpleStringProperty lastName;
        private final SimpleStringProperty email;

        private Person(String fName, String lName, String email)
        {
            this.firstName = new SimpleStringProperty(fName);
            this.lastName = new SimpleStringProperty(lName);
            this.email = new SimpleStringProperty(email);
        }

        public String getFirstName()
        {
            return firstName.get();
        }

        public void setFirstName(String fName)
        {
            firstName.set(fName);
        }

        public String getLastName()
        {
            return lastName.get();
        }

        public void setLastName(String fName)
        {
            lastName.set(fName);
        }

        public String getEmail()
        {
            return email.get();
        }

        public void setEmail(String fName)
        {
            email.set(fName);
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.