Outils pour utilisateurs

Outils du site


developpement:java:swing

Programmation graphique

  1. Principes de base
  2. Composants et les conteneurs
  3. Gestion de mise en disposition (mise en forme ou layout)
  4. Gestion des événements
  5. Boîtes de dialogues
  6. 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 et JPanel. 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 les JFrame
  • 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)).

 GridLayout

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

  1. Les boîtes standards
  2. Le sélecteur de couleur
  3. Le sélecteur de fichiers

Boites standards

  1. boite de message
  2. boite de confirmation
  3. 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 :

  1. 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.
  2. Le messages (String)
  3. Le titre (String)
  4. typeOption est un tableau de boutons. Il y en a des prédéfinies dans JOptionPane : YES_NO_CANCEL_OPTION
  5. 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