Добавить узел в разделитель разделенной панели - PullRequest
0 голосов
/ 24 апреля 2020

Я пытаюсь найти решение, как добавить метку в разделитель разделенной области или, по крайней мере, создать иллюзию этого. Мой подход состоял в том, чтобы добавить три панели в разделенную панель и перетащить среднюю панель вместе с двумя разделителями. Проблема в том, что при быстрых движениях мыши средняя панель становится больше, но если я определяю максимальную высоту, то перетаскивание вообще не работает.

Мой вопрос заключается в том, есть ли способ прямой вставки метки на делитель или если у кого-то есть лучшее решение, как у меня, чтобы выполнить sh что-то вроде этого.

MWE:

Класс

public class MainSplit extends Application {

    @FXML
    private SplitPane splitPane;

    @FXML
    private Pane dividerPane;

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

    @Override
    public void start(Stage primaryStage) throws IOException {
        FXMLLoader loader = new FXMLLoader(getClass().getResource("/splitpane.fxml"));
        loader.setController(this);
        Parent root = loader.load();

        AtomicReference<Double> start = new AtomicReference<>((double) 0);
        dividerPane.setOnMousePressed(event -> {
            start.set((1.0 / splitPane.getScene().getHeight()) * event.getSceneY());
        });

        dividerPane.setOnMouseDragged(event -> {
            double p = (1.0 / splitPane.getScene().getHeight()) * event.getSceneY();
            double diff = p - start.get();
            start.set(p);

            double[] d = splitPane.getDividerPositions();
            splitPane.setDividerPosition(0, d[0] + diff);
            splitPane.setDividerPosition(1, d[1] + diff);
        });

        primaryStage.setScene(new Scene(root));
        primaryStage.show();
    }
}

F XML

<SplitPane fx:id="splitPane" dividerPositions="0.36, 0.43" orientation="VERTICAL" prefHeight="400.0" prefWidth="400.0"
           xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1">
    <AnchorPane/>
    <Pane fx:id="dividerPane" minHeight="-Infinity" prefHeight="20.0" style="-fx-background-color: #4545;">
        <cursor>
            <Cursor fx:constant="V_RESIZE"/>
        </cursor>
    </Pane>
    <AnchorPane/>
</SplitPane>
...