我有一个位于BorderPane(位于左侧)的VBox,因此它会自动调整为完整的BorderPane高度。我在这个VBox中放置了一些面板,但它们没有占据整个高度,这意味着底部有一些空的空间。 BorderPane又在StackPane中,因此在它下面有层。
我想要的是在这个空白区域中点击鼠标,将其传递到BorderPane下面的窗格。网络搜索让我相信,正确的做法是让VBox透明化,并将其设置为pickOnBounds="false"
。
我试图用style="-fx-background-color: rgba(0,0,0,0);"
和opacity="0"
使VBox透明,但都没有产生所需的效果 - 似乎即使透明pickOnBounds="false"
,VBox仍然会消耗鼠标空白区域内的事件,并且不允许它们通过StackPane进入下一层。
以下FXML说明了这个问题。两个切换按钮位于StackPane的底层。在左侧,按钮被VBox覆盖,无法单击。在右侧,按钮被AnchorPane覆盖,可以单击它。
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<StackPane fx:id="stackPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
<children>
<AnchorPane fx:id="anchorPane">
<children>
<ToggleButton mnemonicParsing="false" text="ToggleButton under VBox" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" />
<ToggleButton mnemonicParsing="false" text="ToggleButton under AnchorPane" AnchorPane.bottomAnchor="0.0" AnchorPane.rightAnchor="0.0" />
</children>
</AnchorPane>
<BorderPane fx:id="borderPane" pickOnBounds="false" prefHeight="200.0" prefWidth="200.0">
<left>
<VBox fx:id="vBox" pickOnBounds="false" prefHeight="200.0" prefWidth="400.0" style="-fx-background-color: rgba(0,0,0,0);" BorderPane.alignment="CENTER">
<children>
<TitledPane animated="false" text="untitled">
<content>
<AnchorPane fx:id="pane1" minHeight="0.0" minWidth="0.0" prefHeight="100.0" prefWidth="400.0" />
</content>
</TitledPane>
<TitledPane animated="false" text="untitled">
<content>
<AnchorPane fx:id="pane2" minHeight="0.0" minWidth="0.0" prefHeight="100.0" prefWidth="400.0" />
</content>
</TitledPane>
</children>
</VBox>
</left>
<center>
<AnchorPane pickOnBounds="false" prefHeight="200.0" prefWidth="200.0" BorderPane.alignment="CENTER" />
</center>
</BorderPane>
</children>
</StackPane>
此问题是否有解决方法?
答案 0 :(得分:1)
写:
-fx-background-color: null;
而不是:
-fx-background-color: rgba(0,0,0,0);
我不知道为什么在这种情况下将背景设置为null而不透明(因为我预期透明背景也可以正常工作)。