JavaFX。单击imageview时如何制作imageview的边框?
JavaFX. How to make the border of imageview, when I click the imageview?
在 javaFX 中,我想制作一个可以在单击时更改边框的图像视图。
单击一次时,imageview 有一个边框。
再次点击时,imageview没有边框
我该怎么做?
提前致谢!
那么你需要:
- a
PseudoClass
用于切换 CSS 状态
- 环绕
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;
}
在 javaFX 中,我想制作一个可以在单击时更改边框的图像视图。 单击一次时,imageview 有一个边框。 再次点击时,imageview没有边框
我该怎么做? 提前致谢!
那么你需要:
- a
PseudoClass
用于切换 CSS 状态 - 环绕
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;
}