FXML/JavaFX 如何使 ImageView 可点击?
FXML/JavaFX How to make an ImageView Clickable?
我想使用 FXML 更改图像视图中的图像并更改图像我打开 fileChooser 以选择应该替换旧图像的图像,我现在有 2 个问题:
如何使 ImageView 可点击这是我为此使用的代码
public void imagePicker(){
Defaultview.setPickOnBounds(true); // allows click on transparent areas
Defaultview.setOnMouseClicked((MouseEvent e) -> {
FileChooser fileChooser = new FileChooser();
fileChooser.setTitle("Open Resource File");
fileChooser.showOpenDialog(new Stage());
});
}
在我的 FXML 文件中我有:
<ImageView fx:id="Defaultview" fitHeight="93" fitWidth="93"
pickOnBounds="true" preserveRatio="true" onAction='#imagePicker'>
对于图像更改,我想将其从
更改为
Image url="@../images/default.png"
选择图片。
ImageView
没有 onAction
属性(因此我认为您在加载 FXML 文件时应该会遇到运行时错误)。如果你想响应鼠标点击,那么你应该使用 onMouseClicked
:
<ImageView fx:id="Defaultview" fitHeight="93" fitWidth="93"
pickOnBounds="true" preserveRatio="true" onMouseClicked='#imagePicker'>
在 FXML 中注册事件处理程序意味着 imagePicker()
方法将在事件发生时被调用(即当用户单击图像视图时)。在 onClick
事件发生时调用的方法内部不需要(而且这是不正确的)设置 onClicked
处理程序。您只需要
public void imagePicker(){
FileChooser fileChooser = new FileChooser();
fileChooser.setTitle("Open Resource File");
// use existing window here, don't create a new one:
File file = fileChooser.showOpenDialog(Defaultview.getScene().getWindow());
if (file != null) {
Defaultview.setImage(new Image(file.toURI().toString()));
}
}
在 JavaFx ImageView 中有 setOnMouseClicked 属性,所以如果你想使用 fileChooser 从你的 PC 导入图像,你需要 添加一个扩展 到您的 FileChooser 以仅定义图像并跳过其他文件
public void imagePicker(){
FileChooser fileChooser = new FileChooser();
FileChooser.ExtensionFilter extFilterJPG = new FileChooser.ExtensionFilter("JPG files (*.jpg)", "*.JPG");
FileChooser.ExtensionFilter extFilterPNG = new FileChooser.ExtensionFilter("PNG files (*.png)", "*.PNG");
fileChooser.getExtensionFilters().addAll(extFilterJPG, extFilterPNG);
File ChooserFile = fileChooser.showOpenDialog(Defaultview.getScene().getWindow());//your owner
if (ChooserFile != null) {
Image image = new Image(ChooserFile.toURI().toString());
Defaultview.setImage(image);
}
}
并将 MouseEvent (setOnMouseClicked) 添加到您的 ImageView 中:
Defaultview.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
imagePicker();
}
});
我想使用 FXML 更改图像视图中的图像并更改图像我打开 fileChooser 以选择应该替换旧图像的图像,我现在有 2 个问题:
如何使 ImageView 可点击这是我为此使用的代码
public void imagePicker(){
Defaultview.setPickOnBounds(true); // allows click on transparent areas
Defaultview.setOnMouseClicked((MouseEvent e) -> {
FileChooser fileChooser = new FileChooser();
fileChooser.setTitle("Open Resource File");
fileChooser.showOpenDialog(new Stage());
});
}
在我的 FXML 文件中我有:
<ImageView fx:id="Defaultview" fitHeight="93" fitWidth="93"
pickOnBounds="true" preserveRatio="true" onAction='#imagePicker'>
对于图像更改,我想将其从
更改为Image url="@../images/default.png"
选择图片。
ImageView
没有 onAction
属性(因此我认为您在加载 FXML 文件时应该会遇到运行时错误)。如果你想响应鼠标点击,那么你应该使用 onMouseClicked
:
<ImageView fx:id="Defaultview" fitHeight="93" fitWidth="93"
pickOnBounds="true" preserveRatio="true" onMouseClicked='#imagePicker'>
在 FXML 中注册事件处理程序意味着 imagePicker()
方法将在事件发生时被调用(即当用户单击图像视图时)。在 onClick
事件发生时调用的方法内部不需要(而且这是不正确的)设置 onClicked
处理程序。您只需要
public void imagePicker(){
FileChooser fileChooser = new FileChooser();
fileChooser.setTitle("Open Resource File");
// use existing window here, don't create a new one:
File file = fileChooser.showOpenDialog(Defaultview.getScene().getWindow());
if (file != null) {
Defaultview.setImage(new Image(file.toURI().toString()));
}
}
在 JavaFx ImageView 中有 setOnMouseClicked 属性,所以如果你想使用 fileChooser 从你的 PC 导入图像,你需要 添加一个扩展 到您的 FileChooser 以仅定义图像并跳过其他文件
public void imagePicker(){
FileChooser fileChooser = new FileChooser();
FileChooser.ExtensionFilter extFilterJPG = new FileChooser.ExtensionFilter("JPG files (*.jpg)", "*.JPG");
FileChooser.ExtensionFilter extFilterPNG = new FileChooser.ExtensionFilter("PNG files (*.png)", "*.PNG");
fileChooser.getExtensionFilters().addAll(extFilterJPG, extFilterPNG);
File ChooserFile = fileChooser.showOpenDialog(Defaultview.getScene().getWindow());//your owner
if (ChooserFile != null) {
Image image = new Image(ChooserFile.toURI().toString());
Defaultview.setImage(image);
}
}
并将 MouseEvent (setOnMouseClicked) 添加到您的 ImageView 中:
Defaultview.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
imagePicker();
}
});