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")
    // <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

}

person Nilesh    schedule 11.12.2009    source источник


Ответы (1)


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.

person Devon_C_Miller    schedule 11.12.2009