Pergunta

Usando este artigo de sol. Eu estou tentando criar uma janela transparente.

Eu tenho uma imagem dentro de uma etiqueta na moldura. Eu quero que a imagem seja visível, mas o quadro invisível.

Quando eu uso


try {
   Class awtUtilitiesClass = Class.forName("com.sun.awt.AWTUtilities");
   Method mSetWindowOpacity = awtUtilitiesClass.getMethod("setWindowOpacity", Window.class, float.class);
   mSetWindowOpacity.invoke(null, window, Float.valueOf(0.75f));
} catch (NoSuchMethodException ex) {
   ex.printStackTrace();
} catch (SecurityException ex) {
   ex.printStackTrace();
} catch (ClassNotFoundException ex) {
   ex.printStackTrace();
} catch (IllegalAccessException ex) {
   ex.printStackTrace();
} catch (IllegalArgumentException ex) {
   ex.printStackTrace();
} catch (InvocationTargetException ex) {
   ex.printStackTrace();
}

Faz Everthing transparente é possível manter os componentes não transparente.

Foi útil?

Solução

Você pode tentar apenas definir o canal alfa para a cor do seu quadro de fundo, que não deve descer para componentes.

window.setBackground(new Color(1.0, 1.0, 1.0, 0.25));

deve dar-lhe uma janela branca transparente.

Outras dicas

Você ainda pode usar a classe AWTUtilities, mas em vez de definir a opacidade com setWindowOpacity () setWindowOpaque (). Isto irá desligar o fundo da janela, mas qualquer coisa que você desenhe dentro da janela ainda será desenhado como antes. A partir dos últimos Java 6 atualização esta é agora a maneira correta de fazer as coisas. AWTUtilities funcionará em Mac e MS Windows. Estes métodos serão movidos para si java.awt.Window em Java 7.

Você precisa definir a opacidade dos componentes filhos, algo como

childComponent.setOpaque(true);

Isso fará com que eles opaco, sem fazer o opaco quadro.

Eu gostaria de expandir em uma resposta anterior com o seguinte. Isto irá criar uma janela com 0,05 transparência ou 12.75 fora de 255. Em seguida, os componentes são definidos para uma transparência de 0.50f isso só afetará componentes clicáveis. Não clicável como etiquetas podem ter seu conjunto transparência ao que nunca. Este, porém, corrige o problema componentes clicáveis ??dele mudando cores.

JWindow subFrame = new JWindow();           
subFrame.setBounds(0, 0, 500, 500);
subFrame.setAlwaysOnTop(true);
subFrame.setOpacity(0.50f);
subFrame.setBackground(new Color(1.0f, 1.0f, 1.0f, 0.05f));

JButton button = new JButton("Hello");
button.setBounds(20, 180, 100, 40);

subFrame.getContentPane().setLayout(null);
subFrame.getContentPane().add(button);
subFrame.setVisible(true);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top