2009-06-05 34 views
8

Tôi đang tạo một cửa sổ đăng nhập với các góc tròn trong java. Tất cả mọi thứ là OK, xem pic, nhưng tôi đang có những thách thức làm cho JFrame/ContentPane trong suốt. Có những khu vực màu trắng ở mỗi góc (được hiển thị bởi các mũi tên) mà tôi dường như không thể xóa vì tôi không thể đặt opague thành false cho JFrame hoặc ContentPane.Tạo một JFrame/ContentPane tròn

Bất kỳ ý tưởng về làm thế nào tôi có thể loại bỏ những vùng trắng alt text http://i39.tinypic.com/dmsile.png

Trả lời

0

JFrame không thể thực hiện trong suốt vì nó là một thành phần nặng. Chỉ các thành phần nhẹ như JWindow mới có thể được làm trong suốt.

2

Kể từ Java 1.3 có một mẹo cho phép để làm cho cửa sổ một phần trong suốt, hoặc cửa sổ mờ dần trong (tôi thường sử dụng cho màn hình giật gân của tôi), hoặc FX đặc biệt (chẳng hạn như bóng tối):

  • Trước khi khai mạc cửa sổ, lập trình có một ảnh chụp màn hình của khu vực nơi cửa sổ của bạn sẽ được (bằng cách sử dụng java.awt.Robot.createScreenCapture())
  • Đặt ảnh chụp màn hình làm nền của vùng chứa gốc của bạn (JPanel với custom paintComponent() routine)
  • Bây giờ bạn có thể thêm tất cả các loại thành phần trong suốt hoặc vẽ một nửa phân đoạn khác t hình ảnh trên đầu trang của nền.

Ví dụ mà tạo ra một cửa sổ với một bóng bán trong suốt sử dụng kỹ thuật này: http://www.eclipsezone.com/eclipse/forums/t17720.html

+0

điều này có thể thực hiện được theo cách này, nhưng tôi đã tìm thấy trên một số hệ thống có thể rất tốn kém. chụp ảnh chụp màn hình của một thiết lập multimonitor khổng lồ và vẽ lại nó như là nền của bạn có thể được thực sự flickery, đặc biệt là nếu người dùng có thể kéo/di chuyển cửa sổ. cho một giật gân hoặc cái gì đó là bất động, nó sẽ làm việc mặc dù. –

2

giúp đỡ Không có nhiều đối với bạn nhưng Java7 sẽ hỗ trợ cửa sổ trong suốt và hình: More info here. Chúng có sẵn trong Java 6u10 nhưng không công khai, tức là bạn cần sử dụng một lớp com.sun ... không được hỗ trợ có thể thay đổi trong tương lai và phá vỡ chương trình của bạn.

1

hãy thử điều này. công việc của nó :)

yourframe.setBackground(new Color(0, 0, 0, 180)); 
yourframe.setUndecorated(true); 
yourframe.addComponentListener(new ComponentAdapter() { 
       @Override 
       public void componentResized(ComponentEvent e) { 
        setShape(new RoundRectangle2D.Double(0, 0, getWidth(), getHeight(), 80, 80)); 
       } 
      }); 
Các vấn đề liên quan