我刚刚开始学习Javafx,到目前为止我真的很喜欢它.但是在我当前的项目中,我需要使用文本作为javafx滑块的刻度标签.我google了很多,但找不到任何帮助.所以例如我想要一个4-5个位置的滑块,它们是"坏","好"等,而不是1,2,3,......
我知道我可以手动构建一个自定义UI,标签放置在正确的位置,但我需要生成带有自定义文本的滑块,每次都有不同的长度,所以它不起作用.例如,在摆动中可以使用哈希表更改标签,所以我的问题是,是否可以在Javafx中执行此操作?
jew*_*sea 10
以下是使用slider.setLabelFormatter的示例.
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Slider;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;
import javafx.util.StringConverter;
public class SlidingScale extends Application {
@Override
public void start(Stage primaryStage) throws Exception{
Slider slider = new Slider(0, 3, 0);
slider.setMin(0);
slider.setMax(3);
slider.setValue(1);
slider.setMinorTickCount(0);
slider.setMajorTickUnit(1);
slider.setSnapToTicks(true);
slider.setShowTickMarks(true);
slider.setShowTickLabels(true);
slider.setLabelFormatter(new StringConverter<Double>() {
@Override
public String toString(Double n) {
if (n < 0.5) return "Novice";
if (n < 1.5) return "Intermediate";
if (n < 2.5) return "Advanced";
return "Expert";
}
@Override
public Double fromString(String s) {
switch (s) {
case "Novice":
return 0d;
case "Intermediate":
return 1d;
case "Advanced":
return 2d;
case "Expert":
return 3d;
default:
return 3d;
}
}
});
slider.setMinWidth(380);
HBox layout = new HBox(slider);
layout.setPadding(new Insets(30));
primaryStage.setScene(new Scene(layout));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Run Code Online (Sandbox Code Playgroud)
由于JavaFX 2.2中的错误,上面的示例仅适用于Java 8.
当你使滑块变小时,一些标签会消失,所以我在滑块上设置了一个最小宽度,以便标签保留(另一种解决方案,可能是设置一个新的标签格式化程序,如果滑块大小很小,则使用缩写标签).
您可能还有兴趣投票或评论以下功能请求:RT-27863 LabelFormatter不足以自定义Slider刻度.
归档时间: |
|
查看次数: |
5656 次 |
最近记录: |