2009-09-04 4 views
1

이것은 나를 초월합니다 (용서하십시오, 늦었습니다). 나는 더 큰 엄지를 그려야하기 때문에 WindowsSliderUI를 서브 클래 싱하고있다. (올바른 단어인가?) (작동하고있다.) 또한 바로 위의 슬라이더 값을 표시한다. (예를 들어, gtk와 비슷하다.) (그것은 부서졌다). 나는 페인트() 메서드를 재정의하고있어, 순간에 그것은 다음과 같습니다 (내 변화가 바닥 근처에 오래입니다) :java - 왜 graphics.drawString()을 다시 그리지 않습니까?

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() 메서드는 잘 작동합니다. 선을 드래그하면 선이 항상 엄지 손가락에있게됩니다. 지금은 사소한 실수 일뿐입니다 (나는 정말로 좋지도 피곤합니다).하지만 제발 도와주세요. 만약 당신이 전체적인 문제에 대해 더 나은 접근법을 보게된다면 저에게도 알려주십시오. 내가 말했듯이, 나는 이것에별로 좋지 않다. 나는 일을 더 복잡하게 만드는 경향이있다.

덕분에 많은

답변

5

나는 완전한 답변을 잘 모르겠지만,

g.drawString(val, 0, 0); 

에 전화는 사기 보인다. drawString에 지정하는 좌표는 문자열의 가장 왼쪽 문자의 기준선이 아니라 문자열의 가장 왼쪽 문자의 기준선입니다. 일반적으로 문자열은 전부 또는 대부분이 클리핑 사각형 외부로 그려지기 때문에 아무 것도 나타나지 않습니다.

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

은 아마 당신이 뭔가를 의미

관련 문제