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 :

Localisation dans une JTable


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Août 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 8
    Par défaut Localisation dans une JTable
    Bonjour,

    Je dispose actuellement d'un JTable dans une JScrollPane, et je souhaiterai pouvoir effectuer une recherche / localisation dans la 1ere colone (de string) de celle-ci.

    En clair, j'ai des données dans ma JTable, et quand je tape ch, la selection se déplace sur le 1er élément de la 1ère colonne qui commence par ces caractères. (à la mode d'une JList quoi).

    Je ne retrouve malheureusement pas cette fonctionnalité en natif dans ma JTable, et je ne vois pas comment l'implémenter.

    Auriez vous des suggestions, ou connaissez-vous un component quasi-identique reproduisant ce comportement ?

    un comportement comme par exemple dans netbeans, dans "ajouter un bibliothèque", et quand je tape mes caractères, la sélection se fait et une petite zone de texte apparait serait très bien.

    Je "crois" également que JXTable l'implémente (pas certain), mais je souhaiterai connaitre les diverses possibilités qui existent, et les avantages des une par rapport aux autres.

    D'avance merci.

  2. #2
    Membre expérimenté Avatar de uhrand
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2009
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 203
    Par défaut
    Citation Envoyé par Inervo Voir le message
    Je dispose actuellement d'un JTable dans une JScrollPane, et je souhaiterai pouvoir effectuer une recherche / localisation dans la 1ere colone (de string) de celle-ci.
    C'est pas tellement compliqué à implémenter. Par exemple:
    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
    public static  void setQuickSearch(final JTable table) {
        final JTextField searchField = new JTextField();
        class Search {
            void search() {
                table.clearSelection();
                String text = searchField.getText();
                if (text.length() == 0) {
                    return ;
                }
                for (int row = 0; row < table.getRowCount(); row++) {
                    Object val = table.getValueAt(row, 0);
                    String value = val != null ? val.toString() : "";
                    if (value.toLowerCase().startsWith(text.toLowerCase())) {
                        table.changeSelection(row, 0, false, false);
                        break;
                    }
                }
            }
        }
        table.addKeyListener(new KeyAdapter() {
            @Override
            public void keyPressed(final KeyEvent evt) {
                char ch = evt.getKeyChar();
                if(!Character.isLetterOrDigit(ch)){
                    return ;
                }
                int selectedRow = table.getSelectedRow();
                int selectedColumn = table.getSelectedColumn();
                if (selectedRow >= 0 && selectedColumn >= 0 &&
                        table.isCellEditable(table.getSelectedRow(), table.getSelectedColumn())){
                    return ;
                }
                searchField.setText(String.valueOf(ch));
                final Search s = new Search();
                s.search();
                final JDialog d = new JDialog();
                d.setUndecorated(true);
                d.setSize(150, 20);
                d.setLocation(table.getTableHeader().getLocationOnScreen());
                final JLabel lb = new JLabel("Quick Search: ");
                d.add(lb, BorderLayout.LINE_START);
                d.add(searchField);
                d.setVisible(true);
                searchField.getDocument().addDocumentListener(new DocumentListener() {
                    public void insertUpdate(final DocumentEvent e) {
                        s.search();
                    }
                    public void removeUpdate(final DocumentEvent e) {
                        s.search();
                    }
                    public void changedUpdate(final DocumentEvent e) {
                        s.search();
                    }
                });
                searchField.addFocusListener(new FocusListener() {
                    @Override
                    public void focusGained(final FocusEvent e) {
                    }
                    @Override
                    public void focusLost(final FocusEvent e) {
                        d.dispose();
                    }
                });
                Action exit = new AbstractAction() {
                    @Override
                    public void actionPerformed(final ActionEvent e) {
                        d.dispose();
                    }
                };
                searchField.setAction(exit);
                searchField.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
                        KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "exit");
                searchField.getActionMap().put("exit", exit);
            }
        });
    }

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Août 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 8
    Par défaut
    Merci, je pense que c'est ce que je recherche.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Epaissir une ligne dans dans une JTable
    Par daninho dans le forum Composants
    Réponses: 9
    Dernier message: 26/01/2006, 14h43
  2. Insérer un vector dans une jTable...
    Par Empty_body dans le forum Composants
    Réponses: 3
    Dernier message: 14/12/2005, 17h35
  3. [Jtable] problème de suppression dans une Jtable
    Par gianni17 dans le forum Composants
    Réponses: 1
    Dernier message: 02/12/2005, 18h36
  4. Insertion des boutons et des images dans une JTable
    Par anouar dans le forum Composants
    Réponses: 2
    Dernier message: 17/11/2005, 20h23
  5. [JTable] couleur de sélection dans une JTable
    Par spoutyoyo dans le forum Composants
    Réponses: 7
    Dernier message: 06/12/2004, 11h43

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