SplitPane получить выбранную панель - PullRequest
0 голосов
/ 27 марта 2019

У меня есть разделенная панель, каждая из которых содержит опорную панель с таблицей (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 Ответ

0 голосов
/ 28 марта 2019

Я не знаю ни одного способа посмотреть, на какой стороне 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;это кажется мне более «стандартным».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...