2010-08-25 40 views
14

Giả sử tôi muốn làm cho độ mờ đục của JPanel% 20 có thể xem được? Tôi không có nghĩa là setOpaque (vẽ hoặc không vẽ) hoặc setVisible (hiển thị hoặc ẩn) ... Tôi có nghĩa là làm cho nó xem qua JPanel .. bạn biết không?Java - đặt độ mờ trong JPanel

Điều này có khả thi không?

+0

câu hỏi hiện tại của ông là worded tốt hơn, nhưng ông đã yêu cầu một câu hỏi rất giống nhau trong quá khứ, trong đó ông thậm chí đã chấp nhận một câu trả lời (để tham khảo): http://stackoverflow.com/questions/3517722/java-transparent-jscrollpane – Serplat

+0

Vâng, điều đó không hiệu quả đối với tôi. :( – nn2

+2

Tôi sẽ giúp đỡ nếu bạn giải thích những gì đã không làm việc. – trashgod

Trả lời

20
panel.setBackground(new Color(r, g, b, a)); 

Bạn cũng nên xem Backgrounds With Transparency để hiểu mọi vấn đề về sơn bạn có thể có khi sử dụng.

+4

"a" là cài đặt alpha là độ mờ. –

+0

Đúng, bạn cũng có thể đọc API cho lớp Màu để có được mô tả đầy đủ về các tham số cho phương thức. – camickr

+0

Cảm ơn bạn. Tôi muốn nói rằng tôi xin lỗi. Tôi cần phải có được rõ ràng hơn. – nn2

3
AWTUtilities.setWindowOpacity(aWindow, aFloat); 

Trường hợp aWindow là thành phần Swing và aFloat là độ mờ.

+3

Rất tiếc, tôi không theo dõi.Tôi không muốn độ mờ của cửa sổ nhưng độ mờ đục của JPanel. : D – nn2

+0

Tôi sử dụng JFrame và nó hoạt động tốt. AWTUtilities.setWindowOpacity (khung, (phao) 0.7); – janetsmith

+0

Ok, nhưng làm thế nào để làm điều đó với một JPanel conataining một hình ảnh nền (để xem thông qua hình ảnh)? – Benj

0

Cách ghi đè phương thức paintComponent của JPanel (để làm điều này bạn phải tự lớp con JPanel và thực hiện phương thức paintComponent của riêng bạn) bên trong paintComponent bạn có thể truy xuất hình ảnh đệm của thành phần, từ đó bạn có thể thao tác alpha của hình ảnh đệm và vẽ nó trở lại JPanel. Tôi có màu đỏ từ lâu rồi. Vẫn đang tìm mã.

13

Sử dụng thuộc tính alpha cho màu.

Ví dụ:

panel.setBackground(new Color(0,0,0,64)); 

sẽ tạo ra một màu đen, với 64 alpha (minh bạch)

Hệ quả này:

sample

Dưới đây là đoạn code

package test; 

import javax.swing.*; 
import java.awt.Color; 
import java.awt.BorderLayout; 

public class See { 
    public static void main(String [] args){ 
     JFrame frame = new JFrame(); 
     frame.setBackground(Color.orange); 


     frame.add(new JPanel(){{ 
         add(new JLabel("Center")); 
         setBackground(new Color(0,0,0,64)); 
        }} , BorderLayout.CENTER); 
     frame.add(new JLabel("North"), BorderLayout.NORTH); 
     frame.add(new JLabel("South"), BorderLayout.SOUTH); 

     frame.pack(); 
     frame.setVisible(true); 
    } 
} 

Với ra nó có vẻ như thế này:

setBackground(new Color(0,0,0) ); // or setBackground(Color.black); 

alt text

+0

Rất đẹp - làm việc tốt !!! – nn2

+0

Tôi rất vui vì bạn đã thử nghiệm điều này trong Windows? – OscarRyz

+0

là nó có thể với hình ảnh quá? –

0

Nó không làm việc rất tốt trên các cửa sổ 7.

panel.setBackground(new Color(r, g, b, a)); 

kênh alpha chỉ làm sáng màu.

khi phần tử được cập nhật trên màu bằng kênh alpha, máy tính bị nhầm lẫn và đặt lại nền của phần tử được cập nhật mà không có alpha. Tôi sẽ thử

AWTUtilities.setWindowOpacity(aWindow, aFloat); 

tiếp theo.

0

Nếu bạn có một bảng điều khiển tùy chỉnh và muốn toàn bộ điều là bán trong suốt, tôi khuyên bạn nên làm ghi đè phương thức paintComponent của nó như thế này:

@Override 
    protected void paintComponent(Graphics graphics) { 
     super.paintComponent(graphics); 
     Graphics2D g2d = (Graphics2D) graphics; 
     g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f)); 
    } 
Các vấn đề liên quan