2012-09-25 4 views
1

Java 7에 window translucency functionality 버그가있는 것 같습니다 (Java 6에도 문제가 있다고 생각됩니다). 반투명 창을 열고 부모 창을 최소화하면 둘 다 예상대로 사라집니다. 그러나 부모 창을 복원하면 반투명 창이 다시 나타나지 않습니다. 그러나 그것은 여전히 ​​존재하며 잘못된 것이없는 것처럼 입력을 소비합니다. 여기 주 창이 최소화 될 때 투명도가있는 JDialog가 사라집니다.

내 SSCCE입니다 :

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class BrokenTranslucentWindow extends JApplet //same problem exists using a JFrame 
{ 
    public BrokenTranslucentWindow() 
    { 
     JButton b = new JButton("Hello"); 
     b.addActionListener(new ActionListener() 
     { 
      @Override 
      public void actionPerformed(ActionEvent e) 
      { 
       JDialog d = new JDialog(Window.getWindows()[0]) 
       { 
        @Override 
        public void paint(Graphics g) 
        { 
         g.fillOval(0, 0, getWidth(), getHeight()); 
        } 
       }; 
       d.setUndecorated(true); 
       d.setBackground(new Color(0, 0, 0, 0)); 
       d.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); 
       d.setSize(300, 300); 
       d.setLocationRelativeTo(null); 
       // d.setModal(true); 
       d.setVisible(true); 
      } 
     }); 
     this.add(b); 
    } 
} 

당신은 부모 창을 복원 한 후 반투명 타원형 창이 표시되지 않습니다 것입니다,하지만 당신은 끝났다 때 커서가 손 모양 커서로 변경됩니다 윈도우가 있어야하는 영역.

나는 bug to Oracle을 제출했지만 해결 될 때까지는 더 나은 해결 방법을 사용할 수 있습니다.

내 질문 :

는 사람이 발생하지 않도록 할 해결 방법에 대한 아이디어가 있습니까?

재미있는 사실 : 반투명 창을 모달로 일어난 경우

  • 이 큰 문제가 발생합니다.
  • 저는 픽셀 단위의 투명도에 초점을 맞추고 있지만 균일 한 반투명에도 동일하게 적용됩니다.
  • 이 문제는 JFrames, 브라우저 안의 애플릿 및 애플릿 뷰어 내의 애플릿과 함께 나타납니다.

답변

2

바람직하지 않음 해결 방법. 창의적인 주스가 나오기를 희망하며 게시합니다. 일시적인 해결책은 창을 비활성화 할 때 투명도를 끄고 활성화 될 때 다시 켜는 것입니다.

d.addWindowListener(new WindowAdapter() 
{ 
    public void windowActivated(WindowEvent e) 
    { 
     d.setBackground(new Color(0, 0, 0, 0)); 
    } 

    public void windowDeactivated(WindowEvent e) 
    { 
     d.setBackground(Color.white); 
    } 
}); 

이 창을 클릭하면 불투명하게되기 때문에 이것은 이상적이지 않습니다. 그러나 으로 창을 영원히 사라지지 않게합니다.

+0

감사! 이것은 나에게 많은 어려움을 덜어 줬다. 개인적으로 나는 이렇게했습니다 : public void windowIconified (WindowEvent e) { instance.setBackground (Color.white); } public void windowActivated (WindowEvent e) { instance.setBackground (new Color (0, 0, 0, 0)); } 이제 최소화 된 경우에만 불투명 해지고 다른 응용 프로그램에 포커스가있을 때는 불투명 해집니다. – Frunk

관련 문제