2013-06-20 4 views
0

У меня проблема. Если я установил эффект всплывающего прямоугольника, эффект будет применен снова и снова. Так что это будет очень ... Что мне делать? Спасибо за помощь!Эффекты JavaFX на всплывающем выпуске

@Override 
public void start(final Stage stage) { 
    stage.setTitle("PopupXmpl"); 
    BorderPane root = new BorderPane(); 
    final Popup pop = new Popup(); 
    Circle circle = new Circle(400, 300, 200, Color.WHITESMOKE); 
    circle.setStroke(Color.BLACK); 
    circle.setOnMouseEntered(new EventHandler<MouseEvent>(){ 
      @Override 
      public void handle(MouseEvent t) { 
       Rectangle rectangle = new Rectangle(40, 15, Color.WHITE); 
       rectangle.setStroke(Color.DARKGREY); 
       rectangle.setArcHeight(4); 
       rectangle.setArcWidth(6); 

       pop.setHeight(100); 
       pop.setWidth(100); 
       pop.setX(t.getScreenX()); 
       pop.setY(t.getScreenY()-50); 

       rectangle.setEffect(new DropShadow()); 

       pop.getContent().add(rectangle); 
       pop.show(stage); 
      } 
     }); 
    circle.setOnMouseExited(new EventHandler<MouseEvent>(){ 
      @Override 
      public void handle(MouseEvent t) { 
       pop.hide(); 
      } 
     }); 

    root.getChildren().add(circle); 

    stage.setScene(new Scene(root, 800, 600)); 
    stage.show();   
} 

ответ

1

Вы добавляете прямоугольник на содержание всплывающего окна снова и снова на каждом MouseEntered случае. Добавьте его только один раз и измените только связанные с событиями свойства всплывающего окна по этому событию MouseEntered:

@Override 
public void start(final Stage stage) { 
    stage.setTitle("PopupXmpl"); 
    BorderPane root = new BorderPane(); 

    Rectangle rectangle = new Rectangle(40, 15, Color.WHITE); 
    rectangle.setStroke(Color.DARKGREY); 
    rectangle.setArcHeight(4); 
    rectangle.setArcWidth(6); 
    rectangle.setEffect(new DropShadow()); 

    final Popup pop = new Popup(); 
    pop.getContent().add(rectangle); 
    pop.setHeight(100); 
    pop.setWidth(100); 

    Circle circle = new Circle(400, 300, 200, Color.WHITESMOKE); 
    circle.setStroke(Color.BLACK); 
    circle.setOnMouseEntered(new EventHandler<MouseEvent>() { 
     @Override 
     public void handle(MouseEvent t) { 
      pop.setX(t.getScreenX()); 
      pop.setY(t.getScreenY() - 50); 
      pop.show(stage); 
     } 
    }); 
    circle.setOnMouseExited(new EventHandler<MouseEvent>() { 
     @Override 
     public void handle(MouseEvent t) { 
      pop.hide(); 
     } 
    }); 

    root.getChildren().add(circle); 

    stage.setScene(new Scene(root, 800, 600)); 
    stage.show(); 
} 
Смежные вопросы