JavaFX:setMouseTransparent和setPickOnBounds问题

时间:2018-02-14 10:31:14

标签: java javafx mouseevent transparency

我的JavaFX布局有一个TabPane。每个选项卡都包含一个AnchorPane,在此内部包含一个SplitPane。我想要达到的目的是:使用 setMouseTransparent(true) 使SplitPane无法调整大小。这显然有效,但正如JavaDoc所指出的那样:

  

如果为true,则此节点(及其所有子节点)对鼠标事件完全透明。选择鼠标事件的目标时,将mouseTransparent设置为true的节点及其子树不会被考虑在内。

这对我来说是一个问题,因为我的SplitPane中有节点,我希望能够与之交互(即:按钮; ...)。 环顾四周,我发现了几个关于类似问题的答案很好的问题,两者都暗示在父节点上使用 node.setPickOnBounds(false) 。就我而言,父母将是SplitPane 太糟糕了,这对我不起作用。

首先,这些是我读过的两个问题:
JavaFX: How to make a Node partially mouse transparent?
Mouse Events get Ignored on the Underlying Layer

其次,我的JavaFX场景的截图:

SplitPanes

最后,我的JavaFX控制器的代码片段。

public class MainViewController extends AbstractController implements Initializable {

    @FXML private SplitPane splitPanelConnectionSettings;
    @FXML private Button buttonStartApache;
    @FXML private Button buttonStartMySQL;
    @FXML private Button buttonStartDataParser;

    @Override
    public void initialize(URL url, ResourceBundle rb) {

        splitPanelConnectionSettings.setMouseTransparent(true);
        splitPanelConnectionSettings.setPickOnBounds(false);

        buttonStartApache.setOnAction((event) -> {
            // Creating a new FXML object and binding to it the relative "*.fxml" resource file.
            FXMLLoader loader = new FXMLLoader();
            fxmlLoader(loader, FXML_START_APACHE_POPUP_PATH);
        });

        buttonStartMySQL.setOnAction((event) -> {
            // Creating a new FXML object and binding to it the relative "*.fxml" resource file.
            FXMLLoader loader = new FXMLLoader();
            fxmlLoader(loader, FXML_START_MYSQL_POPUP_PATH);
        });

        buttonStartDataParser.setOnAction((event) -> {
            // Creating a new FXML object and binding to it the relative "*.fxml" resource file.
            FXMLLoader loader = new FXMLLoader();
            fxmlLoader(loader, FXML_START_DATA_PARSER_POPUP_PATH);
        });

        buttonResetLastMessageID.setOnAction((event) -> {
            // Creating a new FXML object and binding to it the relative "*.fxml" resource file.
            FXMLLoader loader = new FXMLLoader();
            fxmlLoader(loader, FXML_RESET_LAST_MID_POPUP_PATH);
        });
    }

    ...

}

使用

splitPanelConnectionSettings.setMouseTransparent(true);
splitPanelConnectionSettings.setPickOnBounds(false);

不打算做这项工作。 SplitPane无法调整大小,但即使我已将 setPickOnBounds 设置为 false ,其所有子项也无法点击。 任何提示?

0 个答案:

没有答案