有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java拆分窗格获取选定窗格

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

例如

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) 个答案

  1. # 1 楼答案

    我不知道有什么方法可以观察SplitPane的哪一侧被点击,但您当然可以在放置在每一侧的Node上注册一个侦听器

    下面的示例创建了一个非常简单的接口,在SplitPane两侧各有一个VBox。我们只需聆听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按钮将显示哪些详细信息

    最好在SplitPane的每个窗格中都有一个单独的Show按钮;对我来说,这似乎更“标准”