2011-04-18 4 views
2

여러 개의 컨트롤 (버튼, 텍스트 필드 등)으로 둘러싸인 데이터를 표시 할 하나의 큰 패널이있는 애플릿을 만들었습니다. 대형 패널에는 내가 직접 렌더링 한 여러 개의 레이블 레이어가 포함되어 있습니다.툴팁이 사라진 후 어떻게 다시 그리 나합니까?

컨트롤에는 모두 컨트롤과 관련된 툴팁이 있으며,이 툴팁 중 일부는 기본 패널과 겹칩니다. 사라지면 메인 패널이 다시 칠해질 때까지 메인 패널 이미지에 구멍이 생깁니다.

지금 생각해보십시오. 항상 그런 것은 아닙니다. 커서가 특정 범위에있는 경우에만 발생합니다. 왼쪽 또는 오른쪽으로 충분히 멀리 떨어져 있으면 (Y 축을 따라 바뀐 점에 유의하지 않음) 툴팁이 사라지면 구멍이 그려집니다.

툴팁 및 페인트 다시 칠하는 방법에 익숙하지 않은데, 내 프로그램에서 무언가 이상한 점이 있다는 징후 일 경우 툴팁이 표시 될 때마다 메인 패널에서 다시 칠하기 만하면됩니다. 사라져, 나는 괜찮을거야. 이런 일이 발생하도록 툴팁에서 무시할 수있는 것이 있습니까?

스윙을 사용하고 있습니다.

감사합니다.

+2

SSCCE가 좋을 것입니다. – jzd

+0

게시하기 전에 SSCCE를 만들어야한다고 생각합니다. 내 프로그램을 SSCCE로 스트리밍하려는 과정에서 문제가 발견되었습니다. 필자는 내 레이블 중 하나를 불투명하게 설정했습니다. 불투명하게 설정 한 선을 제거하면 문제를 해결할 수 있지만 게시 한 질문에 실제로 답하지는 못합니다. – BCarpe

+3

@ BCarpe, 그것은 SSCCE의 목적입니다. 건물은 문제를 드러내거나 다른 사람들이 빨리 그걸 가지고 놀 수있는 작은 것을 줄 것입니다. – jzd

답변

1

질문에 답하기 (주석에 의해 해결책을 찾은 후) : 스윙은 매우 정교한 재 페인트 관리 기능을 내장하고 있습니다. 툴팁이 사라지면 그 아래의 사각형이 다시 그려집니다.

이제 구성 요소를 다시 그려야합니까? 주어진 사각형과 겹치고 다른 구성 요소에 의해 (문제의 영역에서) 숨겨지지 않은 모든 사람들 - 그러나 불투명 한 구성 요소 만이 여기에 포함됩니다. (이것은 JComponent의 opaque 프로퍼티가 JComponent에 필요해 재 묘화를 최적화하기 위해서입니다.)

라벨이 불투명하다고 선언되었지만, 그 전체 영역이 실제로 paintComponent에 페인트되지 않았던 툴팁의 영역 도색되지 않은 채로있는 라벨로 덮여 있어야합니다.

레이블을 부분적으로 투명하게 선언하면 뒤의 구성 요소 관련 영역도 다시 그려집니다.

+0

좋아요, 그럼 제가 정말로 필요한 모든 정보를 제공합니다. 고마워, Paŭlo. 그러나 질문에 대한 답변을 철저히하기 위해 툴팁이 사라지면 repaint()를 구체적으로 호출하는 방법이 있습니까? 아니면 그런 일을하려는 것은 프로그래밍 실천이 잘못되었다는 것을 나타낼 것입니까? – BCarpe

+0

'JToolTip' 문서를 읽으면서 JLabel을 보여주는 툴팁을 서브 클래스 화하고'createToolTip' 메소드를 오버라이드해야합니다. 그런 다음 툴팁 객체에 리스너 (어쩌면 ComponentListener?)를 추가하거나 올바른 객체에서'repaint'를 호출하는'removeNotify' 메소드를 오버라이드 할 수 있습니다.이 문제는 더욱 복잡해 보이며 문제가 완전히 해결되지는 않습니다. 다른 창에 창이 겹쳐져있을 때 다시 칠하는 문제가 발생할 수 있기 때문입니다. 또한, 일반적인 재 페인트는 모든 것이 아닌 결함이있는 사각형 만 다시 칠할 것입니다. –

관련 문제