Foros del Web » Programación para mayores de 30 ;) » Java »

fondo de ventana transparente

Estas en el tema de fondo de ventana transparente en el foro de Java en Foros del Web. Estoy intentando que mi Frame únicamente se vea una foto cuyo fondo es transparente, y también quiero que el fondo del frame sea transparente pero ...
  #1 (permalink)  
Antiguo 01/11/2014, 07:25
(Desactivado)
 
Fecha de Ingreso: marzo-2012
Mensajes: 366
Antigüedad: 12 años
Puntos: 31
fondo de ventana transparente

Estoy intentando que mi Frame únicamente se vea una foto cuyo fondo es transparente, y también quiero que el fondo del frame sea transparente pero no la foto.

Estoy probando con el setOpacity(); pero esto me hace transparente también la foto, y la foto no quiero que lo sea.

Se os ocurre algo?

Código:
public class Interfaz extends JFrame{

	private static final long serialVersionUID = 1L;
	
	public Interfaz(){
		setLocation(new Point(Toolkit.getDefaultToolkit().getScreenSize().width/3, Toolkit.getDefaultToolkit().getScreenSize().height/3));
		setMinimumSize(new Dimension(200, 200));
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setResizable(false);
		setLayout(new GridLayout(0, 1, 0, 0));
		setUndecorated(true);
		setOpacity(0.85f);
		setVisible(true);

	}
	public void paint (Graphics g) {
		Toolkit t = Toolkit.getDefaultToolkit();
		Image imagen = t.getImage ("Resources/hal9000.png");
		g.drawImage (imagen, 0, 0, this);
		}
}
He encontrado este otro código:

Código:
	 public Principal(){
	  
	  setLayout(new FlowLayout());
	  JButton b=new JButton("Ir a Java Zone");
	  JLabel ltitulo1=new JLabel("Java");
	  JLabel ltitulo2=new JLabel("Zone");
	  ltitulo1.setFont(new Font("Verdana",Font.BOLD,25));
	  ltitulo2.setFont(new Font("Verdana",Font.BOLD,25));
	  ltitulo2.setForeground(Color.ORANGE);
	  add(ltitulo1);
	  add(ltitulo2);
	  add(b);
	 }
	 
	 public static void main(String[] args) {
	  Principal p=new Principal();
	  p.setUndecorated(true);
	  p.setVisible(true);
	  p.setBounds(0,0,200,100);
	  p.setLocationRelativeTo(null);
	  try {
	       UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
	       SwingUtilities.updateComponentTreeUI(p);
	      } catch (ClassNotFoundException e) {
	       e.printStackTrace();
	      } catch (InstantiationException e) {
	       e.printStackTrace();
	      } catch (IllegalAccessException e) {
	       e.printStackTrace();
	      } catch (UnsupportedLookAndFeelException e) {
	       e.printStackTrace();
	      }
	  try {
	         Class clazz =  Class.forName("com.sun.awt.AWTUtilities");
	         Method method = clazz.getMethod("setWindowOpaque", java.awt.Window.class, Boolean.TYPE);
	         method.invoke(clazz,p , false);
	      } catch (Exception e) {
	       
	      }
	 }
}
Además de que muchas líneas se pueden suprimir (por ejemplo los Exception para poner 1 solo o sacar las últimas 3 líneas del try), no se como hacer para que todo el código vaya en el constructor ya que no puedo tener un main en esta clase, el main lo quiero tener en otro sitio.

Y por último, en la página de Oracle he encontrado este otro código, el cual muestra un botón sin ninguna transparencia, pero la ventana si es medio transparente.

Código:
/*
 * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 *   - Redistributions of source code must retain the above copyright
 *     notice, this list of conditions and the following disclaimer.
 *
 *   - Redistributions in binary form must reproduce the above copyright
 *     notice, this list of conditions and the following disclaimer in the
 *     documentation and/or other materials provided with the distribution.
 *
 *   - Neither the name of Oracle or the names of its
 *     contributors may be used to endorse or promote products derived
 *     from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */ 

package EntradaSalida;

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

public class GradientTranslucentWindowDemo extends JFrame {
	private static final long serialVersionUID = 1L;

		public GradientTranslucentWindowDemo() {
        super("GradientTranslucentWindow");

        setBackground(new Color(0,0,0,0));
        setSize(new Dimension(300,200));
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel panel = new JPanel() {
					private static final long serialVersionUID = 1L;

						@Override
            protected void paintComponent(Graphics g) {
                if (g instanceof Graphics2D) {
                    final int R = 240;
                    final int G = 240;
                    final int B = 240;

                    Paint p =
                        new GradientPaint(0.0f, 0.0f, new Color(R, G, B, 0),
                            0.0f, getHeight(), new Color(R, G, B, 255), true);
                    Graphics2D g2d = (Graphics2D)g;
                    g2d.setPaint(p);
                    g2d.fillRect(0, 0, getWidth(), getHeight());
                }
            }
        };
        setContentPane(panel);
        setLayout(new GridBagLayout());
        add(new JButton("I am a Button"));
    }

    public static void main(String[] args) {
        // Determine what the GraphicsDevice can support.
        GraphicsEnvironment ge = 
            GraphicsEnvironment.getLocalGraphicsEnvironment();
        GraphicsDevice gd = ge.getDefaultScreenDevice();
        boolean isPerPixelTranslucencySupported = 
            gd.isWindowTranslucencySupported(PERPIXEL_TRANSLUCENT);

        //If translucent windows aren't supported, exit.
        if (!isPerPixelTranslucencySupported) {
            System.out.println(
                "Per-pixel 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() {
                GradientTranslucentWindowDemo gtw = new GradientTranslucentWindowDemo();

                // Display the window.
                gtw.setVisible(true);
            }
        });
    }
}
Sin embargo, he intentado pasar todo lo que hay en este void main al constructor pero no se exactamente como hacerlo, ya que aquí crea un objeto y luego trabaja con sus propiedades. Sin embargo, sin cambiar nada de este void main he colocado mi función de grafics con la foto... y me coloca la foto con el fondo transparente (como era de esperar)... así que este es el código que busco... solo que sacando todo de este void main. (Lo cual no se como hacer)

Última edición por Kritik; 01/11/2014 a las 13:06 Razón: ampliacion

Etiquetas: ventana
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:28.