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:
He encontrado este otro 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); } }
Código:
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.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) { } } }
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:
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) /* * 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); } }); } }