supplement-catalogue (1.33 Mo - modifié le 2014-02

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