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".
时为它们设置操作处理程序
只是想学习 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".
时为它们设置操作处理程序