如何在 JavaFX 中按下按钮时显示图像
How to display an image when a button is pressed in JavaFX
我无法弄清楚按下按钮时如何显示图像。这是我目前拥有的:
public class 标志扩展应用程序 {
@Override
public void start(Stage primaryStage) {
//Create a label to display a prompt
Label promptLabel = new Label("Select Button to Display a Flag");
//Create buttons to display the flags
Button americanButton = new Button("American Flag");
Button canadianButton = new Button("Canadian Flag");
Button frenchButton = new Button("French Flag");
Button germanButton = new Button("German Flag");
Button mexicanButton = new Button("Mexican Flag");
//Creating an HBox
HBox hbox = new HBox(10, promptLabel);
HBox hbox1 = new HBox(10, americanButton);
HBox hbox2 = new HBox(10, canadianButton);
HBox hbox3 = new HBox(10, frenchButton);
HBox hbox4 = new HBox(10, germanButton);
HBox hbox5 = new HBox(10, mexicanButton);
americanButton.setOnAction(new AmericanButtonHandler());
//Creating a VBox
VBox vbox = new VBox(10, hbox, hbox1, hbox2, hbox3, hbox4, hbox5);
//set vbox padding
vbox.setPadding(new Insets(10));
//set vbox alignment
hbox.setAlignment(Pos.CENTER);
//gridpane.setAlignment(Pos.CENTER);
hbox1.setAlignment(Pos.CENTER);
hbox2.setAlignment(Pos.CENTER);
hbox3.setAlignment(Pos.CENTER);
hbox4.setAlignment(Pos.CENTER);
hbox5.setAlignment(Pos.CENTER);
//Create a scene
Scene scene = new Scene(vbox);
primaryStage.setTitle("Flags");
primaryStage.setScene(scene);
primaryStage.show();
}
class AmericanButtonHandler implements EventHandler<ActionEvent>{
@Override
public void handle(ActionEvent event){
Pane aPane = new HBox(10);
//Create new image
Image americanImage = new Image("file:America.png");
//Create new imageView
ImageView aImageView = new ImageView(americanImage);
aImageView.setImage(americanImage);
}
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
}
所以我想要发生的事情是,当按下 americanButton 时,将调用事件处理程序以允许显示图像。我已经到了这一点,似乎无法通过它。有人帮忙!
我会尝试像底部函数这样的东西(注意:我根据自己的喜好修改了一些代码它不会影响你的任何东西这只是我喜欢看它的方式)我看到你没有创建场景stage 或 showing the stage 如果你看底部的函数应该让你知道你应该做什么我唯一传递的是文件路径所以它应该很容易实现和理解
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
//Create a label to display a prompt
Label promptLabel = new Label("Select Button to Display a Flag");
//Create buttons to display the flags
Button americanButton = new Button("American Flag");
americanButton.setOnAction(event -> {
showFlagAction(getClass().getResource("/TestImage.png").toExternalForm());
});
Button canadianButton = new Button("Canadian Flag");
Button frenchButton = new Button("French Flag");
Button germanButton = new Button("German Flag");
Button mexicanButton = new Button("Mexican Flag");
//Creating an HBox
HBox hbox = new HBox(10, promptLabel);
hbox.setAlignment(Pos.CENTER);
HBox hbox1 = new HBox(10, americanButton);
hbox1.setAlignment(Pos.CENTER);
HBox hbox2 = new HBox(10, canadianButton);
hbox2.setAlignment(Pos.CENTER);
HBox hbox3 = new HBox(10, frenchButton);
hbox3.setAlignment(Pos.CENTER);
HBox hbox4 = new HBox(10, germanButton);
hbox4.setAlignment(Pos.CENTER);
HBox hbox5 = new HBox(10, mexicanButton);
hbox5.setAlignment(Pos.CENTER);
//Creating a VBox
VBox vbox = new VBox(10, hbox, hbox1, hbox2, hbox3, hbox4, hbox5);
vbox.setPadding(new Insets(10));
primaryStage.setTitle("Flags");
primaryStage.setScene(new Scene(vbox));
primaryStage.show();
}
private void showFlagAction(String filePath){
ImageView imageView = new ImageView(new Image(filePath));
VBox vBox = new VBox();
vBox.setAlignment(Pos.CENTER);
vBox.getChildren().add(imageView);
Stage stage = new Stage();
stage.setScene(new Scene(vBox));
stage.show();
}
}
我无法弄清楚按下按钮时如何显示图像。这是我目前拥有的:
public class 标志扩展应用程序 {
@Override
public void start(Stage primaryStage) {
//Create a label to display a prompt
Label promptLabel = new Label("Select Button to Display a Flag");
//Create buttons to display the flags
Button americanButton = new Button("American Flag");
Button canadianButton = new Button("Canadian Flag");
Button frenchButton = new Button("French Flag");
Button germanButton = new Button("German Flag");
Button mexicanButton = new Button("Mexican Flag");
//Creating an HBox
HBox hbox = new HBox(10, promptLabel);
HBox hbox1 = new HBox(10, americanButton);
HBox hbox2 = new HBox(10, canadianButton);
HBox hbox3 = new HBox(10, frenchButton);
HBox hbox4 = new HBox(10, germanButton);
HBox hbox5 = new HBox(10, mexicanButton);
americanButton.setOnAction(new AmericanButtonHandler());
//Creating a VBox
VBox vbox = new VBox(10, hbox, hbox1, hbox2, hbox3, hbox4, hbox5);
//set vbox padding
vbox.setPadding(new Insets(10));
//set vbox alignment
hbox.setAlignment(Pos.CENTER);
//gridpane.setAlignment(Pos.CENTER);
hbox1.setAlignment(Pos.CENTER);
hbox2.setAlignment(Pos.CENTER);
hbox3.setAlignment(Pos.CENTER);
hbox4.setAlignment(Pos.CENTER);
hbox5.setAlignment(Pos.CENTER);
//Create a scene
Scene scene = new Scene(vbox);
primaryStage.setTitle("Flags");
primaryStage.setScene(scene);
primaryStage.show();
}
class AmericanButtonHandler implements EventHandler<ActionEvent>{
@Override
public void handle(ActionEvent event){
Pane aPane = new HBox(10);
//Create new image
Image americanImage = new Image("file:America.png");
//Create new imageView
ImageView aImageView = new ImageView(americanImage);
aImageView.setImage(americanImage);
}
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
}
所以我想要发生的事情是,当按下 americanButton 时,将调用事件处理程序以允许显示图像。我已经到了这一点,似乎无法通过它。有人帮忙!
我会尝试像底部函数这样的东西(注意:我根据自己的喜好修改了一些代码它不会影响你的任何东西这只是我喜欢看它的方式)我看到你没有创建场景stage 或 showing the stage 如果你看底部的函数应该让你知道你应该做什么我唯一传递的是文件路径所以它应该很容易实现和理解
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
//Create a label to display a prompt
Label promptLabel = new Label("Select Button to Display a Flag");
//Create buttons to display the flags
Button americanButton = new Button("American Flag");
americanButton.setOnAction(event -> {
showFlagAction(getClass().getResource("/TestImage.png").toExternalForm());
});
Button canadianButton = new Button("Canadian Flag");
Button frenchButton = new Button("French Flag");
Button germanButton = new Button("German Flag");
Button mexicanButton = new Button("Mexican Flag");
//Creating an HBox
HBox hbox = new HBox(10, promptLabel);
hbox.setAlignment(Pos.CENTER);
HBox hbox1 = new HBox(10, americanButton);
hbox1.setAlignment(Pos.CENTER);
HBox hbox2 = new HBox(10, canadianButton);
hbox2.setAlignment(Pos.CENTER);
HBox hbox3 = new HBox(10, frenchButton);
hbox3.setAlignment(Pos.CENTER);
HBox hbox4 = new HBox(10, germanButton);
hbox4.setAlignment(Pos.CENTER);
HBox hbox5 = new HBox(10, mexicanButton);
hbox5.setAlignment(Pos.CENTER);
//Creating a VBox
VBox vbox = new VBox(10, hbox, hbox1, hbox2, hbox3, hbox4, hbox5);
vbox.setPadding(new Insets(10));
primaryStage.setTitle("Flags");
primaryStage.setScene(new Scene(vbox));
primaryStage.show();
}
private void showFlagAction(String filePath){
ImageView imageView = new ImageView(new Image(filePath));
VBox vBox = new VBox();
vBox.setAlignment(Pos.CENTER);
vBox.getChildren().add(imageView);
Stage stage = new Stage();
stage.setScene(new Scene(vBox));
stage.show();
}
}