2012-03-22 4 views
0

JDialog를 사용하여 응용 프로그램의 오른쪽 하단에 알림을 표시하고 있습니다. 최대 4 개의 알림을 표시하고 가장 최근의 알림이 맨 위에 표시됩니다. 알림은 서버의 내용에 따라 표시되므로 알림이 1 개 또는 최대 4 개일 수 있습니다. JDialog의 크기를 조정하고 JDialog의 위치를 ​​변경하여 크기가 오른쪽 아래 모서리에 항상 정렬되도록합니다. 새로운 알림 수입이 발생할 때마다 위치를 변경하면 JDialog가 깜박입니다.알림으로 JDialog의 깜박임/깜박임

private void updateDialog() 
{ 

    Point p = frame.getLocationOnScreen(); 
    p.x += frame.getWidth()-getWidth()-5; 
    p.y += frame.getHeight()-getHeight()-25; 

    setLocation(p); 
    pack(); 
    repaint(); 
} 

은 누구를 닮아 문제가 있었나요 : 새로운 통지가 올 때 아래

내가 매번 전화 코드를 무엇입니까? 어떻게 그걸 해결 했니? 내가 뭘하려고해야하는지에 대한 다른 충고는?

+1

포스트 SSCCE (http://sscce.org) 우리는 문제를 찾을 수 있습니다. 하지만 깜박 거리지 않아야합니다. –

+0

@Guillaume Polet SSCCE는 오늘 나를 위해 :-), 나는 그것에 관해 폐하에게 요청을 보냈다 :-) – mKorbel

+0

@mKorbel 나는 그것을 다시 시도했지만 괜찮다. 아직도 너를 위해서? BTW - * "폐하"*? 아니, 그냥 "He-man, 우주의 주인"은 괜찮을거야. ;) –

답변

3
  • contraproductive는 다시 그리기 (과 코드 라인), 그 제거

  • 무효 updateDialog(), 더 좋은 그렇지 않으면 (팩, 것) 안에 다른 코드 라인이이 되풀이할지되어 있지 않은 경우입니다 into invokeLater();

코드

private void updateDialog() { 
    setVisible(false); 
    Point p = frame.getLocationOnScreen(); 
    p.x += frame.getWidth() - getWidth() - 5; 
    p.y += frame.getHeight() - getHeight() - 25; 
    setLocation(p); 
    SwingUtilities.invokeLater(new Runnable() { 

     @Override 
     public void run() { 
      pack(); 
      //repaint(); // useless remove this codeline 
      setVisible(true); 
     } 
    }); 
} 
+0

왜 그냥 숨기고 대화 상자를 보여줄지 궁금해하고 getWidth() 및 getHeight()가 LayoutManager에 의해 설정된 업데이트 된 값을 반환하도록 setLocation 전에 'pack()'호출이 발생해서는 안되는 지 궁금합니다. ? –

+0

'Initial Thread'에 대한 모든 것은 나에게'pack'과'setVisible' 두 가지 메소드에 관한 것입니다. btw 나는 OP 코드를 사용하여 아주 좋은 경험을했습니다. OP'a)'re_use JDialog 또는'b)'가 런타임에 새로움 – mKorbel

+0

@Guillaume Polet 이제 주석에서 URL을 사용하는 방법을 모르겠다 (도움말 하단의 왼쪽 하단). [링크] (http://example.com) ", 여기 표시되는 문자는"[link] "여기와 url '"(http://example.com) " – mKorbel

관련 문제