L3 Miage – POO Semestre 6 – composants swing – Philippe Renevier Gonin 3 / 28 Université Nice Sophia Antipolis
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
basé sur un transparent d’Audrey Occello
L3 Miage – POO Semestre 6 – composants swing – Philippe Renevier Gonin 4 / 28 Université Nice Sophia Antipolis
JOPTIONPANE
Permet de créer des boîtes de dialogue standards
Possède des éléments standardisés :
Factory, méthodes statiques
showConfirmDialog
showInputDialog
showMessageDialog
showOptionDialog 4
Question –
JOptionPane.QUESTION_MESSAGE
Information –
JOptionPane.WARNING_MESSAGE
Avertissement –
JOptionPane.INFORMATION_MESSAGE
JOptionPane.PLAIN_MESSAGE
Information –
JOptionPane.ERROR_MESSAGE
basé sur un transparent d’Audrey Occello
L3 Miage – POO Semestre 6 – composants swing – Philippe Renevier Gonin 5 / 28 Université Nice Sophia Antipolis
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")) // on rajoute éventuellement .png
name = name+".png";
File imageFile = new File(name);
L3 Miage – POO Semestre 6 – composants swing – Philippe Renevier Gonin 6 / 28 Université Nice Sophia Antipolis
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
basé sur un transparent d’Audrey Occello
L3 Miage – POO Semestre 6 – composants swing – Philippe Renevier Gonin 7 / 28 Université Nice Sophia Antipolis
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
basé sur un transparent d’Audrey Occello
L3 Miage – POO Semestre 6 – composants swing – Philippe Renevier Gonin 8 / 28 Université Nice Sophia Antipolis
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
}
}
L3 Miage – POO Semestre 6 – composants swing – Philippe Renevier Gonin 9 / 28 Université Nice Sophia Antipolis
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() { // The description of this filter.
return "filtre d’image" ;
}
L3 Miage – POO Semestre 6 – composants swing – Philippe Renevier Gonin 10 / 28 Université Nice Sophia Antipolis
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
L3 Miage – POO Semestre 6 – composants swing – Philippe Renevier Gonin 12 / 28 Université Nice Sophia Antipolis
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);
L3 Miage – POO Semestre 6 – composants swing – Philippe Renevier Gonin 13 / 28 Université Nice Sophia Antipolis
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
L3 Miage – POO Semestre 6 – composants swing – Philippe Renevier Gonin 14 / 28 Université Nice Sophia Antipolis
JSLIDER
une barre de Contrôle pour une valeur
ChangeEvent (juste une source) ChangeListener /
stateChange
Cast sur le e.getSource()
slider = new JSlider(JSlider.HORIZONTAL, min, max, val_init);
// 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);
L3 Miage – POO Semestre 6 – composants swing – Philippe Renevier Gonin 15 / 28 Université Nice Sophia Antipolis
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
basé sur un transparent de Richard Grin
L3 Miage – POO Semestre 6 – composants swing – Philippe Renevier Gonin 16 / 28 Université Nice Sophia Antipolis
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) )
L3 Miage – POO Semestre 6 – composants swing – Philippe Renevier Gonin 18 / 28 Université Nice Sophia Antipolis
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
basé sur un transparent d’Audrey Occello
L3 Miage – POO Semestre 6 – composants swing – Philippe Renevier Gonin 19 / 28 Université Nice Sophia Antipolis
ILLUSTRATION JLIST/JTABLE
19
JList JTable
basé sur un transparent d’Audrey Occello
L3 Miage – POO Semestre 6 – composants swing – Philippe Renevier Gonin 20 / 28 Université Nice Sophia Antipolis
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()
basé sur un transparent d’Audrey Occello
L3 Miage – POO Semestre 6 – composants swing – Philippe Renevier Gonin 21 / 28 Université Nice Sophia Antipolis
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
basé sur un transparent d’Audrey Occello
L3 Miage – POO Semestre 6 – composants swing – Philippe Renevier Gonin 22 / 28 Université Nice Sophia Antipolis
JLIST
Exemple
22
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);
basé sur un transparent d’Audrey Occello
L3 Miage – POO Semestre 6 – composants swing – Philippe Renevier Gonin 23 / 28 Université Nice Sophia Antipolis
JTABLE
Affichage de données dans un tableau.
Texte
Rendu personnalisé
(édition personnalisée)
http://docs.oracle.com/javase/tutorial/uiswing/components/table.html
L3 Miage – POO Semestre 6 – composants swing – Philippe Renevier Gonin 24 / 28 Université Nice Sophia Antipolis
JTABLE : CONSTRUCTION Un tableau d’objet : les données
à deux dimensions (ligne, colonne)
Contenu hétérogène
Un tableau de String : les titres à 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);
L3 Miage – POO Semestre 6 – composants swing – Philippe Renevier Gonin 25 / 28 Université Nice Sophia Antipolis
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
L3 Miage – POO Semestre 6 – composants swing – Philippe Renevier Gonin 26 / 28 Université Nice Sophia Antipolis
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));
L3 Miage – POO Semestre 6 – composants swing – Philippe Renevier Gonin 27 / 28 Université Nice Sophia Antipolis
JTREE
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);
DefaultMutableTreeNode top = new DefaultMutableTreeNode("The Java Series");
tree = new JTree(top);
[…]
tree.getSelectionModel().setSelectionMode
(TreeSelectionModel.SINGLE_TREE_SELECTION);
Rendu
basé sur
le toString
L3 Miage – POO Semestre 6 – composants swing – Philippe Renevier Gonin 28 / 28 Université Nice Sophia Antipolis
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