【问题标题】:java - why does graphics.drawString() not redraw?java - 为什么 graphics.drawString() 不重绘?
【发布时间】:2009-09-04 01:05:39
【问题描述】:

这超出了我的范围(请原谅,为时已晚)。我将 WindowsSliderUI 子类化,因为我希望它画一个更大的拇指(这是正确的词吗?)(这是有效的)并且还显示它上面的滑块的值(例如,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);
        }

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

非常感谢

【问题讨论】:

    标签: java user-interface swing


    【解决方案1】:

    我不知道完整的答案,但你来电

     g.drawString(val, 0, 0);
    

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

    也许你的意思是这样的:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-08
      • 2013-07-11
      • 2015-01-25
      相关资源
      最近更新 更多