JavaFX FXML 未触发 Moused Clicked 事件

On Moused Clicked event not triggered from JavaFX FXML

只是想学习 JavaFX,我的目标是在单击 "Hide Terminal" 按钮时让拆分窗格一直向右移动。这是我在 Scene Builder 中设置的内容:

我尝试将代码添加到 initialise() 方法并且可以确认运行。

下面是应该从鼠标单击事件触发的代码:

@FXML
void terminalHideShow(MouseEvent event) {
    terminalHideShowButton.rotateProperty().setValue(180.0);
    terminalCommandListOutput.getItems().add("TEXT"); // a test

    if(mainWindow.getDividerPositions()[0] > 0.99)
    {
        mainWindow.setDividerPositions(0.7);
        terminalHideShowLabel.setText("Hide Terminal");
    }
    else
    {
        mainWindow.setDividerPositions(1.0);
        terminalHideShowLabel.setText("Show Terminal");
    }
}

FXML 本身:

<Label alignment="CENTER_RIGHT" contentDisplay="RIGHT" nodeOrientation="LEFT_TO_RIGHT" text="Hide Terminal" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
   <graphic>
      <ImageView fx:id="terminalHideShowButton" accessibleRole="BUTTON" onMouseClicked="#terminalHideShow" rotate="180.0">
         <image>
            <Image url="@../images/angle-right-circle.png" />
         </image>
      </ImageView>
   </graphic>
</Label>

对于if条件,如果你想隐藏分隔符,分隔符的初始位置应该大于0.99,在你的附图中似乎小于0.99。所以在这种情况下你应该像这样改变 if 条件

if(mainWindow.getDividerPositions()[0] < 0.99)
{
     mainWindow.setDividerPositions(0.7);
     terminalHideShowLabel.setText("Hide Terminal");
}

我不知道您想要隐藏分隔线的标准是什么...所以请像那样更改您的 if 和 else 语句。我刚刚在你附上图片的基础上提到了这个例子

确定为了能够单击 ImageView,我必须为其设置 Pick On Bounds 选项,因为透明部分不可单击,这是箭头图片的大部分。

无论出于何种原因,ImageView 在被标签对象包裹时无法被点击。将 Label 和 ImageView 移动到单独的对象解决了主要问题,即使您仍然可以在 "wrapped".

时为它们设置操作处理程序