Popup 在javafx中使可拖动弹出窗口背景透明?

Popup 在javafx中使可拖动弹出窗口背景透明?,popup,javafx,Popup,Javafx,我正在用netbeans做一个小练习I JavaFX,当我点击一个按钮时,我试图弹出一个弹出窗口,但是弹出窗口有一个白色的背景,我怎样才能做到透明 谢谢 代码如下: 主要内容: FXMLController: 弹出式控制器: 在弹出式控制器初始化中,请尝试: rect.setStyle("-fx-background-color: transparent;"); 在controlFx中查看PopOver组件的可能副本您可以拖动弹出窗口,设置为不透明度,设置为内容。。。这是一个非常酷的组件,也适

我正在用netbeans做一个小练习I JavaFX,当我点击一个按钮时,我试图弹出一个弹出窗口,但是弹出窗口有一个白色的背景,我怎样才能做到透明

谢谢

代码如下:

主要内容:

FXMLController:

弹出式控制器:


在弹出式控制器初始化中,请尝试:

rect.setStyle("-fx-background-color: transparent;");

在controlFx中查看PopOver组件的可能副本您可以拖动弹出窗口,设置为不透明度,设置为内容。。。这是一个非常酷的组件,也适用于此。它有一个透明的背景,这使它成为工具提示和弹出窗口的理想选择,如上文所述,供未来读者阅读。
package test;

import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.application.Platform;
import javafx.event.Event;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Cursor;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.Pane;
import javafx.stage.Modality;
import javafx.stage.Stage;
import javafx.stage.StageStyle;

public class FXMLDocumentController implements Initializable {

    @FXML
    private Button menu1;
    @FXML
    private Button menu2;
    @FXML
    private Button menu3;
    @FXML
    private Button menu4;

    @FXML
    private Button closeButton;
    @FXML
    private Button minimizeButton;
    @FXML
    private Pane paneMain;

    private double xOffset;
    private double yOffset;

    private Stage popup;

@Override
    public void initialize(URL url, ResourceBundle rb) {

        Platform.runLater(new Runnable(){
            private StageStyle Color;
          @Override
          public void run(){
              Stage stage = Stage.class.cast(paneMain.getScene().getWindow());
              makeDraggable(stage, paneMain);
              Parent popupLoaded = null;
              try {
                  popupLoaded = FXMLLoader.load(getClass().getResource("popup.fxml"));
              } catch (IOException ex) {
                  Logger.getLogger(FXMLDocumentController.class.getName()).log(Level.SEVERE, null, ex);
              }
                Scene popupScene = new Scene(popupLoaded);

                popup = new Stage();
                popup.initStyle(StageStyle.TRANSPARENT);
                popup.initModality(Modality.WINDOW_MODAL);
                popup.initOwner(stage);
                popup.setScene(popupScene);

          }
        });
    } 

    @FXML
    public void diagnosticButton(){
        assert popup != null;
        popup.show();
    }

    @FXML
    public void handleClick(MouseEvent event) {
        //System.err.println("BOUND OFFSET");

        //xOffset = event.getSceneX();
                //yOffset = event.getSceneY();

                //xOffset = event.getSceneX();
                //yOffset = event.getSceneY();
    }
    @FXML
    public void handleDrag(MouseEvent event) {
        //System.err.println("DRAGGING");
        Stage stage = Stage.class.cast(paneMain.getScene().getWindow());
                stage.setX(event.getScreenX() - xOffset);
                stage.setY(event.getScreenY() - yOffset);
   }

   public void makeDraggable( final Stage stage, final Node byNode) {      
    byNode.setOnMousePressed(new EventHandler<MouseEvent>() {      
    @Override public void handle(MouseEvent mouseEvent) {       
     // record a delta distance for the drag and drop operation.        
    xOffset = stage.getX() - mouseEvent.getScreenX();        
    yOffset = stage.getY() - mouseEvent.getScreenY();        
    byNode.setCursor(Cursor.MOVE);      
    }    
    });    
    byNode.setOnMouseReleased(new EventHandler<MouseEvent>() {      
        @Override public void handle(MouseEvent mouseEvent) {       
        byNode.setCursor(Cursor.DEFAULT);     
        }    
    });    
    byNode.setOnMouseDragged(new EventHandler<MouseEvent>() {      
    @Override public void handle(MouseEvent mouseEvent) {        
    stage.setX(mouseEvent.getScreenX() + xOffset);        
    stage.setY(mouseEvent.getScreenY() + yOffset);      
    }    });    
byNode.setOnMouseEntered(new EventHandler<MouseEvent>() {      
@Override public void handle(MouseEvent mouseEvent) {        
if (!mouseEvent.isPrimaryButtonDown()) {          
byNode.setCursor(Cursor.DEFAULT);       
 }      }    });    
byNode.setOnMouseExited(new EventHandler<MouseEvent>() {      
@Override public void handle(MouseEvent mouseEvent) {        
if (!mouseEvent.isPrimaryButtonDown()) {         
 byNode.setCursor(Cursor.DEFAULT);       
 }      }    }); 
 }

    @FXML
    public void changeButtonOnOver(Event e){
   menu1.getStyleClass().add("boton_over");
    }

    @FXML
    public void changeButtonOnExited(){
            menu1.getStyleClass().remove("boton_over");
    }

    @FXML
    public void changeButtonOnOver2(Event e){
   menu2.getStyleClass().add("boton_over");
    }

    @FXML
    public void changeButtonOnExited2(){
            menu2.getStyleClass().remove("boton_over");
    }  


    @FXML
    public void changeButtonOnOver3(Event e){
   menu3.getStyleClass().add("boton_over");
    }

    @FXML
    public void changeButtonOnExited3(){
            menu3.getStyleClass().remove("boton_over");
    }


    @FXML
    public void changeButtonOnOver4(Event e){
   menu4.getStyleClass().add("boton_over");
    }

    @FXML
    public void changeButtonOnExited4(){
            menu4.getStyleClass().remove("boton_over");
    }  



    @FXML
    public void changeButtonOnOverClose(){
        closeButton.getStyleClass().add("btn_cerrar_over");
    }

    @FXML
    public void changeButtonOnExitedClose(){
        closeButton.getStyleClass().remove("btn_cerrar_over");
    }


    @FXML
    public void changeButtonOnOverMinimize(){
        minimizeButton.getStyleClass().add("btn_cerrar_over");
    }


    @FXML
    public void changeButtonOnExitedMinimize(){
        minimizeButton.getStyleClass().remove("btn_cerrar_over");
    }

    @FXML
    public void exit(){
        Stage stage = Stage.class.cast(closeButton.getScene().getWindow());
        stage.close();
    }

     @FXML
    public void minimize(){
        Stage stage = Stage.class.cast(minimizeButton.getScene().getWindow());
        stage.setIconified(true);
    }

}
package test;

import java.net.URL;
import java.util.ResourceBundle;
import javafx.application.Platform;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.Cursor;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.control.Button;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;

public class PopupController implements Initializable {

    @FXML
    private Pane rect;

    private double xOffset;
    private double yOffset;

    @Override
    public void initialize(URL url, ResourceBundle rb) {
         Platform.runLater(new Runnable(){
             private Parent root;
          @Override
          public void run(){

              Stage stage = Stage.class.cast(rect.getScene().getWindow());

              makeDraggable(stage, rect);

                 }});
    }

    @FXML
    public void initialize(){
        System.err.println("init popup called");
        assert rect != null;
              Stage stage = Stage.class.cast(rect.getScene().getWindow());

              makeDraggable(stage, rect);

    }

    public void makeDraggable( final Stage stage, final Node byNode) {      
    byNode.setOnMousePressed(new EventHandler<MouseEvent>() {      
    @Override public void handle(MouseEvent mouseEvent) {       
     // record a delta distance for the drag and drop operation.        
    xOffset = stage.getX() - mouseEvent.getScreenX();        
    yOffset = stage.getY() - mouseEvent.getScreenY();        
    byNode.setCursor(Cursor.MOVE);      
    }    
    });    
    byNode.setOnMouseReleased(new EventHandler<MouseEvent>() {      
        @Override public void handle(MouseEvent mouseEvent) {       
        byNode.setCursor(Cursor.DEFAULT);     
        }    
    });    
    byNode.setOnMouseDragged(new EventHandler<MouseEvent>() {      
    @Override public void handle(MouseEvent mouseEvent) {        
    stage.setX(mouseEvent.getScreenX() + xOffset);        
    stage.setY(mouseEvent.getScreenY() + yOffset);      
    }    });    
byNode.setOnMouseEntered(new EventHandler<MouseEvent>() {      
@Override public void handle(MouseEvent mouseEvent) {        
if (!mouseEvent.isPrimaryButtonDown()) {          
byNode.setCursor(Cursor.DEFAULT);       
 }      }    });    
byNode.setOnMouseExited(new EventHandler<MouseEvent>() {      
@Override public void handle(MouseEvent mouseEvent) {        
if (!mouseEvent.isPrimaryButtonDown()) {         
 byNode.setCursor(Cursor.DEFAULT);       
 }      }    }); 
 }


  @FXML
    private Button closeButton;

  @FXML
    public void changeButtonOnOverClose(){
        closeButton.getStyleClass().add("btn_cerrar_over");
    }

    @FXML
    public void changeButtonOnExitedClose(){
        closeButton.getStyleClass().remove("btn_cerrar_over");
    }

   @FXML
    public void exit(){
        Stage stage = Stage.class.cast(closeButton.getScene().getWindow());
        stage.close();
    } 
}
rect.setStyle("-fx-background-color: transparent;");