Java AnchorPane元素忽略鼠标单击

Java AnchorPane元素忽略鼠标单击,java,javafx,fxml,Java,Javafx,Fxml,我初始化了一些元素,但不是我的锚窗格: AnchorPane root = new AnchorPane(listLoader.load(), textareaLoader.load(), fieldLoader.load(), menuLoader.load(), buttonLoader.load()); 但是,当我尝试单击菜单栏或列表视图时,它不起作用。例如,在本例中,我可以单击按钮(可能),因为它是我在AnchorPane构造函数中初始化的最后一个元素。我无法使用边框窗格或任何其他布局

我初始化了一些元素,但不是我的锚窗格:

AnchorPane root = new AnchorPane(listLoader.load(), textareaLoader.load(), fieldLoader.load(), menuLoader.load(), buttonLoader.load());
但是,当我尝试单击菜单栏或列表视图时,它不起作用。例如,在本例中,我可以单击按钮(可能),因为它是我在AnchorPane构造函数中初始化的最后一个元素。我无法使用边框窗格或任何其他布局,因此我需要找到具有此配置的解决方案。 这些是我的fxml文件:

list.fxml

<AnchorPane xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="mailbox.ListController">
<children>
    <AnchorPane> 
        <children>
            <ListView fx:id="listView" layoutX="1.0" layoutY="31.0" prefHeight="371.0" prefWidth="239.0" />
        </children>
    </AnchorPane> 
</children>
<AnchorPane xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8" fx:controller="mailbox.MenuBarController">
<children>
    <AnchorPane> 
        <children>
            <MenuBar fx:id="menuBar" layoutX="0.0" layoutY="0.0">
                <menus>
                    <Menu text="File">
                        <items>
                            <MenuItem onAction="#elimina" text="Elimina" />
                        </items>
                    </Menu>
                    <Menu text="Cambia Account">
                        <items>
                            <MenuItem fx:id="email1" text="filippo@hotmail.it" />
                            <MenuItem fx:id="email2" text="giancarlo@yahoo.it" />
                            <MenuItem fx:id="email3" text="alessandro@gmail.it" />
                        </items>
                    </Menu>
                </menus>
            </MenuBar>
        </children>
    </AnchorPane>
</children>
<AnchorPane xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8" fx:controller="mailbox.TextAreaController">
<children>
    <AnchorPane> 
        <children>
            <TextArea fx:id="textarea" editable="false" layoutX="246.0" layoutY="255.0" prefHeight="144.0" prefWidth="350.0" />
        </children>
    </AnchorPane>
</children>
<AnchorPane xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="mailbox.ButtonController">
<children>
    <AnchorPane> 
        <children>
            <Button id="scrivi" layoutX="268.0" layoutY="200.0" mnemonicParsing="false" prefHeight="27.0" prefWidth="65.0" text="Scrivi" />
            <Button id="reply" layoutX="342.0" layoutY="200.0" mnemonicParsing="false" prefHeight="27.0" prefWidth="65.0" text="Reply" />
            <Button id="replyall" layoutX="420.0" layoutY="200.0" mnemonicParsing="false" prefHeight="27.0" prefWidth="75.0" text="Reply-All" />
            <Button id="forward" layoutX="511.0" layoutY="200.0" mnemonicParsing="false" prefHeight="27.0" prefWidth="75.0" text="Forward" />
        </children>
    </AnchorPane>
</children>
<AnchorPane mouseTransparent="false" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="mailbox.TextFieldController">
<children>
    <AnchorPane> 
        <children>
            <TextField fx:id="id" editable="false" layoutX="355.0" layoutY="39.0" mouseTransparent="false" prefHeight="27.0" prefWidth="35.0" />
            <TextField fx:id="mitt" editable="false" layoutX="355.0" layoutY="72.0" mouseTransparent="false" prefHeight="27.0" prefWidth="182.0" />
            <TextField fx:id="dest" editable="false" layoutX="355.0" layoutY="108.0" mouseTransparent="false" prefHeight="27.0" prefWidth="182.0" />
            <TextField fx:id="oggetto" editable="false" layoutX="355.0" layoutY="144.0" mouseTransparent="false" prefHeight="27.0" prefWidth="182.0" />
            <TextField fx:id="data" editable="false" layoutX="437.0" layoutY="39.0" mouseTransparent="false" prefHeight="27.0" prefWidth="100.0" />
            <Label layoutX="329.0" layoutY="44.0" text="ID:" />
            <Label layoutX="291.0" layoutY="77.0" text="Mittente:" />
            <Label layoutX="398.0" layoutY="44.0" text="Data:" />
            <Label layoutX="268.0" layoutY="113.0" text="Destinatario:" />
            <Label layoutX="292.0" layoutY="149.0" text="Oggetto:" />
        </children>
    </AnchorPane>
</children>

编辑2: 这是第一个主播(在右边你可以看到设置): 这是第二种锚烷 这是文本区域:
AnchorPane
是最差的布局之一,如果您设计的是响应式布局,因为它不允许您在定位子级时考虑其他子级的大小(除非您使用侦听器/绑定更新布局参数)

在这种情况下,您的问题是您的
按钮.fxml
覆盖了其他fxml的所有内容,因此会接收所有
MouseEvent
s。要可视化fxml覆盖的区域,只需将此属性添加到
按钮的根。fxml
style=“-fx背景色:rgba(0,0,255,0.5)”

一种可能的解决方法是使子fxmls尽可能小,并在父项中指定根位置:

确定内部
子级的最小
layoutX
layoutY
,为根设置这些值(或将它们添加到根的先前值),并从内部
的所有子级中减去这些值


(相应地处理其他FXML。)

这样覆盖节点仍然是一个糟糕的想法,因为您使用的是绝对位置,对其中一个FXML的任何修改都可能需要您更新多个其他节点以避免覆盖。更糟糕的是,根据操作系统/设置的不同,外观也会有所不同。对于一个操作系统,场景可能看起来不错,而在另一个操作系统上,节点可能重叠。

出于这个原因,我建议避免使用绝对定位,除非您100%确定节点大小是已知的。使用
BorderPane
/
HBox
/
VBox
和/或
GridPane
可以更好地创建所示场景。

AnchorPane
是最糟糕的布局之一,如果您设计的是响应性布局,因为它不允许您在定位子对象时考虑其他子对象的大小(除非使用侦听器/绑定更新布局参数)

在这种特定情况下,您的问题是您的
按钮.fxml
覆盖了其他fxml的所有内容,因此接收了所有
MouseEvent
s。要可视化fxml覆盖的区域,只需将此属性添加到
按钮的根。fxml
style=“-fx背景色:rgba(0,0,255,0.5)”

一种可能的解决方法是使子fxmls尽可能小,并在父项中指定根位置:

确定内部
子级的最小
layoutX
layoutY
,为根设置这些值(或将它们添加到根的先前值),并从内部
的所有子级中减去这些值


(相应地处理其他FXML。)

以这种方式覆盖节点仍然是一个糟糕的想法,因为您使用的是绝对位置,对其中一个FXML的任何修改都可能需要您更新多个其他节点以避免覆盖。更糟糕的是,根据操作系统/设置的不同,场景可能会有所不同。对于一个操作系统,场景可能看起来不错,而在另一个操作系统上,节点可能会重叠。

出于这个原因,我建议避免使用绝对定位,除非你100%确定节点大小是已知的。这样的场景最好使用
BorderPane
/
HBox
/
VBox
和/或
GridPane

为什么你不能使用
BorderPane
或任何其他
布局
来创建呢你应该重新设计所有的应用程序并修改所有的fxml文件。正如你所看到的,我已经在AnchorPane中放置了所有元素,我需要它们在窗口中添加一个鼠标事件过滤器,以查看实际的
事件目标是什么。如果它不是
列表视图
或它的一个子元素,那么你可能有一些节点重叠。@用“重叠”将其Slaw你的意思是有一个元素在另一个元素上?因为我试图单独添加它们,如果我设置了前两个元素,它就会工作,但是一旦我设置了文本区域和文本字段,我就不能再单击前两个元素了。我将编辑问题以显示应用程序的输出。某些节点可能仍然与其他节点,即使您看不到它。添加用于加载FXML文件的代码,以便我们可以在自己的计算机上运行/调试您的应用程序(即包括)。为什么您不能使用
边框窗格
或任何其他
布局
?因为我应该重新设计所有应用程序并修改所有fxml文件。正如您所看到的,使用AnchorPane,我已经将所有元素放置在我需要的位置,以便尝试向窗口添加鼠标事件过滤器,以查看实际的
事件目标
Is、 如果它不是
列表视图
或其子节点之一,则可能有某个节点与之重叠。@用“重叠”清除你的意思是有一个元素在另一个元素上?因为我试图单独添加它们,如果我设置前两个元素,它就会工作,但是一旦我设置了文本区域和文本字段,我就不能再单击前两个元素了。我要