使用 JavaFX Scene Builder 在代码中更改 ImageView 图像
Change ImageView image in code using JavaFX Scene Builder
我试图在单击按钮时更改 ImageView 组件中的图像。我需要它是本地图像。我一直收到路径错误,无法使用 ImageIcon 并将其转换为图像。没有简单的方法吗?
package tictactoesimulator_alliebeckman;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
/**
*
* @author Allie
*/
public class FXMLDocumentController implements Initializable {
// my components
@FXML
public Label lblWinLose;
@FXML
public Button btnNewGame;
@FXML
public ImageView ivOne;
// Event handle for button click
@FXML
public void handleButtonAction(ActionEvent event) {
// here is where I'm having the issue I have the image file in my src folder
// I've tried using a ImageIcon and it wont convert to an Image?
// All I need is the image to change to the local image on button click
lblWinLose.setText("Clicked");
Image image = new Image("o.png");
ivOne = new ImageView(image);
}
@Override
public void initialize(URL url, ResourceBundle rb) {
}
}
可以在这个 Eclipse 屏幕截图中看到项目布局:
从您问题中的屏幕截图来看,图像与 FXMLDocumentController
class 在同一个包中。
您正在使用的 Image
constructor 需要图像 URL 的 字符串版本:获得这样 URL 是使用 getClass().getResource(...)
(因为无论您是从文件系统还是从 jar 文件加载,这都有效)。 getClass().getResource(...)
将相对于当前 class 进行解析(或者相对于 class 路径,如果资源名称以前导 /
开头):
Image image = new Image(getClass().getResource("o.png").toExternalForm());
然后你应该做
而不是创建一个新的 ImageView
ivOne.setImage(image);
我试图在单击按钮时更改 ImageView 组件中的图像。我需要它是本地图像。我一直收到路径错误,无法使用 ImageIcon 并将其转换为图像。没有简单的方法吗?
package tictactoesimulator_alliebeckman;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
/**
*
* @author Allie
*/
public class FXMLDocumentController implements Initializable {
// my components
@FXML
public Label lblWinLose;
@FXML
public Button btnNewGame;
@FXML
public ImageView ivOne;
// Event handle for button click
@FXML
public void handleButtonAction(ActionEvent event) {
// here is where I'm having the issue I have the image file in my src folder
// I've tried using a ImageIcon and it wont convert to an Image?
// All I need is the image to change to the local image on button click
lblWinLose.setText("Clicked");
Image image = new Image("o.png");
ivOne = new ImageView(image);
}
@Override
public void initialize(URL url, ResourceBundle rb) {
}
}
可以在这个 Eclipse 屏幕截图中看到项目布局:
从您问题中的屏幕截图来看,图像与 FXMLDocumentController
class 在同一个包中。
您正在使用的 Image
constructor 需要图像 URL 的 字符串版本:获得这样 URL 是使用 getClass().getResource(...)
(因为无论您是从文件系统还是从 jar 文件加载,这都有效)。 getClass().getResource(...)
将相对于当前 class 进行解析(或者相对于 class 路径,如果资源名称以前导 /
开头):
Image image = new Image(getClass().getResource("o.png").toExternalForm());
然后你应该做
而不是创建一个新的ImageView
ivOne.setImage(image);