2009-12-11 10 views
2

J'ai créé JToolBar (Java Swing). J'ai mis une image d'arrière-plan sur l'armature qui contient JToolBar. Je veux que mon JToolBar soit transparent afin que l'image conservée sur le cadre soit visible. J'utilise setOpaque(false) mais il n'a aucun effet sur ma barre d'outils .. Quelqu'un a-t-il déjà travaillé avec cela? Mon code est le suivant:Java Swing JToolBar

import javax.swing.ImageIcon; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 

public class NewJFrame extends javax.swing.JFrame { 
    static NewJFrame dialog = null; 

    /** Creates new form NewJFrame */ 
    public NewJFrame() { 
     initComponents(); 
     jToolBar1.setOpaque(false); 
    } 

    /** 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") 
    // <editor-fold defaultstate="collapsed" desc="Generated Code"> 
    private void initComponents() { 

     jToolBar1 = new javax.swing.JToolBar(); 

     setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 

     jToolBar1.setRollover(true); 

     javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
     getContentPane().setLayout(layout); 
     layout.setHorizontalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addComponent(jToolBar1, javax.swing.GroupLayout.DEFAULT_SIZE, 400, Short.MAX_VALUE) 
     ); 
     layout.setVerticalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(layout.createSequentialGroup() 
       .addComponent(jToolBar1, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addContainerGap(275, Short.MAX_VALUE)) 
     ); 

     pack(); 
    }// </editor-fold> 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String args[]) { 
     java.awt.EventQueue.invokeLater(new Runnable() { 



      public void run() { 

       try { 
        try { 
         // Set cross-platform Java L&F (also called "Metal") 
         UIManager.setLookAndFeel(UIManager. 
           getSystemLookAndFeelClassName()); 

        } catch (UnsupportedLookAndFeelException ex) { 
         ex.printStackTrace(); 
        } 
       } catch (ClassNotFoundException e) { 
        e.printStackTrace(); 
       } catch (InstantiationException e) { 
        e.printStackTrace(); 
       } catch (IllegalAccessException e) { 
        e.printStackTrace(); 
       } 
       ImagePanel panel = new ImagePanel(new ImageIcon("image").getImage()); 
       dialog = new NewJFrame(); 
       dialog.getContentPane().add(panel); 
       dialog.setVisible(true); 
      } 
     }); 
    } 

    // Variables declaration - do not modify 
    private javax.swing.JToolBar jToolBar1; 
    // End of variables declaration 

} 

Répondre

2

JToolBar crée des JButtons pour contenir les actions que vous avez définies. Par défaut, les JButtons sont opaques. Pour obtenir l'effet que vous décrivez, vous devez remplacer JToolBar.createActionComponent.

Par exemple:

jToolBar1 = new javax.swing.JToolBar() { 
     @Override 
     protected JButton createActionComponent(Action a) { 
      JButton jb = super.createActionComponent(a); 
      jb.setOpaque(false); 
      return jb; 
     } 
    }; 

Note: YMMV selon la LAF en cours d'utilisation.