2013-05-07 71 views
9

Tôi có đối tượng Graphics2D và tôi muốn thiết lập nền của đối tượng. Nó có phương thức setBackground, có tham số Màu. Bằng cách này tôi có thể thiết lập màu nền.Nền trong suốt Java Graphics2D

Câu hỏi của tôi là: làm cách nào tôi có thể đặt độ trong suốt của nền của đối tượng? Bằng cách nào đó tôi có thể nói nó hoàn toàn minh bạch? Bằng cách nào đó tôi có thể nói nó hoàn toàn mờ đục? Tôi có thể bằng cách nào đó nói với nó để có 0.8 minh bạch/opacity? Làm thế nào tôi có thể thiết lập các giá trị này?

Tôi đã thấy rằng có các giá trị được xác định trước được gọi là TRANSLUCENTOPAQUE, nhưng tôi không chắc chắn làm thế nào tôi có thể sử dụng chúng.

Có thể sử dụng đúng cách để gọi hàm tạo của màu với tham số int?

+2

Màu lấy bốn tham số r, g, b, a. a là thành phần Alpha hoặc trong suốt mà bạn muốn đặt. –

+0

đặt r = 0, g = 0, b = 0 sẽ tạo nền màu trắng, nhưng làm cho a = 1 sẽ đặt nền là trong suốt – user2277872

+2

Có, tôi có thể thấy điều đó ngay bây giờ. Làm thế nào chúng ta có thể định nghĩa "a"? Đó có phải là một giá trị giữa 0 và 255, 0 có nghĩa là nó mờ đục, 255 có nghĩa là nó trong suốt? –

Trả lời

14

Bạn có thể tạo đối tượng Màu bằng cách chỉ định độ trong suốt. Ví dụ: mã sau xây dựng một màu ĐỎ với độ trong suốt 50%

Color c=new Color(1f,0f,0f,.5f); 
+1

Và làm thế nào tôi có thể thiết lập nền của Graphics2D của tôi? Có một hàm setBackground, nhưng nó không thiết lập nền. generator.setBackground (Settings.canvasColor), nơi Settings.canvasColor là Color.BLUE, nhưng khung vẫn còn màu trắng vào cuối ngày. –

+4

Tôi chưa thấy bất kỳ giải pháp tốt nào để thiết lập nền của đối tượng Graphics2D thành màu (nó có phương pháp để làm điều đó, nhưng phương thức này không có hiệu ứng), vì vậy tôi đã vẽ một hình chữ nhật với màu đã cho để lấp đầy khung hình. –

+0

@Lajos: ... có nghĩa là: '#setColor()' + '#fillRect()' phải không? – Campa

3

Bạn có thể gọi các nhà xây dựng của màu theo cách sau:

Color c = new Color(r,g,b,a); 

nơi a là (trong suốt) giá trị alpha.

Như với tất cả các lớp Java, bạn có thể tìm thấy thông tin này trong API chính thức: http://docs.oracle.com/javase/7/docs/api/java/awt/Color.html

Đó là một tài nguyên thực sự tốt và có thể tha cho bạn chờ đợi một câu trả lời trên đây.

2

Java thực sự khá tốt ở công cụ này, bạn có thể đạt được độ trong suốt và nhiều hơn nữa. Dưới đây là một số mã cho một cửa sổ trong suốt đơn giản, tôi copied từ oracle:

package misc; 

import java.awt.*; 
import javax.swing.*; 
import static java.awt.GraphicsDevice.WindowTranslucency.*; 

public class TranslucentWindowDemo extends JFrame { 
    public TranslucentWindowDemo() { 
     super("TranslucentWindow"); 
     setLayout(new GridBagLayout()); 

     setSize(300,200); 
     setLocationRelativeTo(null); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     //Add a sample button. 
     add(new JButton("I am a Button")); 
    } 

    public static void main(String[] args) { 
     // Determine if the GraphicsDevice supports translucency. 
     GraphicsEnvironment ge = 
      GraphicsEnvironment.getLocalGraphicsEnvironment(); 
     GraphicsDevice gd = ge.getDefaultScreenDevice(); 

     //If translucent windows aren't supported, exit. 
     if (!gd.isWindowTranslucencySupported(TRANSLUCENT)) { 
      System.err.println(
       "Translucency is not supported"); 
       System.exit(0); 
     } 

     JFrame.setDefaultLookAndFeelDecorated(true); 

     // Create the GUI on the event-dispatching thread 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       TranslucentWindowDemo tw = new TranslucentWindowDemo(); 

       // Set the window to 55% opaque (45% translucent). 
       tw.setOpacity(0.55f); 

       // Display the window. 
       tw.setVisible(true); 
      } 
     }); 
    } 
} 

Look here để biết thêm thông tin.

+1

Tôi đang sử dụng đối tượng Graphics2D, không phải là JFrame. –

0

Bạn có thể thử điều này nếu bạn đang sử dụng JPanel: jPanel1.setOpaque (sai);