précédent | suivant | table des matières

JFrame

Sommaire
  1. Cadre de base
  2. LookAndFeel
  3. Customisation du cadre

Démonstration

JFrame est la classe permettant de faire une «application». Une instance de JFrame est composée d'un JRootPane
lui même composé de :

exemple d'application

1Cadre de base

L'exemple suivant démarre une application avec titre et icône 

import java.awt.Dimension;
import java.awt.Toolkit;
import javax.swing.JFrame;
public class Appli0 {
   public static void main(String[] args) {
      // création de l'application
      JFrame f = new JFrame();
      // affectation du titre et de l'icône
      f.setTitle("le titre");
      f.setIconImage(Toolkit.getDefaultToolkit().getImage(Appli0.class.getResource("/icone.gif")));
      // affectation de l'opération à effectuer lors de la fermeture de la fenêtre
      f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      // taille et position
      f.setPreferredSize(new Dimension(300, 200));
      f.setLocation(100,100); // la fenêtre est en 100, 100
      f.setLocationRelativeTo(null); // la fenêtre est centrée à l'écran
      // rendre la fenêtre visible, pack fait en sorte que tous les composants de l'application soient à
      // leur preferredSize, ou au dessus
      f.pack();
      f.setVisible(true);
   }
}

2Visualisation des apparences

Une application a une apparence (metal, motif, Windows, Windows classic, Nimbus, etc ...), l'exemple suivant permet de visualiser les différents «look and feel» d'une application (exécuter)

public class AppliLAF extends JFrame{
   private UIManager.LookAndFeelInfo [] listeLAF;
   private JRadioButtonMenuItem[] tJrbi; 
   // fabriquer un menu avec les Look And Feel disponibles
   public  JMenu getJMenu(){
      JMenu jm = new JMenu();
      jm.setText("Look and Feel")
      ButtonGroup bg1 = new ButtonGroup();
      listeLAF = UIManager.getInstalledLookAndFeels ();
      tJrbi = new JRadioButtonMenuItem[listeLAF.length];
      for (int i=0; i < listeLAF.length; i++) {
          tJrbi[i] = new JRadioButtonMenuItem();
          tJrbi[i].setText(listeLAF[i].getName ());
          tJrbi[i].setSelected(i==0);
          bg1.add(tJrbi[i]);
          tJrbi[i].addItemListener(new java.awt.event.ItemListener() {
             // Changer le Look And Feel
             public void itemStateChanged(java.awt.event.ItemEvent e) {
             int i = 0;
             for(i = 0; i< tJrbi.length; ++i)if(tJrbi[i]==e.getSource())break;
                try{
                   UIManager.setLookAndFeel(AppliLAF.this.listeLAF[i].getClassName());
                   SwingUtilities.updateComponentTreeUI(AppliLAF.this);
                }catch (Exception ex1) {System.out.println(ex1);}
             }
          });
          jm.add(tJrbi[i]);
      }
      return jm;
   }
   public AppliLAF(){
      setTitle("le titre");
      setIconImage(Toolkit.getDefaultToolkit().getImage(Appli0.class.getResource("/icone.gif")));
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      setPreferredSize(new Dimension(300, 200));
      setLocation(100, 100);
      JMenuBar jmb = new JMenuBar();
      jmb.add(getJMenu());
      setJMenuBar(jmb);
      pack()
      setVisible(true);
   }
  public static void main(String[] args) {
     AppliLAF f = new AppliLAF();
   }
}

3Customisation du cadre

Une fenêtre peut être débarrassée de sa décoration : pas de bordure, pas de titre, pas de boutons fermer et iconifier :

setUndecorated(true);

Ceci n'est possible que sur une fenêtre qui n'est pas displayable, c'est à dire une fenêtre sur laquelle on n'a pas encore exécuté un pack ou un setVisible(true).

Depuis Java 1.6, une fenêtre sans décoration peut avoir une forme quelconque, et une fenêtre avec ou sans décoration peut être rendue transparente : (exécuter)

import javax.swing.SwingUtilities;
import ...;

public class ESSAI extends JFrame {

   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
               ESSAI thisClass = new ESSAI();
               thisClass.setVisible(true);
           }
      });
   }

   public ESSAI() {
      super();
      setSize(300, 200);
      JButton jButton = new JButton();
      jButton.setBounds(275, 10, 20, 20);
      jButton.setUI(new javax.swing.plaf.basic.BasicButtonUI());
      jButton.setBorder(null);
      jButton.setText("x");
      jButton.addActionListener(new java.awt.event.ActionListener() {
         public void actionPerformed(java.awt.event.ActionEvent e) {
            System.exit(0);
         }
      });
      jContentPane = new JPanel();      
      jContentPane.setLayout(null);
      jContentPane.add(jButton);
      this.setContentPane(getJContentPane());
      setUndecorated(true);
      Shape sh = new RoundRectangle2D.Double(0, 0, 300, 200, 50, 50);
      AWTUtilities.setWindowShape(this, sh); // la fenêtre est un rectangle aux coins arrondis
      AWTUtilities.setWindowOpacity(this,0.9F); // la fenêtre est légèrement transparente.
      setLocationRelativeTo(null);
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   }
}

haut de la page