gpt4 book ai didi

Java Swing JSlider(垂直)改变 thumbRect 弄乱了 slider 控件

转载 作者:行者123 更新时间:2023-11-30 08:09:44 25 4
gpt4 key购买 nike

我正在尝试覆盖 paintThumb 以显示图形 slider 拇指。只要我不弄乱图像的大小并让它根据拇指的现有大小进行绘制,拇指图像和 slider 就可以正常工作。如果我更改 thumbRect 或我的图像的大小,我将无法捕获拇指或移动 slider 不再有效。这是一个垂直的 JSlider。

注意:感谢 trashgod 提供的解决方案。见代码。
注 2:更新为现在是一个可接受的工作示例。
注 3:最初的问题是由在 paintThumb 中调整大小引起的。

这是 slider :

sliders[channel].setUI(new customSliderHandle(sliders[channel], busType));

这是类:

private static class customSliderHandle extends BasicSliderUI {

String sBusType;
Image image;

public customSliderHandle(JSlider slider, String busType) {
super(slider);

sBusType = busType;

try {
if(sBusType.equals("ch")) {
//noinspection ConstantConditions
image = ImageIO.read(getClass().getClassLoader().getResource("web/images/black-slider.png"));
} else {
//noinspection ConstantConditions
image = ImageIO.read(getClass().getClassLoader().getResource("web/images/yellow-slider.png"));
}
} catch (IOException e) {
e.printStackTrace();
}
}

@Override
protected void calculateThumbSize() {
super.calculateThumbSize();

//// Fixed!!!
thumbRect.setSize(20, 40);
}

@Override
public void paintThumb(Graphics g) {

///// This was the original problem. Move into
///// calculateThumbSize() resolved the problem.
///// thumbRect.setSize(20, 40);

int x = thumbRect.x;
int y = thumbRect.y;
int width = thumbRect.width;
int height = thumbRect.height;
g.drawImage(image, x, y, width, height, null);
}
}

最佳答案

在调用 paintThumb() 时,BasicSliderUI已经根据 getThumbSize() 的结果计算出 thumbRect。此外,由于其未知的延迟,您不应在 paint() 中调用 ImageIO.read()。相反,异步加载图像,可能使用 SwingWorker 如图所示 here ,并在您的 getThumbSize() 实现中使用图像的尺寸。请注意,如果您的 image 不是方形的,您应该考虑 getOrientation() 的结果。

关于Java Swing JSlider(垂直)改变 thumbRect 弄乱了 slider 控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32208856/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com