2011-10-04 4 views
5

예,이 질문은 어디 에나 있습니다. 그러나 (작동하는) 모든 솔루션은 AWTUtilities 툴킷을 사용합니다.이 툴킷은 제한되어 있습니다.자바 - 투명 JFrame, 제한된 라이브러리 없음

So. 난 그냥 내 창문의 불투명도를 제어하고 싶다. 모양을 정하거나 장식 할 필요가 없습니다. 그냥 투명 contentPane (쉬운) 및 투명 JFrame 배경 (엄청나게 어려운).

나는 어제 재료의 올바른 조합을 얻었지만, 지금은 그것을 재현 할 수없는 것처럼 보였습니다. 또한 AWTUtilities를 사용하지 않고도 일부 솔루션이 있지만 작동하지 않습니다 ... 누군가 좋은 솔루션을 가지고 있습니까?

내 고장 코드의 예 :

public static void main(String[] args) { 
    JFrame test = new JFrame(); 
    test.setSize(400, 400); 
    test.setLocationRelativeTo(null); 
    test.setUndecorated(true); 
    test.setBackground(new Color(0, 0, 0, 0)); 
    test.getContentPane().setBackground(new Color(0,0,0,0)); 
    test.setVisible(true); 
} 

그러나 이것은 단지 흰색 사각형을합니다. 가깝지만 시가는 없습니다. 또한 페인트 메서드를 재정의하려고 시도했지만 누군가가 알파 채널을 버리는 것에 대해 말하고 있었지만 그 덕분에 검정색이되었습니다. 그래서 ... 스택 오버플로입니다.

이 답변에 정확하게 속아가 있다면, 저를 가리켜 주시면 바로 삭제하겠습니다.

업데이트는 의견의 요청에 따라 , 여기에 내가 여기에 도착하는 방법의 역사입니다 : 첫 번째 링크 모두에 도착

이이 유사한 여러 선이 how to create translucent and shaped windows.입니다

에 "... 프레임 반투명 75 %의 불투명도. " 그래서 ... 적어도 그 기사에서 그들은 같은 것으로 정의 된 것처럼 보입니다. 불행히도 그들은 라이브러리를 사용합니다.

내가 쫓아 수있는 몇 가지 링크 :

비 작업 "작업"솔루션이 희망을 표시하지만 나는 그것이 작동하지 수있는 http://www.java-gaming.org/index.php?topic=24635.0에보고됩니다.

http://techgearup.wordpress.com/2008/09/19/transparent-jframe-background/은 스크린 샷을 사용하는 해킹 방법이며 다른 몇 곳에서 중복됩니다.

+3

Java 7을 사용할 수 있습니까? 당신이 시도한 것을 볼 수 있도록 몇 가지 작업 솔루션에 연결할 수 있습니까? –

+1

_opacity_ 및 _transparency_를 [confound] (http://stackoverflow.com/questions/3517722/java-transparent-jscrollpane/3518047#3518047)하지 마십시오. – trashgod

+0

동의합니다. 이것은 Java 7의 새로운 기능 중 하나입니다. http://download.oracle.com/javase/tutorial/uiswing/misc/trans_shaped_windows.html –

답변

1

네이티브 코드를 호출하는 Java v.6u10 + 또는 타사 라이브러리를 사용하지 않으면이 작업을 수행 할 수 없습니다. 스윙 프레임에서는 대화 상자와 윈도우가 '최상위 구성 요소'로 간주되어 기본 윈도우 시스템에 렌더링됩니다. Java v6u10 이전에는 모든 최상위 구성 요소에 기본 불투명 한 옅은 회색 배경이 있었으므로 Java 코드에서이를 변경할 방법이 없었습니다.

+0

분명히 Java 6u10은 2008 년 10 월 이후로 출시되었습니다. 사용자가 충분히 오래 사용할 수 있습니다. Java 6u10 이후 릴리스에서 어떻게이를 수행 할 수 있습니까? – Ben

+0

6u10에서는 AWTUtilities를 사용해야합니다. 7 후에는 Window 및 다른 클래스에 메서드를 추가했습니다. http://download.oracle.com/javase/tutorial/uiswing/misc/trans_shaped_windows.html#6u10 (AWTUtilities가 "제한됨"으로 설정되었음을 알고 있습니다. 그러나 이는 기본적으로 Java가 제공하는 유일한 방법입니다.) – Nate

+0

도와 주셔서 감사합니다. 저는 오픈 소스 프로젝트를 진행하고 있으며 파일을 제한하지 않는 것에 대한 태도는 확신 할 수 없습니다. 그러나 그것은 다른 질문입니다. – Ben

0

Sigh 동일한 문제가 발생하여 많은 작업을 마친 후 컴퓨터에서 제대로 설정된 투명 화면을 얻을 수있는 방법을 찾았습니다. 그러나 프레임을 투명하게 설정하자마자 많은 작업이 중지됩니다. 어디서나 JTextArea 선언을 사용하면 작업이 즉시 중단됩니다. 그것은 심지어 오류를 던지지 않습니다!

코드는 다음과 같습니다. 당신이 그것과 함께 작동하는 JScrollPane을 만들면 Plz 답장 :)

public class gui { 
    public frame f; 
    public String name = "Transparent?"; //name your frame * 
    public JButton exit = new JButton("Exit"); 
    public gui(){ //non-static context 
     f = new JFrame(name); 
     f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); //* 
     f.setLocationRelativeTo(null); 
     f.setExtendedState(f.getExtendedState() | JFrame.MAXIMIZED_BOTH); 
     //maximizes window. if you dont want it, f.setSize(int, int) 
     f.setUndecorated(true); //necessary for setOpacity 
     f.setOpacity(.7f); //achieve trasparancy 
     f.setVisible(true); //show window 
     exit.addActionListener(new ActionListener(){ 
      public void actionPerformed(ActionEvent arg0){ 
       System.exit(0); 
      } 
     }); 
     f.add(exit, BorderLayout.CENTER); 
     //since X is not available in the window, make a button to exit 
    } 

    public static void main(){ 
     new gui(); 
    } 
} 
//* Note: since the default Window manager is set off with setUndecorated(true), 
// the name and buttons won't really show. 
+0

아, JTextField가 작동하는 것을 잊어 버렸습니다. 지금까지 작동하지 않는 유일한 방법은 JTextArea와 JScrollPane입니다. 아직 국경을 테스트하지는 않았지만 주된 관심사는 아닙니다 – nkazuko

+1

Java 명명 규칙을 배우고 그대로 사용하십시오. – kleopatra