java - JSlider问题: Position after leftclick

标签 java swing user-interface jslider

每当我单击一个 JSlider 时,它都会在单击的方向定位一个 majorTick,而不是跳到我实际单击的位置。 (如果 slider 位于点 47 并且我单击 5,它将跳转到 37 而不是 5)。在使用 JSlider 时有什么方法可以更改它,还是我必须使用其他数据结构?

最佳答案

尽管这看起来很奇怪,但实际上控制这种行为的是外观。看一下 BasicSliderUI,您需要重写的方法是 scrollDueToClickInTrack(int) .

为了将 JSlider 的值设置为最接近用户在轨道上单击的位置的值,您需要在 的鼠标坐标之间进行一些奇特的转换getMousePosition() 到一个有效的轨道值,同时考虑 Component 的位置、它的方向、大小和刻度之间的距离 。幸运的是,BasicSliderUI 为我们提供了两个方便的函数来执行此操作:valueForXPosition(int xPos)valueForYPosition(int yPos) :

JSlider slider = new JSlider(JSlider.HORIZONTAL);
slider.setUI(new MetalSliderUI() {
    protected void scrollDueToClickInTrack(int direction) {
        // this is the default behaviour, let's comment that out
        //scrollByBlock(direction);

        int value = slider.getValue(); 

        if (slider.getOrientation() == JSlider.HORIZONTAL) {
            value = this.valueForXPosition(slider.getMousePosition().x);
        } else if (slider.getOrientation() == JSlider.VERTICAL) {
            value = this.valueForYPosition(slider.getMousePosition().y);
        }
        slider.setValue(value);
    }
});

关于java - JSlider问题: Position after leftclick,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/518471/

相关文章:

C 程序,用户输入到单个数组中

c++ - QML ComboBox 项 DropDownMenu 样式

python - 在哪里可以找到 Python 的 GUI 设计器?

java - JLabels 变得非常小

java - JFreeChart AutoRange 不适用于同一绘图上的多个系列

java图像透明度(图像丢失)

java - 在 Java 中,netbeans init();使用方法,其目的是什么?

java - 这个打印可以在 Flash/Java 中完成吗?

java - 选择菜单,java中用户的选择

Java 获取编译时安全的方法名