107 lines
2.1 KiB
Java
107 lines
2.1 KiB
Java
package com.imyeyu.fx.ui.components;
|
|
|
|
import com.imyeyu.java.bean.CallbackArgReturn;
|
|
import javafx.beans.property.DoubleProperty;
|
|
import javafx.beans.property.StringProperty;
|
|
import javafx.scene.control.Label;
|
|
import javafx.scene.control.ProgressBar;
|
|
import javafx.scene.layout.StackPane;
|
|
import lombok.Getter;
|
|
import lombok.Setter;
|
|
|
|
/**
|
|
* 标签进度。如果继承进度组件使用反射注入标签组件时,在设置标签文本会导致标签消失
|
|
*
|
|
* @author 夜雨
|
|
* @since 2022-08-09 10:48
|
|
*/
|
|
@Getter
|
|
public class LabelProgressBar extends StackPane {
|
|
|
|
private static final String STYLE_CLASS = "label-progress-bar";
|
|
|
|
/** 标签组件 */
|
|
protected final Label label;
|
|
|
|
/** 进度组件 */
|
|
protected final ProgressBar bar;
|
|
|
|
/** 标签转换回调,进度变换时触发回调 */
|
|
@Setter
|
|
protected CallbackArgReturn<Double, String> converter;
|
|
|
|
/** 默认构造 */
|
|
public LabelProgressBar() {
|
|
label = new Label();
|
|
bar = new ProgressBar();
|
|
bar.prefWidthProperty().bind(widthProperty());
|
|
bar.getStyleClass().add(STYLE_CLASS);
|
|
|
|
getChildren().addAll(bar, label);
|
|
|
|
bar.progressProperty().addListener((obs, o, p) -> {
|
|
if (converter != null) {
|
|
if (p == null) {
|
|
label.setText(converter.handler(-1D));
|
|
} else {
|
|
label.setText(converter.handler(p.doubleValue()));
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
/**
|
|
* 获取当前标签文本
|
|
*
|
|
* @return 标签文本
|
|
*/
|
|
public String getText() {
|
|
return label.getText();
|
|
}
|
|
|
|
/**
|
|
* 设置标签文本
|
|
*
|
|
* @param text 标签文本
|
|
*/
|
|
public void setText(String text) {
|
|
label.setText(text);
|
|
}
|
|
|
|
/**
|
|
* 获取标签文本监听
|
|
*
|
|
* @return 标签文本监听
|
|
*/
|
|
public StringProperty textProperty() {
|
|
return label.textProperty();
|
|
}
|
|
|
|
/**
|
|
* 设置进度值
|
|
*
|
|
* @param progress 进度值,取值范围 [0, 1]
|
|
*/
|
|
public void setProgress(double progress) {
|
|
bar.setProgress(progress);
|
|
}
|
|
|
|
/**
|
|
* 获取进度值
|
|
*
|
|
* @return 进度值
|
|
*/
|
|
public double getProgress() {
|
|
return bar.getProgress();
|
|
}
|
|
|
|
/**
|
|
* 获取进度监听
|
|
*
|
|
* @return 进度监听
|
|
*/
|
|
public DoubleProperty progressProperty() {
|
|
return bar.progressProperty();
|
|
}
|
|
}
|