Participer au site avec un Tip
Rechercher
 

Améliorations / Corrections

Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.

Emplacement :

Description des améliorations :

Swing - Appliquer un « look'n feel »

Coder un explorateur de BD SQL Gestion du presse-papier



L'exemple suivant permet de choisir un look, parmi les trois proposés par la classe LookAndFeelMenu, et de l'appliquer à la fenêtre en cours d'exécution. Cette fenêtre contient volontairement un certain nombre de composants graphiques afin que vous puissiez avoir une idée un peu plus précise des visuels de chacun d'entre eux en fonction du look'n feel sélectionné. Je vous conseille d'ouvrir les noeuds du composant Jtree afin de faire apparaître les barres de scrolling, qui elles aussi seront décorées différement en fonction du look.

Personnelement, j'ai une préférence pour le look « Nimbus », dernier look ajouté au Java SE.

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
 11 
 12 
 13 
 14 
 15 
 16 
 17 
 18 
 19 
 20 
 21 
 22 
 23 
 24 
 25 
 26 
 27 
 28 
 29 
 30 
 31 
 32 
 33 
 34 
 35 
 36 
 37 
 38 
 39 
 40 
 41 
 42 
 43 
 44 
 45 
 46 
 47 
 48 
 49 
 50 
 51 
 52 
 53 
 54 
 55 
 56 
 57 
 58 
 59 
 60 
 61 
 62 
 63 
 64 
 65 
 66 
 67 
 68 
 69 
 70 
 71 
 72 
 73 
 74 
 75 
 76 
 77 
 78 
 79 
 80 
 81 
 82 
 83 
 84 
 85 
 86 
 87 
 88 
 89 
 90 
 91 
 92 
 93 
 94 
 95 
 96 
 97 
 98 
 99 
 100 
 101 
 102 
 103 
 104 
 105 
 106 
 107 
 108 
 109 
 110 
 111 
 112 
 113 
 114 
 115 
 116 
 117 
 118 
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JToolBar;
import javax.swing.JTree;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;

class LookAndFeelMenu extends JMenu implements ActionListener {
    
    public static final String LOOK_AND_FEEL_1 = 
                    "javax.swing.plaf.nimbus.NimbusLookAndFeel";
    public static final String LOOK_AND_FEEL_2 = 
                    "javax.swing.plaf.metal.MetalLookAndFeel";
    public static final String LOOK_AND_FEEL_3 = 
                    "com.sun.java.swing.plaf.windows.WindowsLookAndFeel";
    
    public LookAndFeelMenu() {
        super("Look and feel");
        setMnemonic('L');
        
        JMenuItem nimbus = new JMenuItem("Nimbus");
        nimbus.setMnemonic('N');
        nimbus.addActionListener(this);
        this.add(nimbus);   

        JMenuItem metal = new JMenuItem("Metal");
        metal.setMnemonic('M');
        metal.addActionListener(this);
        this.add(metal);   
        
        JMenuItem windows = new JMenuItem("Windows");
        windows.setMnemonic('W');
        windows.addActionListener(this);
        this.add(windows);   
    }
    
    public void actionPerformed(ActionEvent event) {
        String newLook;
       
        switch( event.getActionCommand() ) {
            case "Nimbus":
                newLook = LOOK_AND_FEEL_1;
                break;
            case "Metal":
                newLook = LOOK_AND_FEEL_2;
                break;
            default:
                newLook = LOOK_AND_FEEL_3;
        }
               
        try {
            // On change le look and feel en cours
            UIManager.setLookAndFeel( newLook );
            // On applique ce nouveau look à la fenêtre intégral 
            SwingUtilities.updateComponentTreeUI( this.getTopLevelAncestor() );
        } catch( Exception exception ) { 
            exception.printStackTrace(); 
        }
    }
}

public class TestLookAndFeel extends JFrame {

    public TestLookAndFeel() {
        super( "Look'n feel sample" );
        this.setDefaultCloseOperation( DISPOSE_ON_CLOSE );
        this.setSize( 600, 400 );

        // --- Mise en place d'une barre de menu ---
        JMenuBar menuBar = new JMenuBar();
        JMenu file = new JMenu( "File" );
        file.setMnemonic( 'f' );
        JMenuItem open = new JMenuItem( "Open" );
        open.setMnemonic( 'o' );
        file.add( open );
        menuBar.add( file );
        
        menuBar.add(new LookAndFeelMenu());
        
        this.setJMenuBar( menuBar );
        
        // --- On met quelques composants visuels dans la fenêtre ---
        JPanel contentPane = (JPanel) this.getContentPane();
        
        JToolBar toolBar = new JToolBar();
        toolBar.add( new JButton( "Click me") );
        toolBar.add( new JTextField( "Edit me") );
        toolBar.add( new JCheckBox( "Check me") );
        contentPane.add( toolBar, BorderLayout.NORTH );
        
        JScrollPane scrollPane = new JScrollPane( new JTree() );
        scrollPane.setPreferredSize( new Dimension( 140, 0 ) );
        contentPane.add( scrollPane, BorderLayout.WEST );
        
        contentPane.add( new JScrollPane( new JTextArea() ), BorderLayout.CENTER );
        
        contentPane.add(  new JLabel( "A status bar" ), BorderLayout.SOUTH );
    }

    public static void main( String[] args ) {
        TestLookAndFeel frame = new TestLookAndFeel();
        frame.setVisible( true );
    }
}
Test de différents look and feel Java


Coder un explorateur de BD SQL Gestion du presse-papier