Java Swing JToolBar

我创建了JToolBar (Java Swing)。 我在包含JToolBar帧上设置了背景图像。 我希望我的JToolBar是透明的,这样保留在框架上的图像应该是可见的。 我正在使用setOpaque(false)但它对我的工具栏没有任何影响..有没有人以前使用过这个? 我的守则如下

 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") //  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(); }//  /** * @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 } 

JToolBar创建JButtons以包含您在其上设置的操作。 默认情况下,JButtons是不透明的。 要获得您描述的效果,您需要覆盖JToolBar.createActionComponent。

例如:

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

注意: YMMV取决于使用的LAF。