CodeS-SourceS
Rechercher un code, un tuto, une réponse

Utilisation des JInternalFrame

Juillet 2017


Utiliser les JInternalFrame



Présentation


Avec la classe JInternalFrame, vous pouvez insérer dans un JDesktopPane, des fenêtres internes, et les déplacer, les réduire, les fermer, etc.

L'image suivante présente deux JInternalFrames ouvertes dans un JDesktopPane.

Construction du bureau (JDesktopPane)


Les JInternalFrame ne peuvent s'ouvrir que dans un JDesktopPane. Pour les utiliser, il faut donc placer un JDesktopPane dans une container Swing (par exemple une JFrame).

/* Création de la fenêtre contenant les fenêtres internes */
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(600, 600);
f.setLocationRelativeTo(null);

/* Création du JDesktopPane et ajout dans la fenêtre de l'application */
JDesktopPane desktop = new JDesktopPane();
f.add(desktop, BorderLayout.CENTER);

Ajout d'une fenêtre interne


Les fenêtres internes sont des instances de la classe JInternalFrame, la documentation se trouve ici : http://docs.oracle.com/javase/7/docs/api/javax/swing/JInternalFrame.html

/* Création de la fenêtre interne */
JInternalFrame jif = new JInternalFrame("Fenetre");
jif.setSize(200, 200);

/* Ajout au desktop */
desktop.add(jif);

jif.setVisible(true);

Définir les boutons de la JInternalFrame


Par défaut la fenêtre interne n'est ni redimentionnable, ni déplacable, etc. Pour offir ces fonctionnalités, on utilise les méthodes suivantes :
/* Permet à l'utilisateur de fermer la fenêtre */
jif.setClosable(true);
/* Permet à l'utilisateur de redimmentionner la fenêtre */
jif.setResizable(true);
/* Permet à l'utilisateur d'agrandir la fenêtre */
jif.setMaximizable(true);
/* Permet à l'utilisateur de réduire la fenêtre*/
jif.setIconifiable(true);

Faire apparaitre une fenêtre au premier plan


Pour faire remonter une fenêtre intenre au premier plan sans que l'utilisateur ne la séléctionne au préalable, on utilise la méthode toFront()
jif.toFront();

Placement des fenêtres


Pour que les fenêtres apparaissenet légèrement décalées les unes par rapport aux autres, on utilise un entier qui nous donne un décalage à chaque apparation d'une nouvelle fenêtre.
/* Permet de décaler les fenêtres verticalement */
private static int frameCountY=1;
/* Permet de décaler les fenêtres horizonalement */
private static int frameCountX=0;

A chaque fois qu'une fenêtre interne est ajoutée, on incrémente frameCountY jusqu'à 8. Une fois à 8, frameCountY reprend une valeur de 1 et frameCountX est incrémenté.
if(frameCountY++>8){
 frameCountY=1;
 if(frameCountX++>4){
  frameCountY=1;
  frameCountX=1;
 }
}


Pour décaler les fenêtres, il suffit alors d'utiliser la méthode setLocation() de cette manière :
jif.setLocation(new Point(15*frameCountY+100*frameCountX, 15*frameCountY));

Code complet de l'exemple


import java.awt.BorderLayout;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.UIManager;


public class ExempleJInternalFrame {

 private static int frameCountY=1;
 private static int frameCountX=0;
 
 public static void main(String[] args){
    
  try{
   UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
  }
  catch(Exception e){}

  JFrame f = new JFrame();
  f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  f.setSize(600, 600);
  f.setLocationRelativeTo(null);
  
  final JDesktopPane desktop = new JDesktopPane();
  f.add(desktop, BorderLayout.CENTER);
  
  JMenuBar menu = new JMenuBar();
  JMenu fichier = new JMenu("Fichier");
  JMenuItem nouveau = new JMenuItem("Nouveau");
  fichier.add(nouveau);
  f.add(menu, BorderLayout.NORTH);
  menu.add(fichier);
  nouveau.addActionListener(new ActionListener() {
   
   @Override
   public void actionPerformed(ActionEvent e) {
    JInternalFrame jif = new JInternalFrame();
    jif.setTitle("Titre");
    jif.setClosable(true);
    jif.setResizable(true);
    jif.setMaximizable(true);
    jif.setIconifiable(true);
    jif.toFront();
    jif.setSize(200, 200);
    desktop.add(jif);
    jif.setVisible(true);
    jif.setLocation(new Point(15*frameCountY+100*frameCountX, 15*frameCountY));
    if(frameCountY++>8){
     frameCountY=1;
     if(frameCountX++>4){
      frameCountY=1;
      frameCountX=1;
     }
    }
    
   }
  });
  f.setVisible(true);
 }

}

A voir également

Publié par cs_Julien39.
Ce document intitulé «  Utilisation des JInternalFrame  » issu de CodeS-SourceS (codes-sources.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Ajouter un commentaire

Commentaires

Donnez votre avis
Gestion des fichiers
Gestion des fichiers XML avec JDOM