SplitPane获取选定窗格

时间:2019-03-27 08:48:08

标签: java javafx

我有一个拆分窗格,每个拆分窗格都包含一个带有表视图的锚定窗格(paneA paneB)。通过单击“显示”按钮,我想根据拆分窗格的选定侧打开一个新视图。

E.G。

Pane A     |    Pane B
patient 1  |    patient a
patient 2  |    patient b

(ShowButon)

我的想象。

private void showButton(ActionEvent e) {
  if (is selected paneA){
     get selected row
     open view conataining information from selected row paneA
  else if (is selected paneB) {
     get selected row
     open view conaining information from selected row paneB
  }
}

例如,对于选项卡视图,您可以轻松获取所选的选项卡。现在,这样的分割窗格可能会出现这种情况吗?

我希望现在可以更容易理解了。

预先感谢

1 个答案:

答案 0 :(得分:-1)

我不知道观看SplitPane的哪一侧被单击的任何方法,但是您当然可以在放置在每一侧的Node上注册一个侦听器。

下面的示例创建了一个非常简单的界面,在两个VBox的每一侧都有一个SplitPane。我们只需要听对VBox的点击并做出相应的响应:

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.SplitPane;
import javafx.scene.layout.Priority;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class PaneSelectionExample extends Application {

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

    @Override
    public void start(Stage primaryStage) {

        // Simple interface
        VBox root = new VBox(5);
        root.setPadding(new Insets(10));
        root.setAlignment(Pos.CENTER);

        SplitPane splitPane = new SplitPane();
        VBox.setVgrow(splitPane, Priority.ALWAYS);

        // Two VBoxes with Labels
        VBox box1 = new VBox() {{
            setAlignment(Pos.TOP_CENTER);
            getChildren().addAll(
                    new Label("One"),
                    new Label("Two"),
                    new Label("Three")
            );
        }};

        VBox box2 = new VBox() {{
            setAlignment(Pos.TOP_CENTER);
            getChildren().addAll(
                    new Label("One"),
                    new Label("Two"),
                    new Label("Three")
            );
        }};

        // Now, we'll add an EventListener to each child pane in the SplitPane to determine which
        // has been clicked
        box1.setOnMouseClicked(event -> System.out.println("Left Pane clicked!"));
        box2.setOnMouseClicked(event -> System.out.println("Right Pane clicked!"));

        // Add our VBoxes to the SplitPane
        splitPane.getItems().addAll(box1, box2);

        root.getChildren().add(splitPane);

        // Show the Stage
        primaryStage.setWidth(300);
        primaryStage.setHeight(300);
        primaryStage.setScene(new Scene(root));
        primaryStage.show();
    }
}

传入意见警报

尽管这可能解决了您的紧迫问题,但您可能希望重新考虑只使用一个Show按钮的决定。用户是否会期望并了解Show按钮将显示哪些详细信息?

Show的每个窗格中都有一个单独的SplitPane按钮可能是一个更好的主意;对我来说,这似乎更“标准”。