Files
timi-fx-ui/src/main/java/com/imyeyu/fx/ui/components/LabelProgressBar.java
2026-05-11 21:38:37 +08:00

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();
}
}