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 2024 ExpyDoc