gpt4 book ai didi

java - 为什么 graphics.drawString() 不重绘?

转载 作者:行者123 更新时间:2023-11-29 08:19:30 27 4
gpt4 key购买 nike

这超出了我的范围(请原谅,已经晚了)。我正在对 WindowsSliderUI 进行子类化,因为我希望它画出更大的拇指(这是正确的词吗?)(这是有效的)并且还在其上方显示 slider 的值(例如,gtk 外观和感觉确实如此) )(那坏了)。我正在覆盖 paint() 方法,目前它看起来像这样:(它很长,我的更改接近底部):

Rectangle knobBounds = thumbRect;
int w = knobBounds.width;
int h = knobBounds.height;

g.translate(knobBounds.x, knobBounds.y);

if ( slider.isEnabled() ) {
g.setColor(slider.getBackground());
}
else {
g.setColor(slider.getBackground().darker());
}

Boolean paintThumbArrowShape =
(Boolean)slider.getClientProperty("Slider.paintThumbArrowShape");

if ((!slider.getPaintTicks() && paintThumbArrowShape == null) ||
paintThumbArrowShape == Boolean.FALSE) {

// "plain" version
g.fillRect(0, 0, w, h);

//THE ONES THAT MATTER
g.setColor(Color.BLACK);
String val = slider.getValue()+"";
g.drawString(val, 0, 0);
g.setColor(Color.RED);
g.drawLine(0, 0, 30, 8);
//END

g.setColor(Color.black);
g.drawLine(0, h-1, w-1, h-1);
g.drawLine(w-1, 0, w-1, h-1);

g.setColor(getHighlightColor());
g.drawLine(0, 0, 0, h-2);
g.drawLine(1, 0, w-2, 0);

g.setColor(getShadowColor());
g.drawLine(1, h-2, w-2, h-2);
g.drawLine(w-2, 1, w-2, h-3);
}

我想要的只是让值显示在拇指上方。然而,现在发生的是字符串最初显示,但是当我拖动 slider 时,它会停留在同一个位置(不改变值)直到我释放鼠标按钮,此时它会在正确的位置重新绘制值(value)。为了让我的头脑变得更有趣,drawLine() 方法工作正常 - 当我拖动它时,线总是在拇指上。现在,这可能是一个微不足道的错误(我真的不行,累了),但请帮我找到它。请注意,如果您看到解决整个问题的更好方法,也请告诉我。正如我所说,我真的不擅长这个,而且我倾向于把事情弄得比实际情况更复杂。

非常感谢

最佳答案

我不知道完整的答案,但是你调用

 g.drawString(val, 0, 0);

看起来很狡猾。您指定给 drawString 的坐标是字符串中最左边字符的基线,而不是字符串的左上角。通常像您这样的调用不会出现任何结果,因为所有或大部分字符串都绘制在裁剪矩形之外。

也许你的意思是这样的:

    final int height = g.getFontMetrics().getAscent();
g.drawString(s, 0, height);

关于java - 为什么 graphics.drawString() 不重绘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1376759/

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