2011-10-04 30 views
5

Có, câu hỏi này ở khắp mọi nơi. Nhưng tất cả các giải pháp (làm việc) đều sử dụng bộ công cụ AWTUtilities, được giới hạn.Java - JFrame trong suốt của ol, không bị hạn chế libs

So. Tôi chỉ muốn kiểm soát độ mờ đục của cửa sổ. Không cần phải định hình hoặc undecorate. Chỉ cần một contentPane trong suốt (dễ), và một nền JFrame trong suốt (vô cùng khó).

Tôi có thể thề rằng mình đã có được sự kết hợp đúng đắn của các công cụ ngày hôm qua, nhưng bây giờ tôi dường như không thể tái tạo nó. Ngoài ra còn có một số giải pháp trên mạng mà không sử dụng AWTUtilities, nhưng chúng không hoạt động ... có ai đó có giải pháp tốt không?

Một ví dụ về mã thất bại của tôi:

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); 
} 

nhưng điều này chỉ làm cho một hình vuông màu trắng. Đóng nhưng không có xì gà. Tôi cũng đã cố gắng ghi đè phương pháp vẽ, và ai đó đang nói điều gì đó về việc ném ra kênh alpha, nhưng điều đó làm cho nó trở thành màu đen (dĩ nhiên). Vì vậy ... Stack Overflow nó là.

Nếu có câu trả lời chính xác, vui lòng chỉ cho tôi và tôi sẽ xóa ngay lập tức.

Cập nhật mỗi yêu cầu trong các ý kiến, đây là một lịch sử như thế nào tôi đến đây:

Các liên kết tất cả mọi người đầu tiên đến là how to create translucent and shaped windows. này có một vài dòng trong đó tương tự như" ... khung mờ với 75% mức độ mờ đục. " Vì vậy ... có vẻ như chúng được định nghĩa giống nhau, ít nhất là trong bài viết đó. Thật không may họ sử dụng thư viện.

Một vài liên kết mà tôi có thể đuổi xuống:

A "làm việc" giải pháp không làm việc được báo cáo tại http://www.java-gaming.org/index.php?topic=24635.0 trong đó cho thấy một số hy vọng nhưng tôi không thể có được nó làm việc.

http://techgearup.wordpress.com/2008/09/19/transparent-jframe-background/ là cách hackish sử dụng ảnh chụp màn hình và được sao chép ở một vài nơi khác.

+3

Bạn có thể sử dụng Java 7 không? Bạn có thể liên kết với một số giải pháp làm việc để chúng tôi thấy những gì bạn đã thử không? –

+1

Vui lòng không [confound] (http://stackoverflow.com/questions/3517722/java-transparent-jscrollpane/3518047#3518047) _opacity_ và _transparency_. – trashgod

+0

Đồng ý, đây là một trong những tính năng mới trên Java 7: http://download.oracle.com/javase/tutorial/uiswing/misc/trans_shaped_windows.html –

Trả lời

1

Bạn không thể thực hiện việc này mà không cần sử dụng thư viện Java v.6u10 + hoặc bên thứ ba gọi mã gốc. Trong Swing Frames, Dialogs và Windows được coi là 'các thành phần cấp cao nhất' và được hiển thị trong hệ thống cửa sổ nằm bên dưới. Trước Java v6u10, tất cả các thành phần cấp cao nhất đều có nền xám nhạt, mặc định mờ đục và không có cách nào để thay đổi điều này từ mã Java.

+0

Rõ ràng Java 6u10 đã được ra kể từ tháng 10 năm 2008, đủ lâu để người dùng của tôi có nó. Làm thế nào điều này có thể được thực hiện trong bản phát hành sau khi Java 6u10? – Ben

+0

Trong 6u10 - bạn phải sử dụng AWTUtilities, sau 7 họ đã thêm các phương thức vào Window và một số lớp khác. http://download.oracle.com/javase/tutorial/uiswing/misc/trans_shaped_windows.html#6u10 (Tôi nhận ra rằng bạn đã đặt AWTUtilities là "bị hạn chế", nhưng đó là cách duy nhất Java cung cấp cho bạn để làm điều này.) – Nate

+0

OK cảm ơn sự giúp đỡ. Tôi đang làm việc trên một dự án nguồn mở và tôi không chắc chắn về thái độ đối với các tệp không hạn chế. Nhưng đó là một câu hỏi khác nhau :) – Ben

0

Sigh Tôi gặp phải vấn đề tương tự, và sau rất nhiều thời gian làm việc trên đó, tôi tìm thấy cách để có được màn hình trong suốt được đặt đúng trên máy tính của mình. Tuy nhiên, rất nhiều thứ ngừng hoạt động ngay sau khi bạn đặt khung trong suốt. Nếu bạn sử dụng khai báo JTextArea ở bất cứ đâu, nó sẽ ngừng hoạt động ngay lập tức. Nó thậm chí sẽ không ném một lỗi!

Vì vậy, đây là mã, hy vọng đây là một số sử dụng. Plz trả lời nếu bạn thực hiện một JScrollPane làm việc với nó :)

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

Oh tôi quên đề cập đến, JTextField vẫn hoạt động. Điều duy nhất mà không làm việc cho đến nay (những điều tôi đã sử dụng) là JTextArea và JScrollPane Tôi chưa thử nghiệm biên giới nhưng nó không phải là mối quan tâm chính – nkazuko

+1

xin vui lòng tìm hiểu quy ước đặt tên java và dính vào chúng – kleopatra

Các vấn đề liên quan