Quelques composants swing - deptinfo.unice.frdeptinfo.unice.fr/~renevier/ancien/POO-2015/cours/01 -...

28
QUELQUES COMPOSANTS SWING

Transcript of Quelques composants swing - deptinfo.unice.frdeptinfo.unice.fr/~renevier/ancien/POO-2015/cours/01 -...

QUELQUES COMPOSANTS SWING

BOITES DE DIALOGUE

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

QUELQUES COMPOSANTS SWING

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) )

Model / Vue / Editeur

QUELQUES COMPOSANTS DE HAUT-NIVEAU

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