Featured Posts

JFrame transparente con EdisoncorSx Hace algún tiempo escribí un post sobre JFrame transparente, y aca sobre otra forma de realizarlo, ahora vuelvo a escribir uno nuevo pero ahora es mediante la...

Readmore

Ejemplo de panel Avatar de EdisoncorSx En este primer ejemplo vamos a ver como es la utilización del componente PanelAvatarChooser de la librería EdisoncorSx, para ello vamos a utilizar netbeans,...

Readmore

Agregar Libreria EdisoncorSx a paleta de Netbeans Una forma sencilla de poder utilizar la librería EdisoncorSx a Netbeans es integrándola como librería nativa, lo cual permitirá una fácil...

Readmore

EdisoncorSx Hola amigos, hace algún tiempo que no pósteo nada en absoluto y al blog lo he tenido un poco olvidado, pero mas vale tarde que nunca, en está ocasión...

Readmore

Señal Paternal WTF Solo en mi lindo país Ecuador, se dan este tipo de señales [caption id="attachment_599" align="aligncenter" width="600" caption="Señal...

Readmore

Edisoncor Weblog Rss

Componentes sobre frame Transparente

Posted on : 08-06-2009 | By : edisoncor | In : Netbeans, Swing, java

5

Frame Transparente A veces se necesita que el JFrame de una aplicación java este transparente pero no los controles para eso es necesario poner el siguiente codigo antes de que el JFrame este visible

        setUndecorated(true);
        setResizable(false);
        AWTUtilities.setWindowOpaque(this, false);

Lo que quita los controles de la ventana y a continuación el JFrame quedara transparente pero no sus componentes, AWTUtilities.setWindowOpaque(this, false); en la versión jdk 7 quedará obsoleto y será remplazado por Window.setBackground(Color) donde al pasar new Color(0,0,0), se logrará el efecto de transparencia Aqui un ejemplo creado en Netbeans

public class VentanaFlotante extends javax.swing.JFrame {
 
    /** Creates new form VentanaFlotante */
    public VentanaFlotante() {
        setUndecorated(true);
        setResizable(false);
        AWTUtilities.setWindowOpaque(this, false);
        initComponents();
    }
 
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    //
    private void initComponents() {
 
        jTabbedPane1 = new javax.swing.JTabbedPane();
        jPanel1 = new javax.swing.JPanel();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTree1 = new javax.swing.JTree();
        jPanel2 = new javax.swing.JPanel();
        jButton1 = new javax.swing.JButton();
        jTextField1 = new javax.swing.JTextField();
        jLabel1 = new javax.swing.JLabel();
 
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
 
        jScrollPane1.setViewportView(jTree1);
 
        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 164, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(275, Short.MAX_VALUE))
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 185, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
 
        jTabbedPane1.addTab("tab1", jPanel1);
 
        javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
        jPanel2.setLayout(jPanel2Layout);
        jPanel2Layout.setHorizontalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 449, Short.MAX_VALUE)
        );
        jPanel2Layout.setVerticalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 206, Short.MAX_VALUE)
        );
 
        jTabbedPane1.addTab("tab2", jPanel2);
 
        jButton1.setText("cerrar");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });
 
        jTextField1.setText("jTextField1");
 
        jLabel1.setText("Ventana de prueba");
 
        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(24, 24, 24)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                    .addComponent(jLabel1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 347, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(jButton1))
                    .addComponent(jTabbedPane1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 454, Short.MAX_VALUE))
                .addContainerGap(24, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(18, 18, 18)
                .addComponent(jLabel1)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jTabbedPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 234, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(26, 26, 26)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jButton1)
                    .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
 
        pack();
    }// 
 
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        System.exit(0);
    }
 
    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new VentanaFlotante().setVisible(true);
            }
        });
    }
 
    // Variables declaration - do not modify
    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTabbedPane jTabbedPane1;
    private javax.swing.JTextField jTextField1;
    private javax.swing.JTree jTree1;
    // End of variables declaration
 
}

Update

Ahora puedes encontrar este panel y otros componentes en EdisoncorSx que es una recopilación de estos trabajos y que iré  escribiendo de como utilizarla con ejemplos

Comments (5)

No puedes incluir la carpeta del ejemplo con todo? Es que prove el codigo pero me da un error en “AWTUtilities.setWindowOpaque(this, false);”. NO es que se ocupa alguna libreria?

Hola, es la primera vez que paso por aca, no conocía tu blog, y tengo una pregunta.
He visto que has colocado el AWTUtilities en varios post, pero tengo conocimiento que al compilar, por ejemplo con netbeans, advierte que es una clase propietaria de Sun y que podría no ser incluida en futuros releases… que piensas de eso?… si es bueno hacer esto en aplicaciones empresariales que lo requieran?

Hola Danilo AWTUtilities.setWindowOpaque(this, false); en la versión jdk 7 quedará obsoleto y será remplazado por Window.setBackground(Color) donde al pasar new Color(0,0,0), se logrará el efecto de transparencia, lo que puedes intentar es

 try {
   Class clazz =  
           Class.forName("com.sun.awt.AWTUtilities");
   Method method = 
          clazz.getMethod("setWindowOpaque", 
                               java.awt.Window.class, 
                               Boolean.TYPE);
   method.invoke(clazz, window, false);
   } catch (Exception e) {
         //Aqui el código de la acción
        //ha realizarse si no soprta la version de jdk
 
   }

Está excelente!!!!!! pero fijate que me tira este error:

Exception in thread “main” java.lang.IllegalArgumentException: The window must use a translucency-compatible graphics configuration
at com.sun.awt.AWTUtilities.setWindowOpaque(AWTUtilities.java:378)

que crees que puedo hacer????
como asignarle una configuración gráfica compatible a la ventana????

Tu estas seguro de que esto funciona???
 
O nos estas tangando???

Write a comment

Advertise Here