Панель JavaFx в стеке не отвечает на MouseTransparent или PickOnBounds - PullRequest
0 голосов
/ 27 мая 2020

У меня есть SplitPane и Pane вместе в стеке. Панель находится под SplitPane в стеке, а средняя SplitPane - это прозрачная AnchorPane. Я намерен запустить событие, которое dr aws кружит на нижней панели, когда я щелкаю где-нибудь в области центральной панели, но я не могу запустить событие, щелкнув по панели.

(РЕДАКТИРОВАТЬ: это событие мыши должно исходить из панели, а не из панели привязки, потому что мне также нужны нарисованные фигуры для ответа на щелчки.)

У меня есть прочтите здесь сообщения об этом, и большинство решений включают MouseTransparent и PickOnBounds. Я пробовал то, что похоже на каждую комбинацию этих свойств в центральной AnchorPane, ее дочерней метке и базовой панели, где нужно нарисовать круг, но безрезультатно. Любая помощь приветствуется! :)

Вот два изображения физического макета и иерархии в построителе сцен. Синий индикатор - это нижележащая панель. Это видно, потому что центральная панель AnchorPane прозрачна.

Image 1 Image 2

1 Ответ

0 голосов
/ 27 мая 2020

Обновление: Вы можете использовать setMouseTransparent (true / false) для разделенной панели переднего плана при входе / выходе из центральной панели привязки с помощью мыши, например, это:

Класс контроллера:

package sample;

import javafx.fxml.FXML;
import javafx.scene.control.SplitPane;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Ellipse;

public class Controller {

    @FXML
    private Pane
            backgroundPane;
    @FXML
    private SplitPane
            foregroundSplitPane;

    @FXML
    public void handleBackgroundPaneOnMouseClick() {
        // Create and add an ellipse:
        Ellipse ellipse = new Ellipse();
        ellipse.setRadiusX(50);
        ellipse.setRadiusY(50);
        ellipse.setFill(Color.BLACK);
        ellipse.setLayoutX((backgroundPane.getWidth() / 2));
        ellipse.setLayoutY((backgroundPane.getHeight() / 2));
        backgroundPane.getChildren().add(ellipse);
    }

    @FXML
    public void handleCenterAnchorPaneOnMouseEntered() {
        foregroundSplitPane.setMouseTransparent(true);
    }

    @FXML
    public void handleCenterAnchorPaneOnMouseExited() {
        foregroundSplitPane.setMouseTransparent(false);
    }
}

F XML Файл:

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.SplitPane?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.Pane?>
<?import javafx.scene.layout.StackPane?>

<StackPane prefHeight="150.0" prefWidth="200.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Controller">
   <children>
      <Pane fx:id="backgroundPane" onMousePressed="#handleBackgroundPaneOnMouseClick" style="-fx-background-color: blue;" />
      <SplitPane fx:id="foregroundSplitPane" dividerPositions="0.1, 0.9" style="-fx-background-color: rgba(255,255,255,0);">
        <items>
          <AnchorPane style="-fx-background-color: tomato;" />
          <AnchorPane onMouseEntered="#handleCenterAnchorPaneOnMouseEntered" onMouseExited="#handleCenterAnchorPaneOnMouseExited" style="-fx-background-color: rgba(255,255,255,0);" />
            <AnchorPane style="-fx-background-color: tomato;" />
        </items>
      </SplitPane>
   </children>
</StackPane>

Предварительный просмотр:

start

after click on center pane

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