2016-07-20 2 views
0

Я французский, извините за ошибку.Отключить фоновый режим javafx

У меня есть основной этап, а передняя часть - небольшая вторая ступень. Я хочу покрасить в серый цвет весь основной этап, когда будет видна вторая ступень.

Это хорошо, я не могу нажать на начальной стадии с линией:

stage.initModality(Modality.WINDOW_MODAL); 

Но я хочу поставить серый цвет в начальной стадии. Я пытаюсь отключить все компоненты на основной стадии (каждый компонент серого цвета и отключен), но изображения не серые, это проблема.

Помогите пожалуйста.

Спасибо.

ответ

0

Вы можете добавить все в Stackpane и сделать регион в качестве завесы (visible = true/false).

import javafx.application.Application; 
import javafx.event.ActionEvent; 
import javafx.scene.Scene; 
import javafx.scene.control.Alert; 
import javafx.scene.control.Button; 
import javafx.scene.image.Image; 
import javafx.scene.image.ImageView; 
import javafx.scene.layout.BorderPane; 
import javafx.scene.layout.Region; 
import javafx.scene.layout.StackPane; 
import javafx.stage.Stage; 

public class VeilDemo extends Application { 

    @Override 
    public void start(Stage primaryStage) { 
    // that is the veil 
    Region veil = new Region(); 
    veil.setStyle("-fx-background-color: rgba(0, 0, 0, 0.3)"); 
    veil.setVisible(false); 

    Button btn = new Button(); 
    btn.setText("Open Dialog"); 
    btn.setOnAction((ActionEvent event) -> { 
     Alert a = new Alert(Alert.AlertType.INFORMATION); 
     //veil is only visible when alert window is showing 
     veil.visibleProperty().bind(a.showingProperty()); 

     a.setContentText("The main window should be decorated with a veil."); 
     a.setX(primaryStage.getX() + 200); // This is only for showing main window 
     a.showAndWait(); 
    }); 

    Image img = new Image("https://www.gnu.org/graphics/gnu-head-sm.png"); 
    ImageView iv = new ImageView(img); 

    // this should be the normal root of window 
    BorderPane bp = new BorderPane(iv); 
    bp.setBottom(btn); 

    StackPane root = new StackPane(); 
    root.getChildren().addAll(bp, veil); 

    Scene scene = new Scene(root, 300, 250); 

    primaryStage.setTitle("Hello World!"); 
    primaryStage.setScene(scene); 
    primaryStage.show(); 
    } 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
    launch(args); 
    } 

} 

Главное окно будет выглядеть следующим образом:

mainwindow

и если кнопка была нажата, информационное окно открывается, и завеса Запись видна на главной сцене.

enter image description here

Смежные вопросы