précédent | suivant | table des matières
|
JFrame est la classe permettant de faire une «application».
Une instance de JFrame est composée d'un JRootPane
lui même composé de :
Cadre 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); } }
Visualisation 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(); } }
Customisation 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); } }