2013-04-05 5 views
0

Мне нужно создать прозрачную jframe в java swing, которая будет иметь непрозрачность 0.05f. Я попробовал код ниже, но он не работает. Я работаю в окнах.Прозрачный JFrame в java swing

Что мне нужно сделать, чтобы оно работало?

 import java.awt.AlphaComposite; 
    import java.awt.EventQueue; 
    import java.awt.Graphics; 
    import java.awt.Graphics2D; 
    import javax.swing.JFrame; 
    import java.awt.Color; 


public class BackgroundNull { 

    private JFrame frame; 

    public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      try { 
       BackgroundNull window = new BackgroundNull(); 
       window.frame.setVisible(true); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 

public BackgroundNull() { 
    initialize(); 

private void initialize() { 
    frame = new JFrame(); 
    frame.setBackground(new Color(0, 0, 0, 0)); 
    frame.setBounds(100, 100, 450, 300); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setOpacity(0.5f); 
} 

    public void paint(Graphics g) { 
     Graphics2D g2 = (Graphics2D) g.create(); 
     g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.0f)); 

     frame.getContentPane().paint(g2); 
     g2.dispose(); 
    } 

} 
+0

Посмотрите здесь для получения информации о внесении Java окна прозрачными: http://docs.oracle.com/javase/tutorial /uiswing/misc/trans_shaped_windows.html – Sticks

+0

Прозрачные и полупрозрачные не то же самое. – MadProgrammer

ответ

0

В зависимости от вашей платформы прозрачность окна может работать только со стандартным (металлическим) взглядом.

Я попытался использовать внешний вид системы на Mac OSX и Windows 7, и все будет работать.

Часть вам не хватает в вашем коде это ...

JFrame.setDefaultLookAndFeelDecorated(true);

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() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
       } 
       TranslucentWindowDemo tw = new TranslucentWindowDemo(); 

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

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

Теперь вот печальная новость. В Java 6 вы можете заставить его работать.

Следующий код (под Java 6) сделает родное окно прозрачным ...

public static void setOpacity(Window window, float opacity) { 
    try { 
     Class<?> awtUtilsClass = Class.forName("com.sun.awt.AWTUtilities"); 
     if (awtUtilsClass != null) { 
      Method method = awtUtilsClass.getMethod("setWindowOpacity", Window.class, float.class); 
      method.invoke(null, window, opacity); 
     } 
    } catch (Exception exp) { 
     exp.printStackTrace(); 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^