JavaFX:标签的位置与 slider 中拖动按钮的位置不匹配

标签 java javafx slider

我的场景中有一个 slider 和一个标签。我写了一个匿名方法,它将根据 slider 的值设置标签的文本,然后将其直接放在 slider 的拖动按钮下。

timeSlider.valueProperty().addListener(new ChangeListener<Number>() {

            @Override
            public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
                final double timeSliderMin = timeSlider.getMin();
                timeLabel.setText(String.valueOf(newValue.intValue()));
                timeLabel.setLayoutX(timeSlider.getLayoutX() + (timeSlider.getValue() - timeSliderMin)
                        / (timeSlider.getMax() - timeSliderMin) * timeSlider.getWidth());
            }
});

在此上下文中,timeSlider 是 slider ,timeLabel 是我之前提到的标签。

以下是标签相对于 slider 未对齐的图片: enter image description here

上图显示,当 slider 处于最小值时,标签就在它的正下方。 enter image description here

但是,当 slider 处于最大值时,标签甚至没有与 slider 正确对齐。

我真的很感激任何关于我可能做错了什么的见解。

非常感谢。

最佳答案

好吧,您希望文本以拇指为中心,所以我想尝试将文本布局基于拇指位置,结果成功了。

我不一定要推荐像下面这样的解决方案。可能有更好的方法来完成此操作,或者至少有更好的方法来构建代码以使带标签的 slider 成为它自己的“控件”,但这只是我想出的方法似乎可以完成工作。

请注意,我将文本放在 slider 上方,因为这样看起来更有用。因为那时,当您拖动拇指时,文本不会被鼠标指针遮挡。

顺便说一句,带标签的 slider 想法实际上是个不错的想法。

min mid max

import javafx.application.Application;
import javafx.geometry.*;
import javafx.scene.Scene;
import javafx.scene.control.Slider;
import javafx.scene.layout.*;
import javafx.scene.text.Text;
import javafx.stage.Stage;

public class LabeledSlider extends Application {
    @Override
    public void start(Stage stage) {
        Text text = new Text();
        text.setTextOrigin(VPos.TOP);
        Slider slider = new Slider(7, 7_700, 4_200) {
            @Override
            protected void layoutChildren() {
                super.layoutChildren();

                Region thumb = (Region) lookup(".thumb");
                if (thumb != null) {
                    text.setLayoutX(
                            thumb.getLayoutX() 
                                    + thumb.getWidth() / 2 
                                    - text.getLayoutBounds().getWidth() / 2
                    );
                }
            }
        };
        slider.setLayoutY(20);
        text.textProperty().bind(slider.valueProperty().asString("%,.0f"));

        Pane sliderPane = new Pane(slider, text);
        slider.prefWidthProperty().bind(sliderPane.widthProperty());
        sliderPane.setPrefWidth(200);

        StackPane layout = new StackPane(sliderPane);
        layout.setPadding(new Insets(10));

        stage.setScene(new Scene(layout));
        stage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

关于JavaFX:标签的位置与 slider 中拖动按钮的位置不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37476032/

相关文章:

javascript - 如何将 Jquery slider 保留在某些 html 表格单元格中某些文本的右侧?

javascript - JQueryUI Slider - 当前位置的工具提示

c# - 使用 java xml api 将 xml 文档保存到文件

java - 如何下载从数据库中获取结果集的excel表

java - Twitter4j 计算找到的推文数量

combobox - 可编辑组合框 FXML 默认值

java - 录制声音JAVAFX

JavaFX Canvas 重绘不执行任何操作

jquery - 如何停止 Cypress 中的轮播 slider ?

java - 如何将 Java bean 属性映射到报告部件字段?