IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants Java Discussion :

[Débutant][JList] Comment ça marche dans mon cas ?


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut
    Bon, j'ai foutu des traceurs partout dans listeMots_Selection et j'ai les résultats suivants :
    - le numéro d'item de la liste cliqué est le bon
    - la définition renvoyée qui lui est associée est la bonne

    J'en conclus donc à un comportement problématique du coté du JTextArea. Est-ce parce que je l'ai rendu non éditable pour l'utilisateur ? Pourtant, même en positionnant definition.setEditable(true), ça n'affiche rien.

    Sinon, pour le fait que je passe deux fois dans listeMots_Selection, je crois que c'est dû à la souris : clic appuyé/clic relâché.

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2002
    Messages : 652
    Par défaut
    essaye d'afficher >> item.mot() + " : " + item.definition() << ou utilise un debugger pour voir le contenus de la variable item.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Hello

    J'ai fait ce que tu m'a dit et j'ai la même chose qu'avec mes traceurs, à savoir :
    1. je clique sur l'item de la liste ==> renvoie le numéro de l'item (*2)
    2. le mot s'affiche dans la console
    3. la définition correspondante s'affiche également

    Mais absolument RIEN dans le JTextArea "definition".

    L'état des lieux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    public class Window extends JFrame implements ActionListener, ChangeListener {
    	...
    	static DefaultListModel listModel;
    	static JList listeMots;
    	JScrollPane jspListe;
     
    	JScrollPane containerDefinition;
    	Dimension scrollerSize;
    	JTextArea definition;
    	...
    	public Window() throws Exception {
    		...
    		listModel = new DefaultListModel();
    		listeMots = new JList();
    		listeMots.setModel( listModel);
    		listeMots.getModel();
    		listeMots.getSelectionModel().setSelectionMode( ListSelectionModel.SINGLE_SELECTION);
    		listeMots.addListSelectionListener( new ListSelectionListener() {
    			public void valueChanged( ListSelectionEvent e) {
    				listeMots_Selection(e);
    			}
    		});
    		listeMots.setEnabled( true);
    		listeMots.setVisible( true);
    		jspListe = new JScrollPane( listeMots);
    		...
    		definition = new JTextArea( 10, 40);
    		definition.setLineWrap( true);
    		definition.setWrapStyleWord( true);
    		definition.setEnabled( false);
    		definition.setVisible( true);
    		definition.setPreferredSize( scrollerSize);
    		...
    	}
     
     
    	public static void refreshList( int nb_occurrence) throws Exception {
    		listModel.removeAllElements();
    		listeMots.setListData( Main.ext.liste());
    	}
     
    	public void listeMots_Selection( ListSelectionEvent e) {
    		try {
    			int item = listeMots.getSelectedIndex();
    			definition.setText( Main.ext.liste()[item].definition());
    			System.out.println( "Item : " + item);
    			System.out.println( "Définition : " + Main.ext.liste()[item].definition());
    		}
    		catch  (Exception e1) {
    			System.err.println( "Erreur : " + e);
    		}
    	}
    	...
    }
    Merci encore de te donner autant de mal pour m'aider Alwin. :-)[/code]

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2002
    Messages : 652
    Par défaut
    Franchement, je ne vois pas...
    essaye pour test d'ajouter un JTextField au lieu d'un JTextArea...

    Domage que tu soit repasser avec une gestion par itemIndex

  5. #5
    Invité
    Invité(e)
    Par défaut
    Le problème d'un JTextField est que je ne peux pas avoir plusieurs lignes. Toutefois, je vais essayer de faire le test.

    Pour le système de gestion, je n'ai pas trop eu le choix : les définitions renvoyées se comportaient de manière aléatoire. (alors que théoriquement ça aurait du marcher). J'ai donc adapté le code.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Hello

    Bon j'ai du nouveau. Mais un petit rappel s'impose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    +-------------------+-------------------+
    |               JSplitPane              |
    | +----------------+ +----------------+ |
    | |  JScrollPane1  | |  JScrollPane2  | |
    | | +------------+ | | +------------+ | |
    | | |   JList    | | | | JTextArea  | | |
    | | +------------+ | | +------------+ | |
    | +----------------+ +----------------+ |
    +-------------------+-------------------+
    Mon JTextArea était contenu dans le JScrollPane2 (utilisant le composant Dimension pour paramétrer sa taille de manière à utiliser tout l'espace offert par le volet du JSplitPane).

    Quand j'ai changé mon JTextArea en JTextField, ça n'a guère mieux fonctionné : le texte de la définition ne s'affichait pas. En virant le JScrollPane2 au profit d'un JPanel, la définition s'affiche ! :-)

    Mais il subsiste quelques problèmes :

    - Comment faire pour que mon JTextArea emplisse tout l'espace du volet droit du JSplitPane de manière automatique ? Actuellement, le JTextArea occupe la dimension que je lui ai spécifié, mais se positionne au centre du volet droit du JsplitPane, dans sa partie haute.

    - Comme le JTextArea est par défaut non éditable dans mon code, le texte affiché est de couleur grise. Comment avoir le format du texte en noir gras (comme s'il était éditable) sans pour autant authoriser l'utilisateur à le modifier ?

    Merci d'avance pour vos idées.

    Note : je crois que le JPanel est un composant lourd, ce qui n'était pas le cas du JScrollPane il me semble. Si vous avez une solution pour utiliser le JScrollPane, je suis également prenneur. Encore merci. :-)[/code]

  7. #7
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2002
    Messages : 652
    Par défaut
    Bon, voici un code qui retranscris tes souhaits et qui fonctionne.
    J'utilise une inner class Mot pour la liste.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
     
    /*
     * Created on 27 juin 2004
     */
    package test;
     
    import java.awt.*;
    import java.util.*;
     
    import javax.swing.*;
    import javax.swing.event.*;
     
     
    public class MainFrame extends JFrame {
        JSplitPane sp = new JSplitPane();
        BorderLayout layout = new BorderLayout();
        JScrollPane scrollPane = new JScrollPane();
        JScrollPane areaScrollPane = new JScrollPane();
        JList liste = new JList();
        JTextArea area = new JTextArea(10,40);
     
        public void init() {
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            Container contentPane = this.getContentPane();
            contentPane.setLayout(layout);
            scrollPane.getViewport().add(liste);
            areaScrollPane.getViewport().add(area);
            area.setWrapStyleWord(true);
            area.setAutoscrolls(true);
            area.setEditable(false);
     
            contentPane.add(sp,BorderLayout.CENTER);
            sp.add(scrollPane,JSplitPane.LEFT);
            sp.add(areaScrollPane,JSplitPane.RIGHT);
            sp.setDividerLocation(200);
     
     
     
            this.setSize(640,480);
            this.setTitle("Test pour gcore");
            this.setVisible(true);
     
            liste.setListData(getListeMots().toArray());
     
            // Ajout du listener sur la liste
            liste.addListSelectionListener(
                    new ListSelectionListener() {
                        public void valueChanged(ListSelectionEvent e) {
                            updateArea(e);
                        }
     
                    }
            );
        }
     
     
        public void updateArea(ListSelectionEvent e) {
            if( !e.getValueIsAdjusting()) { // empèche de doubler l'évènement
                Mot mot = (Mot)liste.getSelectedValue();
                if( mot != null ) {
                    area.setText(mot.getDefinition());
                    area.setCaretPosition(0);
                }
            }
        }
        public static void main(String[] args) {
            final MainFrame test = new MainFrame();
            SwingUtilities.invokeLater(
                    new Runnable() {
                        public void run() {
                            test.init();
                        }
                    }
            );
        }
     
        public class Mot {
            private String mot;
            private String definition;
     
            public Mot(String mot, String definition) {
                this.mot = mot;
                this.definition = definition;
            }
            public String getDefinition() {return definition;}
            public void setDefinition(String definition) {this.definition = definition;}
            public String getMot() {return mot;}
            public void setMot(String mot) {this.mot = mot;}
     
            public String toString() {return mot;}
        }
     
        public Collection getListeMots() {
            Collection lst = new ArrayList();
     
            lst.add(new Mot("Tres","Le tres est un instrument de musique, une petite guitare taillée dans le bois épais d'un cajot de morue et tendue de trois paires de cordes en boyau d'agouti (tres signifie trois en espagnol), fabriquée à partir de 1600 environ à La Havane.\r\nElle est jouée dans la Trova, le Punto et le Son cubain"));
            lst.add(new Mot("Alcades","Alcades est dans la mythologie grecque le fils d'Ouranos.\r\nIl grandissait de deux mètres par an."));
            lst.add(new Mot("Andalousie","L'Andalousie (Andalucía en espagnol) est l'une des dix-sept communautés autonomes d'Espagne.\r\nElle se trouve au sud de la péninsule ibérique.\r\nElle est bordée au nord par Estrémadure et Castille-La Manche, à l'est par la communauté autonome de Murcie, au sud par la mer Méditerranée et Gibraltar, et à l'ouest par le Portugal."));
            return lst;
        }
    }
    Voilà, copier/coller dans un projet et tu pourras tester et comparer.

  8. #8
    Invité
    Invité(e)
    Par défaut
    Yeah !

    Alwin, tu es génial ! En fait, il me manquait juste le .getViewport(). à ratacher au JScrollPane quant je lui ajoute le JTextArea. :-)

    En revanche, je n'ai toujours pas trouvé comment donner à ma définition un aspect "éditable" (i.e. en caractères de couleur noire, et non pas grise) sans pour autant que le JtextArea soit éditable (au sens Java du terme).

    Question subsidiaire : il y a-t'il un moyen de passer la définition de l'item cliqué dans le presse-papier par un moyen simple (en conservant la portabilité) de manière à pouvoir coller le texte de celle-ci dans un éditeur de texte par défaut du système d'exploitation (notepad, vi, etc.) ?

    Vraiment merci Alwin. :-)

  9. #9
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2002
    Messages : 652
    Par défaut
    Regarde mon TextArea, il n'est pas grisé, sans être éditable pour autant !

    Pour le press papier, je n'ai jamais jouer avec mais il me semble que c'est possible... Fait une petite recherche java +clipboard sous google

  10. #10
    Invité
    Invité(e)
    Par défaut
    Oups.

    J'avais mal lu : j'ai confondu setEditable() avec setEnabled(). Mea culpa.

    Pour le clipboard, j'ai finalement trouvé une meilleure solution qui ne me fait ajouter que deux lignes dans mon code.

    Merci encore pour tout.

    :D :D :D :D :D :D :D :D :D :D :D :D

  11. #11
    Invité
    Invité(e)
    Par défaut
    Argh !

    Il y a un truc qui va pas et je viens juste de m'en rendre compte.

    Avant, lors du survol de mon application, le curseur changeait. Cette propriété est conservée partiellement.

    En effet, ça ne marche plus sur le JTextArea. Je crois que c'est à cause du getViewport() lors de l'affectation du JTextArea dans son container.

    Quelqu'un a une idée pour que mon curseur reste personnalisé même lors du survol du JTextArea ?

    Merci.

  12. #12
    Invité
    Invité(e)
    Par défaut
    Bon, j'ai bidouillé un truc et à priori ça re-fonctionne (je ne sais ni comment ni pourquoi mais ça tourne donc je vais pas chercher plus loin dans l'immédiat).

    Donc le sujet est clos.

    Merci encore à tous pour votre précieuse aide (un bonus spécial pour Alwin).

    :-)

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. mysql_real_escape_string ne marche pas dans mon cas
    Par ju0123456789 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 23/10/2010, 22h16
  2. comment utiliser impdb dans mon cas ?
    Par TshAw dans le forum Import/Export
    Réponses: 1
    Dernier message: 30/01/2010, 08h46
  3. [PHP 5.2] Comment retinrer les accent dans mon cas
    Par pierrot10 dans le forum Langage
    Réponses: 1
    Dernier message: 15/06/2009, 15h56
  4. Comment utiliser les datasets dans mon cas
    Par dachir dans le forum ASP.NET
    Réponses: 5
    Dernier message: 13/01/2009, 09h44
  5. Comment aborder les collisions dans mon cas?
    Par MonsieurHelmut dans le forum Physique
    Réponses: 4
    Dernier message: 18/02/2007, 16h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo