Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JavaFX中突出显示窗口?_Java_Css_Javafx 8 - Fatal编程技术网

如何在JavaFX中突出显示窗口?

如何在JavaFX中突出显示窗口?,java,css,javafx-8,Java,Css,Javafx 8,我正在使用JavaFX拖放文件导入,我希望当用户拖动文件时,整个窗口(客户端区域)都高亮显示为蓝色。我知道如何使用JavaFX输入API和CSS,但不知道一种简单的方法。是否可以在窗口上放置一个遮罩,或者我只需要改变根和每个节点的背景颜色就可以了?我想要这样的东西(Mac窗口屏幕截图突出显示): 您只需创建一个具有适当样式的区域,将其设置为非托管且鼠标透明,然后将其添加到根窗格。如果需要,请观察根窗格的边界并调整区域大小以填充它 以下是SSCCE: import javafx.applicati

我正在使用JavaFX拖放文件导入,我希望当用户拖动文件时,整个窗口(客户端区域)都高亮显示为蓝色。我知道如何使用JavaFX输入API和CSS,但不知道一种简单的方法。是否可以在窗口上放置一个遮罩,或者我只需要改变根和每个节点的背景颜色就可以了?我想要这样的东西(Mac窗口屏幕截图突出显示):


您只需创建一个具有适当样式的
区域
,将其设置为非托管且鼠标透明,然后将其添加到根窗格。如果需要,请观察根窗格的边界并调整区域大小以填充它

以下是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);
    }
}
导入javafx.application.application;
导入javafx.beans.value.ChangeListener;
导入javafx.geometry.Bounds;
导入javafx.geometry.Pos;
导入javafx.scene.scene;
导入javafx.scene.control.ToggleButton;
导入javafx.scene.layout.Pane;
导入javafx.scene.layout.Region;
导入javafx.scene.layout.VBox;
导入javafx.stage.stage;
公共类HighlightWholeWindow扩展应用程序{
@凌驾
公共无效开始(阶段primaryStage){
区域掩码=createMask();
ToggleButton highlightButton=新的ToggleButton(“突出显示”);
highlightButton.selectedProperty().addListener((obs、wasHighlighted、IsNow高亮显示)->{
窗格根=(窗格)highlightButton.getScene().getRoot();
如果(现在突出显示){
root.getChildren().add(掩码);
}否则{
root.getChildren().remove(掩码);
}
});
VBox根=新的VBox(highlightButton);
根部设置对齐(位置中心);
场景=新场景(根,400400);
初级阶段。场景(场景);
primaryStage.show();
}
私有区域createMask(){
区域掩码=新区域();
//在现实生活中,使用外部样式表:
mask.setStyle(“-fx背景色:#6495ed80;”);
mask.setManaged(false);
mask.setMouseTransparent(true);
mask.setLayoutX(0);
mask.setLayoutY(0);
ChangeListener boundsListener=(obs、旧边界、新边界)->
mask.resizeRelocate(newBounds.getMinX(),newBounds.getMinY(),
newBounds.getWidth(),newBounds.getHeight();
mask.parentProperty().addListener((obs、oldParent、newParent)->{
如果(oldParent!=null){
oldParent.boundsInLocalProperty().RemovelListener(boundsListener);
}
if(newParent!=null){
Bounds newParentBounds=newParent.getBoundsInLocal();
mask.resizeRelocate(newParentBounds.getMinX(),newParentBounds.getMinY(),
newParentBounds.getWidth(),newParentBounds.getHeight());
newParent.boundsInLocalProperty().addListener(boundsListener);
}
});
返回掩码;
}
公共静态void main(字符串[]args){
发射(args);
}
}
显然,您可以调整它以响应拖动处理程序,而不是切换按钮