JavaFX。单击imageview时如何制作imageview的边框?

JavaFX. How to make the border of imageview, when I click the imageview?

在 javaFX 中,我想制作一个可以在单击时更改边框的图像视图。 单击一次时,imageview 有一个边框。 再次点击时,imageview没有边框

我该怎么做? 提前致谢!

那么你需要:

  1. a PseudoClass 用于切换 CSS 状态
  2. 环绕 Region,因为 ImageView 本身既不支持背景也不支持边框。

一个简单的工作示例(PseudoClass 的切换是在 BooleanProperty 的帮助下完成的,这是常见的做法,并且更容易管理其状态):

@Override
public void start(Stage primaryStage) {

    PseudoClass imageViewBorder = PseudoClass.getPseudoClass("border");

    ImageView imageview = new ImageView(
            new Image("http://upload.wikimedia.org/wikipedia/commons/1/16/Appearance_of_sky_for_weather_forecast,_Dhaka,_Bangladesh.JPG"));

    BorderPane imageViewWrapper = new BorderPane(imageview);
    imageViewWrapper.getStyleClass().add("image-view-wrapper");

    BooleanProperty imageViewBorderActive = new SimpleBooleanProperty() {
        @Override
        protected void invalidated() {
            imageViewWrapper.pseudoClassStateChanged(imageViewBorder, get());
        }
    };

    imageview.setOnMouseClicked(ev -> imageViewBorderActive
            .set(!imageViewBorderActive.get()));

    BorderPane root = new BorderPane(imageViewWrapper);
    root.setPadding(new Insets(15));

    Scene scene = new Scene(root, 700, 400);
    scene.getStylesheets().add(
            getClass().getResource("application.css").toExternalForm());
    primaryStage.setScene(scene);
    primaryStage.show();
}

和必要的 CSS:

.image-view-wrapper:border {
    -fx-border-color: black;
    -fx-border-style: solid;
    -fx-border-width: 5;
}