Реклама

 
0 голосов
 
1235 просмотров
9.10.2016 / 19:52  Aladdin

Тени на Javafx

Как на Javafx делать нормальные тени, как на UCBrowser например, а то с скругленными углами получаются. Мне нужен именно окно без рамок, и белый прямоугольник с нормальными тенями.
https://annimon.com/forum/file...5%2012-51-21-454.png
Изм. aNNiMON от 15.10.2016 / 10:48
9.10.2016 / 20:27  Naik
А это не подходит? :gg: http://docs.oracle.com/javafx/...fect/DropShadow.html
Ответы
 
1 голос
 
# 15.10.2016 / 11:30  aNNiMON
Используй DropShadow + setEffect.

Вот два варианта: из кода и при помощи css
  1. HBox layout = new HBox();
  2. layout.setAlignment(Pos.CENTER);
  3.  
  4. Rectangle rect1 = new Rectangle(200, 200);
  5. rect1.setFill(Color.web("#404040"));
  6. rect1.setArcHeight(10);
  7. rect1.setArcWidth(10);
  8. DropShadow shadow1 = new DropShadow(8, Color.color(0, 0, 0, 0.5));
  9. rect1.setEffect(shadow1);
  10. layout.getChildren().add(rect1);
  11.  
  12. final Region region = new Region();
  13. region.setPrefWidth(50);
  14. layout.getChildren().add(region);
  15.  
  16. Rectangle rect2 = new Rectangle(200, 200);
  17. rect2.setId("rect2");
  18. layout.getChildren().add(rect2);
  19.  
  20. Scene scene = new Scene(layout, 600, 300);
  21. stage.setScene(scene);
  22. scene.getStylesheets().add("/styles/Styles.css");
  23. stage.show();

Styles.css
  1. #rect2 {
  2.     -fx-fill: #404040;
  3.     -fx-arc-width: 10;
  4.     -fx-arc-height: 10;
  5.     -fx-effect: dropshadow(three-pass-box, rgba(0, 0, 0, 0.5), 8, 0, 0, 0);
  6. }

https://annimon.com/qa/a120/shot-20161015T122914.png
Изм. aNNiMON от 15.10.2016 / 11:31

shot-20161015T122914.png (11.95 кб.)
 
0 голосов
 
# 15.10.2016 / 13:43  Aladdin
Спасибо, разобрался.
  1. Stage stage = new Stage(StageStyle.TRANSPARENT);
  2.         Group root = new Group();
  3.         root.getStylesheets().add("/style/style.css");
  4.         Scene scene = new Scene(root, 620.0, 320.0, Color.TRANSPARENT);
  5.         Rectangle rect = new Rectangle(600, 300);
  6.         rect.setLayoutX(10);
  7.         rect.setLayoutY(10);
  8.         rect.getStyleClass().add("shadow-window");
  9.         root.getChildren().add(rect);
  10.         stage.setScene(scene);
  11.         stage.show();
  1. .shadow-window
  2. {
  3.     -fx-fill: white;
  4.     -fx-effect: dropshadow(three-pass-box, rgba(0, 0, 0, 0.5), 8, 0, 0, 0);
  5. }
но если убрать
  1. rect.setLayoutX(10);
  2. rect.setLayoutY(10);
то тени слева и сверху пропадут. Как можно это исправить? и как все это красиво оформить? ))
Изм. Aladdin от 15.10.2016 / 13:45
15.10.2016 / 13:54  aNNiMON
Тени никуда не исчезают, просто эффект не учитывается в размерах прямоугольника, он всё так же остаётся 600x300. Вот и рисуется от 0:0, а тень за окном. Отступ в любом случае добавлять придётся, если хочешь видеть тень со всех сторон.
Всего: 2

Мы в соцсетях

vk tw tg yt

Пожертвования

Аноним2850 р.
Freddy1700 р.
riseremi1611 р.
NaruTrey800 р.
vlavolk637 р.