gpt4 book ai didi

java - 自定义Jslider初始化问题

转载 作者:太空宇宙 更新时间:2023-11-04 08:56:43 25 4
gpt4 key购买 nike

我正在开发一个具有自定义轨道矩形的自定义 JSlider。我希望能够在首次声明 slider 时设置轨道矩形的颜色。

这是我所拥有的片段(这些类位于同一包中的单独文件中):

public class NewSlider extends JSlider {

Color kolor;

public NewSlider (Color k) {

kolor = k;
}

public void updateUI() {
setUI(new NewSliderUI(this, kolor);

updateLabelUIs();
}
}

public class NewSliderUI extends BasicSliderUI {

Color sliderColor = Color.BLACK;

public NewSliderUI (JSlider b, Color k) {
super(b);

sliderColor = k;
}

}

在上面的代码中,“kolor”最初为 null,当 NewSliderUI 尝试使用它时会导致错误。看起来 updateUI() 方法是在其他任何事情之前调用的。然后调用 NewSlider 构造函数。我尝试了各种方法,但由于 updateUI() 似乎先于其他任何操作运行,因此我添加到 NewSlider 类中的任何内容似乎都不重要。

如果我对颜色进行硬编码(即 setUI(new NewSliderUI(this, Color.BLACK);),那么它就可以工作,但为每种颜色设置不同的类似乎很愚蠢。

谢谢。

最佳答案

除非发生以下情况之一,否则我不明白 kolor 怎么可能为空:

  1. 您正在向构造函数传递 null 值
  2. 您没有在 Swing EDT 中实例化 NewSlider,并且遇到了一些奇怪的缓存问题
  3. NewSlider 是通过反射/反序列化构建的,并且 kolor 尚未设置。

您是否尝试过在调试器中使用一些断点运行它?我很想确保调用 NewSlider 构造函数(并且在 NewSliderUI 构造函数之前)。

编辑:我明白你的意思了。我忘记了 JSlider 的无参数构造函数是被隐式调用的。执行以下操作怎么样:

public class NewSlider extends JSlider {

Color kolor = Color.BLACK;

public NewSlider (Color k) {
kolor = k;
updateUI();
}

public void updateUI() {
setUI(new NewSliderUI(this, kolor);
updateLabelUIs();
}
}

您最终调用了 updateUI() 两次,但最终结果应该是您想要的。

关于java - 自定义Jslider初始化问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2141524/

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