[英]How to highlight a window in JavaFX?
您可以创建一个适当样式的Region
,使其不受管理,鼠标透明,并将其添加到根窗格。 如果需要,请观察根窗格的边界并调整区域大小以填充它。
这是一个SSCCE:
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.geometry.Bounds;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.ToggleButton;
import javafx.scene.layout.Pane;
import javafx.scene.layout.Region;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class HighlightWholeWindow extends Application {
@Override
public void start(Stage primaryStage) {
Region mask = createMask();
ToggleButton highlightButton = new ToggleButton("Highlight");
highlightButton.selectedProperty().addListener((obs, wasHighlighted, isNowHighlighted) -> {
Pane root = (Pane)highlightButton.getScene().getRoot();
if (isNowHighlighted) {
root.getChildren().add(mask);
} else {
root.getChildren().remove(mask);
}
});
VBox root = new VBox(highlightButton);
root.setAlignment(Pos.CENTER);
Scene scene = new Scene(root, 400, 400);
primaryStage.setScene(scene);
primaryStage.show();
}
private Region createMask() {
Region mask = new Region();
// in real life, use an external style sheet:
mask.setStyle("-fx-background-color: #6495ed80;");
mask.setManaged(false);
mask.setMouseTransparent(true);
mask.setLayoutX(0);
mask.setLayoutY(0);
ChangeListener<Bounds> boundsListener = (obs, oldBounds, newBounds) ->
mask.resizeRelocate(newBounds.getMinX(), newBounds.getMinY(),
newBounds.getWidth(), newBounds.getHeight());
mask.parentProperty().addListener((obs, oldParent, newParent) -> {
if (oldParent != null) {
oldParent.boundsInLocalProperty().removeListener(boundsListener);
}
if (newParent != null) {
Bounds newParentBounds = newParent.getBoundsInLocal() ;
mask.resizeRelocate(newParentBounds.getMinX(), newParentBounds.getMinY(),
newParentBounds.getWidth(), newParentBounds.getHeight());
newParent.boundsInLocalProperty().addListener(boundsListener);
}
});
return mask ;
}
public static void main(String[] args) {
launch(args);
}
}
显然,你可以调整它来响应拖动处理程序而不是切换按钮。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.