developpement:java:swing
Table des matières
Programmation graphique
- Principes de base
- Composants et les conteneurs
- Gestion de mise en disposition (mise en forme ou layout)
- Gestion des événements
- Boîtes de dialogues
- Architecture MVC (Modèle Vue Controleur)
Principes de base
- Première génération d'interface graphique → AWT (Abstract Windowing Toolkit) en 1995
- Package
java.awt
et ses sous packages (java.awt.event
, etc) - Classes de composants et conteneurs (
Frame
,Panel
,Button
,Menu
,Checkbox
, etc) - Les composants sont lourds → ils utilisent les ressources du système d'exploitation.
- Deuxième génération → SWING en 1998 avec la sortie de Java 2)
- Package
javax.swing
et ses sous-packages - Classes de composants et conteneurs → Mêmes noms de classe que AWT, sauf précédés d'un J (
JFrame
,JPanel
,JButton
,JMenu
,JCheckbox
, etc). - Les composants sont légers (indépendant du système d'exploitation
- Introduction de la notion de « Look and feel » (définit l'apparence et le comportement de l'interface graphique)
- Look and feel Windows
- Metal : Look and feel XWindow
- Motif : Look and feel SWING
- SWING ne remplace pas entièrement AWT (en particulier, il utilise les gestionnaires de mise en disposition et le modèle de gestion d'événements de AWT)
- On construit une interface graphique en plaçant des composants dans des conteneurs.
- Ces composants sont placés selon le gestionnaire de mise en disposition (layout manager) associé au conteneur.
- On gère les événements qui se produisent sur les composants à l'aide du modèle de délégation.
Composants et conteneurs
- Package
javax.swing
.- On utilisera surtout les deux conteneurs
JFrame
etJPanel
. On peut imbriquer des panneaux, mais pas des frames. - On va utiliser la plupart des composants standard.
Couches de contenu pour les panneaux
- Avant la version 1.5 de Java → il faut utiliser le
getContentPane().add(composant);
- Avec 1.5 et supérieur →
conteneur.add(composant);
Gestionnaires de mise en disposition
- BorderLayout
- FlowLayout
- GridLayout
- CardLayout (peu utilisé)
- GridBagLayout (complexe)
BorderLayout
- Gestionnaire par défaut →
java.awt.BorderLayout
pour lesJFrame
- La mise en disposition
BorderLayout
est divisée en 5 régions dont chacune ne peut contenir qu'un seul composant. Ce seul composant peut être un JPanel qui lui a plusieurs autres composants.
FlowLaout
- Dispose les composants l'un à côté de l'autre et s'il manque d'espace, il change de ligne.
- Alignement par défaut → Centré
GridLayout
- Un composant est assignée à une région une à la suite de l'autre, c'est-à-dire qu'un composant ne peut pas être assigné à une région spécifique directement.
- On peut déterminer le nombre de lignes et de colonnes (dans l'ordre :
GridLayout(int rows, int cols)
).
Exemple d'application graphique
JFrame f = new JFrame("Dessins de formes"); JPanel jHaut = new JPanel(); jDessin = new PanneauDessin(); JPanel jBas = new JPanel(); JButton bNouvFigure = new JButton("Nouvelle forme"); tfCommande = new JTextField(15); JLabel lStatusBar = new JLabel(""); jHaut.setLayout(new FlowLayout()); jHaut.add(tfCommande); jHaut.add(bNouvFigure); jBas.add(lStatusBar); jDessin.setBackground(Color.WHITE); f.setLayout(new BorderLayout()); f.add(jHaut, BorderLayout.NORTH); f.add(jDessin, BorderLayout.CENTER); f.add(jBas, BorderLayout.SOUTH); bNouvFigure.addActionListener(this); f.setSize(600,500); f.setLocation(300,300); f.setVisible(true);
Exemple de menu Swing
miOuvrir = new JMenuItem("Ouvrir..."); miEnregistrer = new JMenuItem("Enregistrer..."); miImporterImage = new JMenuItem("Importer une image..."); miQuitter= new JMenuItem("Quitter"); miTranslation = new JMenuItem("Faire une translation..."); miZoom = new JMenuItem("Faire un zoom..."); mFichier = new JMenu("Fichier"); mOperations = new JMenu("Operations"); mFichier.add(miOuvrir); mFichier.add(miEnregistrer); mFichier.add(miImporterImage); mFichier.addSeparator(); mFichier.add(miQuitter);
Panneau
pnlCentreHaut.setBorder(javax.swing.BorderFactory.createTitledBorder("Sélection")); lblSelection.setFont(new java.awt.Font("Lucida Grande", 1, 14)); // NOI18N lblSelection.setText("Aucune");
Boîtes de dialogue
- Les boîtes standards
- Le sélecteur de couleur
- Le sélecteur de fichiers
Boites standards
- boite de message
- boite de confirmation
- boite d'entrée (input box)
Il faut utiliser JDialog
. Il faut généralement passer par les méthodes statique (show()
) de la classe JOptionPane
.
int reponse = JOptionPane.showConfirmDialog(this,"Voulez-vous vraiment quitter ?", "Titre", typeOption, typeMessage); if (reponse == JOptionPane.YES_OPTION) System.exit(0);
“numération des paramètres :
- Le premier argument d'une méthode
show
est la fenêtre parente de la boîte de dialogue. La boite de dialogue s'affiche au centre de sa fenêtre parente. - Le messages (
String
) - Le titre (
String
) - typeOption est un tableau de boutons. Il y en a des prédéfinies dans JOptionPane :
YES_NO_CANCEL_OPTION
- typeMessage → type de message (erreur, information etc) : WARNING_MESSAGE, INFORMATION_MESSAGE
ColorChooser
miCouleurFond.addActionPerformed(ActionEvent e) { new ActionListener() { public void actionPerformed(ActionEvent e) { Color coul = JColorChooser.showDialog(f,"Choisir une couleur", Color.RED); if (coul != null) f.getContentPane().setBackground(coul); } }
FileChooser
JFileChooser chooser = new JFileChooser(); chooser.setCurrentDirectory(new File(".")); chooser.setMultiSelectionEnabled(true); int result = chooser.showOpenDialog(parent); int result = chooser.showDialog(parent, "Select"); String filename = chooser.getSelectedFile().getPath();
Architecture MVC
developpement/java/swing.txt · Dernière modification : 2022/02/02 00:42 de 127.0.0.1