我想使用FXML更改图像视图中的图像并更改图像我打开fileChooser来选择应该替换旧图像的图像,我现在有2个问题:
如何使ImageView Clickable这是我用于此
的代码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"
到图像选择。
答案 0 :(得分:2)
ImageView
没有onAction
属性(因此我认为在加载FXML文件时应该会遇到运行时错误)。如果您想响应鼠标点击,则应使用onMouseClicked
:
<ImageView fx:id="Defaultview" fitHeight="93" fitWidth="93"
pickOnBounds="true" preserveRatio="true" onMouseClicked='#imagePicker'>
在FXML中注册事件处理程序意味着在事件发生时(即当用户单击图像视图时)将调用imagePicker()
方法。从onClicked
事件发生时调用的方法内部设置onClick
处理程序是不必要的(并且它是不正确的)。你所需要的只是
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()));
}
}
答案 1 :(得分:-1)
在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();
}
});