【问题标题】:How to display an image when a button is pressed in JavaFX在JavaFX中按下按钮时如何显示图像
【发布时间】:2020-10-01 08:08:42
【问题描述】:

我无法确定按下按钮时如何显示图像。到目前为止,这是我所拥有的:


公共类标志扩展应用程序{

@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);
}

}


所以我想要发生的是,当按下美国按钮时,将调用事件处理程序以显示图像。我已经到了这一点,似乎无法通过它。有人帮忙!

【问题讨论】:

  • 请将您的相关代码实际发布为文本而不是外部图像。
  • do not post images of code。相反,粘贴您的代码和format it
  • 您需要对要添加 ImageView 的布局的引用。使用您当前的设置,可以通过向您的 AmericanButtonHandler 添加带有必要参数的构造函数并将参数存储在实例字段中来完成。

标签: image button javafx imageview eventhandler


【解决方案1】:

我会尝试类似底部功能的东西(注意:我根据自己的喜好修改了一些代码,它不会影响你的任何东西,这只是我喜欢看它的方式)我看到你没有创建场景舞台或如果您查看底部函数,则显示该阶段,该函数应该可以让您很好地了解应该做什么我传递的唯一内容是文件路径,因此它应该很容易实现和理解

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();
    }

}

【讨论】:

    猜你喜欢
    • 2017-01-25
    • 1970-01-01
    • 1970-01-01
    • 2018-01-06
    • 1970-01-01
    • 2021-08-16
    • 2018-06-20
    • 2023-03-11
    • 2018-05-29
    相关资源
    最近更新 更多