QUELQUES COMPOSANTS SWING
BOITES DE DIALOGUE
basé sur un transparent d’Audrey Occello
JDIALOG : CLASSES ET BOÎTES DE DIALOGUES
Il
existe différentes classes pour créer des boîtes
de dialogue :
JOptionPane
: pour créer des boîtes de dialogue
standards
JColorChooser : pour choisir une couleur
JFileChooser : pour permettre de sélectionner un fichier
ProgressMonitor : pour afficher la progression d’une
opération
Pattern
Factory : méthode statique pour créer
Université Nice Sophia Antipolis
L3 Miage – POO Semestre 6 – composants swing – Philippe Renevier Gonin
3 / 28
basé sur un transparent d’Audrey Occello
JOPTIONPANE
Avertissement –
JOptionPane.INFORMATION_MESSAGE
Question –
JOptionPane.QUESTION_MESSAGE
Information –
JOptionPane.WARNING_MESSAGE
Permet
de créer des
Information –
boîtes de dialogue
JOptionPane.ERROR_MESSAGE
standards
JOptionPane.PLAIN_MESSAGE
Possède des éléments standardisés :
Factory,
méthodes statiques
showConfirmDialog
showInputDialog
showMessageDialog
showOptionDialog
4
Université Nice Sophia Antipolis
L3 Miage – POO Semestre 6 – composants swing – Philippe Renevier Gonin
4 / 28
INPUT DIALOG : EXEMPLE
String name = JOptionPane.showInputDialog("entrez le nom de l'image (format
png)", "new_image");
// “new image” est la valeur intiale…
/*** ce qui suit n’est pas spécifique à l’InputDialog ***/
if (name == null )
name = "";
// cas de fermeture de la fenêtre sans remplir
name = name.trim();
// on enlève les espaces superflux
if (name.length() == 0)
name = ""+System.currentTimeMillis();
if (! name.endsWith(".png"))
name = name+".png";
// on rajoute éventuellement .png
File imageFile = new File(name);
Université Nice Sophia Antipolis
L3 Miage – POO Semestre 6 – composants swing – Philippe Renevier Gonin
5 / 28
basé sur un transparent d’Audrey Occello
JCOLORCHOOSER
Permet de créer une boîte de dialogue pour choisir une couleur
Possède différents onglets correspond aux différents types
d’encodage de couleurs
6
Université Nice Sophia Antipolis
L3 Miage – POO Semestre 6 – composants swing – Philippe Renevier Gonin
6 / 28
basé sur un transparent d’Audrey Occello
JFILECHOOSER
Définit
une boîte de dialogue pour sélectionner un
fichier
Deux boîtes de dialogue par défaut :
Pour l’ouverture
(showOpenDialog),
Pour la sauvegarde
(showSaveDialog)
7
Université Nice Sophia Antipolis
L3 Miage – POO Semestre 6 – composants swing – Philippe Renevier Gonin
7 / 28
CHOISIR UN FICHIER
JFileChooser
http://java.sun.com/docs/books/tutorial/uiswing/components/filechooser.html
JFileChooser fc = new JFileChooser();
public void actionPerformed(ActionEvent e)
{
int returnVal = fc.showOpenDialog(fenetre);
if (returnVal == JFileChooser.APPROVE_OPTION)
{
File file = fc.getSelectedFile();
// … traitement de l’image choisie
} else {
// … traitement en cas d’annulation
}
}
Université Nice Sophia Antipolis
L3 Miage – POO Semestre 6 – composants swing – Philippe Renevier Gonin
8 / 28
FILTRAGE DE FICHIER
fc.setAcceptAllFileFilterUsed(false);
Par défaut tout accepter
fc.addChoosableFileFilter(new <FileFilter>());
FileFilter interface pour filter
public boolean accept(File f) {
if (f.isDirectory()) {
return true;
}
String extension = getExtension(f);
if (extension != null) {
return ( extension.equals("jpeg") ||
extension.equals("jpg") ||
extension.equals("png") ||
extension.equals("bmp") ) ;
}
return false;
}
public String Description() { //
return "filtre d’image" ;
}
Université Nice Sophia Antipolis
The description of this filter.
L3 Miage – POO Semestre 6 – composants swing – Philippe Renevier Gonin
9 / 28
GETEXTENSION
Public String getExtension(File f) {
String ext = null;
String s = f.getName();
int i = s.lastIndexOf('.');
if (i > 0 && i < s.length() - 1) {
ext = s.substring(i+1).toLowerCase();
}
return ext;
}
}
c.f.
http://java.sun.com/docs/books/tutorial/uiswing/components/filechooser.html
Université Nice Sophia Antipolis
L3 Miage – POO Semestre 6 – composants swing – Philippe Renevier Gonin
10 / 28
QUELQUES COMPOSANTS SWING
JSPINNER
Choix d’une valeur (défilement)
Sans menu déroulant
Repose sur un SpinnerModel
Paramètre du constructeur de Jspinner / setModel
Éditeur de valeur mise de manière implicite
SpinnerListModel
SpinnerNumberModel
SpinnerDateModel
Exemples
model = new SpinnerNumberModel(
currentYear, //initial value
currentYear - 100, //min
currentYear + 100, //max
1
); //step
Date initDate = calendar.getTime();
calendar.add(Calendar.YEAR, -100);
Date earliestDate = calendar.getTime()
calendar.add(Calendar.YEAR, 200);
Date latestDate = calendar.getTime();
model = new SpinnerDateModel(initDate, earliestDate, latestDate, Calendar.YEAR);
Université Nice Sophia Antipolis
L3 Miage – POO Semestre 6 – composants swing – Philippe Renevier Gonin
12 / 28
JCOMBOBOX
Menu déroulant
Avec des String
Avec des Object ; utilisation du toString
Renderer personnalisable
Générique : new JComboBox<truc>(tabDeTruc)
ActionEvent et ItemEvent
Utilisation :
getSelectedItem() (retourne un objet… cast)
getSelectedIndex() (retourne un int)
Setter
Editable ou non
setEditable(boolean aFlag)
Seul la « clef » est modifiée
Université Nice Sophia Antipolis
L3 Miage – POO Semestre 6 – composants swing – Philippe Renevier Gonin
13 / 28
JSLIDER
slider = new JSlider(JSlider.HORIZONTAL, min, max, val_init);
une barre de Contrôle pour
une valeur
ChangeEvent (juste une
source)
ChangeListener /
stateChange
Cast sur le e.getSource()
// evenement
slider.addChangeListener(this);
// graduation principale
slider.setMajorTickSpacing(10);
// graduation secondaire
slider.setMinorTickSpacing(1);
// on montre les graduations
slider.setPaintTicks(true);
//Turn on labels at major tick marks
slider.setPaintLabels(true);
slider = new JSlider(Jslider.VERTICAL, min, max, val_init);
// […] c.f. ci-dessus
//Creation de la table de label
// clef = Integer / position sur la barre ; objet = JLabel
Hashtable<Integer, JLabel> labelTable = new Hashtable<Integer, JLabel> ();
labelTable.put( new Integer( 0 ), new JLabel("Stop") );
labelTable.put( new Integer( max/10 ), new JLabel("Slow") );
labelTable.put( new Integer( max ), new JLabel("Fast") );
framesPerSecond.setLabelTable( labelTable );
// activer l’affichage de ces labels
slider.setPaintLabels(true);
Université Nice Sophia Antipolis
L3 Miage – POO Semestre 6 – composants swing – Philippe Renevier Gonin
14 / 28
basé sur un transparent de Richard Grin
JSCROLLPANE
Tout composant graphique peut être placé dans
un JScrollPane, ce qui lui ajoute des barres de
défilement (par défaut au besoin) :
textArea = new JTextArea(5, 30);
JScrollPane scrollPane = new JScrollPane(textArea);
scrollPane.setPreferredSize(new Dimension(400, 100));
contentPane.add("Center", scrollPane);
Politique d’affichage des barres
setVerticalScrollBarPolicy(int) / setHorizontalScrollBarPolicy(int)
ScrollPaneConstants.
VERTICAL_SCROLLBAR_AS_NEEDED (the default), VERTICAL_SCROLLBAR_ALWAYS, and VERTICAL_SCROLLBAR_NEVER
HORIZONTAL_SCROLLBAR_AS_NEEDED (the default), HORIZONTAL_SCROLLBAR_ALWAYS, and HORIZONTAL_SCROLLBAR_NEVER.
Personnalisable (coin, « bord », etc.)
http://docs.oracle.com/javase/tutorial/uiswing/components/scrollpane.html
Université Nice Sophia Antipolis
L3 Miage – POO Semestre 6 – composants swing – Philippe Renevier Gonin
15 / 28
JSPLITPANE
Séparation d’une zone en deux
Séparation rétractable (une sous-zone est cachée)
JSplitPane.HORIZONTAL_SPLIT ou
JSplitPane.VERTICAL_SPLIT
splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, paneListe, paneImages);
splitPane.setOneTouchExpandable(true);
splitPane.setDividerLocation(150);
Ajout de composant :
add( component ) : 1er à gauche (ou haut) ; second à l’autre
setTop/Bottom/Left/Right/Component
Controler la séparation :
setDividerLocation (double (%) ou int (pixel) )
Université Nice Sophia Antipolis
L3 Miage – POO Semestre 6 – composants swing – Philippe Renevier Gonin
16 / 28
Model / Vue / Editeur
QUELQUES COMPOSANTS DE HAUT-NIVEAU
basé sur un transparent d’Audrey Occello
LES JLIST ET LES JTABLE
Permettent de représenter une collection de données
Il est possible de partager des données d’une JTable ou d’une
Jlist avec d’autres composants graphiques considérés comme
d’autres vues de la collection de données
Par exemple : une liste de noms affichée dans
une JList comme vue (interactive) de la liste de noms
permettant la sélection d’éléments
une représentation tabulaire de la même liste comme une
autre vue
un texte indiquant le nombre d’éléments de la liste comme
encore une autre vue
Université Nice Sophia Antipolis
L3 Miage – POO Semestre 6 – composants swing – Philippe Renevier Gonin
18 / 28
basé sur un transparent d’Audrey Occello
ILLUSTRATION JLIST/JTABLE
JList
JTable
19
Université Nice Sophia Antipolis
L3 Miage – POO Semestre 6 – composants swing – Philippe Renevier Gonin
19 / 28
basé sur un transparent d’Audrey Occello
JLIST
Possède
différents constructeurs :
Données fixes : JList (Vector listData) ou JList (Object[] listData)
Données modifiables : JList (ListModel dm)
Possède
une méthode permettant de spécifier le mode de
sélection setSelectionMode (int mode). mode peut valoir :
SINGLE_SELECTION
SINGLE_INTERVAL_SELECTION
MULTIPLE_INTERVAL_SELECTION
On
peut accéder au modèle de données sous-jacent avec
la méthode : ListModel getModel()
Université Nice Sophia Antipolis
L3 Miage – POO Semestre 6 – composants swing – Philippe Renevier Gonin
20 / 28
basé sur un transparent d’Audrey Occello
LISTMODEL
Pour le modèle de données, utiliser la classe DefaultListModel.
Ce modèle stocke les objets sous forme de vecteur et fournit les
méthodes suivantes :
addElement (Object),
boolean contains(Object),
boolean removeElement(Object)
Object get(index), Object remove(index), int size()
21
Université Nice Sophia Antipolis
L3 Miage – POO Semestre 6 – composants swing – Philippe Renevier Gonin
21 / 28
basé sur un transparent d’Audrey Occello
JLIST
Exemple
String listData[]= {…,« Kourouma »,…, « Nguyen »};
DefaultListModel model = new DefaultListModel();
for (int i=0; i<listData.length; i++)
model.addElement(listData[i]);
JList dataList = new JList(model);
22
Université Nice Sophia Antipolis
L3 Miage – POO Semestre 6 – composants swing – Philippe Renevier Gonin
22 / 28
JTABLE
Affichage de données dans un tableau.
Texte
Rendu personnalisé
(édition personnalisée)
http://docs.oracle.com/javase/tutorial/uiswing/components/table.html
Université Nice Sophia Antipolis
L3 Miage – POO Semestre 6 – composants swing – Philippe Renevier Gonin
23 / 28
JTABLE : CONSTRUCTION
Un tableau d’objet : les données
Un tableau de String : les titres
à deux dimensions (ligne, colonne)
Contenu hétérogène
à une dimension (colonne)
Le nom des colonnes, Cohérence des tailles des tableaux
Contruction
// films : Object[ ][ ] et nomDesColonnes : Object[ ]
JTable jt = new JTable(films, nomDesColonnes);
JFrame fen = new JFrame(); fen.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container container = fen.getContentPane();
utilisation « simple »
container.add(jt.getTableHeader(), BorderLayout.PAGE_START);
container.add(jt, BorderLayout.CENTER);
utilisation « JScrollPane »
JScrollPane jscp = new JScrollPane();
jscp.setViewportView(jt);
container.add(jscp);
Université Nice Sophia Antipolis
L3 Miage – POO Semestre 6 – composants swing – Philippe Renevier Gonin
24 / 28
PERSONNALISATION DU RENDU
Interface logicielle TableCellRenderer
public Component getTableCellRendererComponent(
JTable table, Object donnee,
boolean isSelected, boolean hasFocus,
int row, int column)
Association class (des données) avec l’objet
utilisé pour le rendu
jt.setDefaultRenderer(Img.class, new MyRender());
Img : la donnée à représenter
MyRender : la classe qui implements TableCellRenderer
Université Nice Sophia Antipolis
L3 Miage – POO Semestre 6 – composants swing – Philippe Renevier Gonin
25 / 28
PERSONNALISATION DU RENDU (SUITE)
Besoin de préciser le type (class) en fonction de la
colonne
class
MyTableModel extends AbstractTableModel
Méthode
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
Construction des tables
jt = new JTable(new MyTableModel(films, nomDesColonnes));
Université Nice Sophia Antipolis
L3 Miage – POO Semestre 6 – composants swing – Philippe Renevier Gonin
26 / 28
DefaultMutableTreeNode top = new DefaultMutableTreeNode("The Java Series");
tree = new JTree(top);
JTREE
[…]
tree.getSelectionModel().setSelectionMode
(TreeSelectionModel.SINGLE_TREE_SELECTION);
Rendu
basé sur
le toString
category = new DefaultMutableTreeNode("Books for Java Programmers");
top.add(category);
//original Tutorial
book = new DefaultMutableTreeNode(new BookInfo
("The Java Tutorial: A Short Course on the Basics",
"tutorial.html"));
category.add(book);
Université Nice Sophia Antipolis
L3 Miage – POO Semestre 6 – composants swing – Philippe Renevier Gonin
27 / 28
JTREE ET LISTENER
addTreeSelectionListener
public void valueChanged(TreeSelectionEvent e)
addTreeExpansionListener(TreeExpansionListener)
Une fois l’expansion produite
treeExpand / treeCollapse
addTreeWillExpandListener(TreeWillExpandListene
r)
Avant qu’elle se produise
treeWillExpand / treeWillCollapse
Université Nice Sophia Antipolis
L3 Miage – POO Semestre 6 – composants swing – Philippe Renevier Gonin
28 / 28
© Copyright 2026 ExpyDoc