Я новичок в JavaFX. Я пытаюсь создать свой собственный подкласс Button, который будет иметь на анимации для ввода мыши и мыши. Анимация, которую я пытаюсь достичь, - это простой «темный» или «тусклый» переход, который будет затемнять цвет фона кнопки, когда пользователь навешивается над кнопкой, и будет оживлять его до нормального состояния, когда мышь выйдет из кнопки.JavaFX Transition - Darken button on hover
Сначала я думал, что смогу добиться этого с помощью FillTransition, но для этого мне понадобится конкретный темный цвет кнопки, который зависит от цвета кнопки. Итак, теперь я пытаюсь в основном исчезать и исчезать черным прямоугольником с низкой непрозрачностью поверх кнопки, но прямоугольник, похоже, вообще не появляется.
Вот код моей кнопки:
public class FlatButton extends Button {
private Rectangle dimRectangle;
private Duration dimDuration = Duration.millis(250);
private Color dimColor = new Color(0,0,0,0.11);
public FlatButton(String text) {
super(text);
getStyleClass().addAll("flat-button-style");
createEffect();
}
private void createEffect()
{
dimRectangle = new Rectangle(this.getWidth(), this.getHeight(), dimColor);
dimRectangle.setOpacity(1.0);
dimRectangle.setX(this.get);
FadeTransition enterTransition = new FadeTransition(dimDuration, this);
enterTransition.setInterpolator(Interpolator.EASE_OUT);
enterTransition.setFromValue(0.0);
enterTransition.setToValue(1.0);
FadeTransition exitTransition = new FadeTransition(dimDuration, this);
exitTransition.setInterpolator(Interpolator.EASE_OUT);
exitTransition.setFromValue(1.0);
exitTransition.setToValue(0.0);
this.setOnMouseEntered(new EventHandler<MouseEvent>(){
public void handle(MouseEvent mouseEvent){
enterTransition.play();
}
});
this.setOnMouseExited(new EventHandler<MouseEvent>(){
public void handle(MouseEvent mouseEvent){
exitTransition.play();
}
});
}
}
EDIT: Часть в коде "новый FadeTransition (dimDuration, это);" должен быть «новый FadeTransition (dimDuration, dimRectangle);». Это то, что я тестировал.
EDIT2: Я понял, что "dimRectangle = новый Rectangle (this.getWidth(), this.getHeight(), dimColor);" на самом деле не работает, но я еще не нашел способ сделать прямоугольник заполнить размеры кнопок.
Если это не вне этого кода, вы, похоже, не добавляете 'dimRectangle' нигде на сценографе? – berry120
Нет, это не вне кода. Могу ли я добавить его как-то прямо в этот класс кнопок? Я как бы следовал этому текстуальному эффекту: https://github.com/nonameplum/md-button-fx-sample/blob/master/src/main/java/pl/plum/mdbuttontest/MaterialDesignButton.java Он, похоже, не добавляется туда к графику сцены. – Near
Я не вижу, как это добавлено в сценарий в этом коде. Маршрут, по которому я бы спустился, состоял в том, чтобы добавить и это, и кнопку «Button» в «StackPane», тогда вы должны иметь возможность «setMouseTransparent()» на прямоугольнике и исчезать одинаково. – berry120