2013-02-06 2 views
1

내 프로젝트에서 JWindow를 사용하여 장식되지 않은 UI를 표시하고 작업 표시 줄에도 나타나지 않습니다. 그러나 JWindow는 항상 다른 모든 창 위에있는 것으로 보입니다. 나는 setAlwaysOnTop을 false로 설정하려고 시도했지만 도움이되지 않았다. 여기 모든 윈도우 상단에 JWindow가 나타나지 않도록합니다.

문제를 재현 할 수있는 코드입니다 :

package test; 

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JOptionPane; 
import javax.swing.JWindow; 

public class Test extends JWindow implements ActionListener { 

    public Test() { 
     setSize(300, 300); 
     setLocationRelativeTo(null); 
     setAlwaysOnTop(false); 

     JButton myButton = new JButton("Click Here"); 
     myButton.addActionListener(this); 
     getContentPane().add(myButton); 

     setVisible(true); 
    } 

    public static void main(String[] args) { 
     new Test(); 
    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     if(e.getActionCommand().equals("Click Here")) 
      JOptionPane.showMessageDialog(this, "This dialog box appears behind the JWindow!"); 
    } 
} 

내 OS가 리눅스이고 내가 Windows에서 내 응용 프로그램을 테스트하는 동안, I가되는 JDialog를 사용하고, 또한 오라클 JDK 6을 사용하고 있습니다 UI 및 그것은 잘 작동했다. 그러나 Linux에서는 JDialog가 작업 표시 줄에 표시됩니다.

이 문제를 해결하는 방법에 대한 도움이 필요하십니까? 나중에, 당신은 단순히, 스택 순서의 상단에 당신이 그것을 가지고 싶어,

setVisible(true); 
toBack(); 

경우 : True로 윈도우의 가시성을 설정 한 후

+0

[Linus의 Modal 및 ModalityTypes에 대한 일반적인 문제인 것처럼 보입니다.] (http://stackoverflow.com/questions/14645761/modal-dialog-not-always-on-top-of-an -undecorated-jframe-when-another-jframe-is-v) – mKorbel

+0

저는 Modality에 문제가 있다고 생각하지 않습니다. JWindow가 위에있을 때 나는 다른 윈도우와 어플리케이션에 접근 할 수있다. 그러나 JWindow는 되돌아 가지 않으며 항상 맨 위에 있습니다. –

답변

0

, 당신은 다음과 같이 뒷면에 보내 전화 : 여기

toFront(); 

자세한 내용 :

http://docs.oracle.com/javase/6/docs/api/java/awt/Window.html#toBack()

http://docs.oracle.com/javase/6/docs/api/java/awt/Window.html#toFront()

+0

답장을 보내 주셔서 감사합니다.하지만 toBack()을 실행하면 애플리케이션 내의 스태킹 순서 만 되돌려 보내집니다. JWindow는 여전히 실행중인 다른 모든 응용 프로그램 위에 유지됩니다. –

+0

아, 지금은 잘 알고 있습니다. 자바 가상 머신이 OS의 비주얼 데코레이터에 액세스 할 수 없기 때문에 대부분 OS의 문제입니다. http://docs.oracle.com/javase/1.5.0/docs/api/java/awt/Window.html#setAlwaysOnTop(boolean) 설명서에서도이 메모가 표시됩니다. 일부 플랫폼에서는 항상 지원되지 않을 수 있습니다. 온 - 톱 윈도우. 플랫폼이 런타임에 맨 앞면을 지원하는지 여부를 감지 할 공용 API는 없습니다. –

+0

또한 Linux의 작업 표시 줄은 무엇입니까? 당신은 당신의 OS가 리눅스라고 말합니다. 잘못되었습니다. OS의 커널은 리눅스지만, OS는 다른 것입니다. (우분투, 페도라, 오픈 수세, 데비안 등 ...)이 모든 배포판은 서로 다른 (가능하게 customizabile 한) 데코레이터, 그리고 내가 말한대로 자바 VM은 그들에게 접근 할 수 없다. 더 자세히 조사하고 싶다면 OS와 데코레이터를 사용하고 있는지 확인하고 더 많은 정보를 얻으십시오. 나는 당신이 그런 것을 필요로하는 좋은 이유를 볼 수는 없지만 당신은 그걸 필요로한다고 설명한다. 당신이 왜 이것을 필요로하는지 설명한다면, 우리는 당신에게 대안을 줄 수도있다. –

관련 문제