1

我试图在这个 javafx 应用程序中让一些 CheckBoxes 可视化披萨上的成分。Pizza 是一个 ImageView。但我不知道我将如何添加配料。让我们谈谈意大利腊肠!

我的第一个想法是在我的 CheckBox 意大利腊肠的 setOnAction 上执行此操作:(gc beeing my graphics context)

                                    Image salami1 = new Image("salami.png");
                                    gc.setFill(new ImagePattern(salami1);
                                    gc.fillOval(250, 200, 60, 60);

(我尝试在顶部添加另一个 ImageView ,但即使它是一个 .png 透明背景,背景仍然会显示。所以我尝试了这个。因为我只会吃奶酪,意大利腊肠这也可以。这个是非常基本的,应该只是为了在我身边练习。)

但是,取消选中该框后,如何使意大利腊肠再次消失?我知道 gc.clearRect() 但就是这样。在取消选中该框后,我对如何执行此操作一无所知。提前致谢

4

1 回答 1

3

ImageView您可以通过将'visible属性绑定到selected相应. 的属性来非常简单地做到这一点CheckBox

这是一个快速示例:

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.CheckBox;
import javafx.scene.image.ImageView;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class Main extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {

        // Just creating a sample interface
        VBox root = new VBox(5);
        root.setPadding(new Insets(5));
        CheckBox chkSalami = new CheckBox("Salami");
        ImageView imgSalami = new ImageView("salami.png");

        // Bind the salami image's "visible" property to the checkbox's "selected" property
        imgSalami.visibleProperty().bind(chkSalami.selectedProperty());

        root.getChildren().addAll(chkSalami, imgSalami);

        primaryStage.setScene(new Scene(root));
        primaryStage.show();
    }
}

重要的部分是装订线。这是该行执行的基本逻辑:

  • 始终设置imgSalami对象的可见性以匹配是否chkSalami被选中。

这意味着您无需在 ; 中添加任何循环或ChangeListeners CheckBox。只需将每个图像绑定到匹配的复选框。

于 2018-06-16T23:08:53.917 回答