2016-09-17 2 views
0

Я создал пользовательский индикатор выполнения в JavaFX. Теперь я хочу добавить эффект свечения в progressBar.Как добавить эффект свечения В пользовательском шаге прогресса JavaFX

Для этого я создал эллипс с эффектом гауссова размытия и добавьте центр X эллипса в шкалу времени, чтобы я мог анимировать эффект свечения в индикаторе выполнения.

Это код создает эллипс

public Ellipse glowshape; 
DropShadow glowEffect; 
SimpleDoubleProperty width; 

//create ellipse for gloweffect 
public void createEllipse(){ 

    glowshape = new Ellipse(25, 20, 10, 15); 
    glowshape.setFill(Color.rgb(255,255,255,.7)); 
    glowshape.setEffect(new GaussianBlur(5)); 
} 


public void init(){ 
    indetermination(); 
    setStartAnimation(); 
    createEllipse(); 

    width = new SimpleDoubleProperty(0); 
    width.bind(this.widthProperty()); 
    setGlowAnimation(); 
} 

Это метод для анимации

public void setGlowAnimation(){ 

    KeyValue value = new KeyValue(glowshape.centerXProperty(),width.doubleValue(),Interpolator.EASE_OUT); 

    KeyFrame keyframe1 = new KeyFrame(Duration.millis(2000),value); 

    glow_timeline = new Timeline(); 
    glow_timeline.setCycleCount(Timeline.INDEFINITE); 
    glow_timeline.setAutoReverse(true); 
    glow_timeline.getKeyFrames().add(keyframe1); 
} 

Хотя я Свяжите свойство ширины с шириной настраиваемого свойством бара так эллипс CenterX Безразлично не превышайте текущий ход индикатора выполнения и должны возвращаться назад. Но это не происходит, когда анимация запускает его, просто перемещает определенное, а затем застревает. Я думаю, что целевое значение Keyvalue вообще не обновляется в методе анимации.

Было бы здорово, если бы кто-нибудь помог мне в этом.

+0

Может быть, вы могли бы поделиться фрагмент кода, показывающий, как вы создали прогресс бар? – davidrpugh

ответ

0

Здесь вы:

//Create the ProgressBar 
    ProgressBar progressBar = new ProgressBar(); 

    //Create a drop shadow effect 
    DropShadow glowEffect= new DropShadow(); 
    glowEffect.setOffsetY(0f); 
    glowEffect.setOffsetX(0f); 
    glowEffect.setColor(Color.RED); 
    glowEffect.setWidth(depth); 
    glowEffect.setHeight(depth); 

    progressBar.setEffect(glowEffect); //Apply the glowEffecteffect to the JavaFX ProgressBar 

Упоминание, что:

1) Для того, чтобы изменить ширину/высоту glowEffect вы можете изменить setWidth(..); и setHeight(); .Mention что методы setOffSetX(0);setOffSetY(0f); используются для центровки glowEffect.

2) Процедура такая же для costum progressBar, поскольку она расширяет класс Node.

Также я добавить этот link в случае, если вам нужно что-то вроде:

enter image description here

enter image description here

+0

Привет, Я пробовал свой код, но он не работал. Демон создает эффект за пределами узла. Однако, я создал Ellipse с эффектом гауссовского размытия, а затем запустил анимацию, чтобы оживить эффект свечения на протяжении полосы хода во время выполнения. Я также привязываю целевое значение значений ключей с помощью свойства ширины полосы выполнения. Но он не работает Кроме того, он немного движется и застревает. Целевое значение не обновляется. Я не понимаю, почему это происходит. Можете ли вы помочь мне в этом –