如何从Tabpane JavaFX中的Tab获取数据

时间:2017-12-20 01:28:03

标签: javafx

我想从Tabpane JavaFX中的Tab获取数据

我在Tabpane中有2个Tab,而每个Tab我有一个TextArea,我想点击Button会从2个标签中获取数据

enter image description here

enter image description here

这是我的代码:

btnThem.setOnAction(new EventHandler<ActionEvent>() {
    @Override
    public void handle(ActionEvent event) {
        try {
            i++;
            FXMLLoader fxmlLoader = new FXMLLoader(
                    getClass().getResource("/fxml/tab.fxml"));
            Parent parent = (Parent) fxmlLoader.load();
            Tab tab = new Tab("Điểm " + i);
            tab.setContent(parent);
            tab.setClosable(true);
            tabPane.getTabs().add(tab);
            controllerTab = (ControllerTab) fxmlLoader.getController();

        } catch (IOException ex) {
            Exceptions.printStackTrace(ex);
        }
    }
});

1 个答案:

答案 0 :(得分:0)

您的问题含糊不清,但似乎您希望从textArea中的每个tab获取数据。为此,您应该从每个{{1}获取nodes (children)使用tab我们确认并将lookup()解析为node。我试图找出您的textArea并制作此示例来帮助您:

scene

你可以看到结果:

Data in tab1

Data in tab2

enter image description here

public class example extends Application {

        TextArea textArea = new TextArea();
        TextArea textArea1 = new TextArea();
        Button button = new Button("button");

        @Override
        public void start(Stage primaryStage) {
            Tab tab1 = new Tab("tab1");
            Tab tab2 = new Tab("tab2");
            tab1.setContent(textArea);
            tab2.setContent(textArea1);
            TabPane pane = new TabPane();
            pane.getTabs().addAll(tab1, tab2);
            Node node1 = tab1.getContent();
            Node node2 = tab2.getContent();

            button.setOnAction((ActionEvent event) -> {
                if (node1.lookup("TextArea") != null && node2.lookup("TextArea") != null) {
                    TextArea area1 = (TextArea) node1.lookup("TextArea");
                    TextArea area2 = (TextArea) node2.lookup("TextArea");

                    System.out.println(area1.getText() + "   " + area2.getText());

                }
            });

            VBox root = new VBox();
            root.setAlignment(Pos.TOP_RIGHT);
            root.getChildren().add(pane);
            root.getChildren().add(button);

            Scene scene = new Scene(root, 300, 250);
            primaryStage.setTitle("Hello World!");
            primaryStage.setScene(scene);
            primaryStage.show();
        }

        /**
         * @param args the command line arguments
         */
        public static void main(String[] args) {
            launch(args);
        }

    }