Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [JTable] Problema con selectionListener

    Salve a tutti, ho creato un piccolo programma con interfaccia grafica, costituita da una tabella che stampa a video tutti gli elementi di una matrice.
    Voglio fare in modo che quando uno clicca una qualsiasi cella della matrice, venga stampato a schermo "Hai selezionato l'elemento ..." (tramite un println()).
    Il listener che ho implementato è questo:
    codice:
                    ListSelectionModel lsm = t.getSelectionModel();
            lsm.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
            lsm.addListSelectionListener(new ListSelectionListener() {
                  public void valueChanged(ListSelectionEvent e) {
                    System.out.println(e);
                    Chess.ChessMen sel = null;
                    int rows[] = t.getSelectedRows();
                    int cols[] = t.getSelectedColumns();
                    for(int i=0; i<rows.length; i++)
                        for(int j=0; j<cols.length; j++)
                            sel = (Chess.ChessMen)t.getValueAt(rows[i], cols[j]);
                    System.out.println("Hai selezionato l'elemento " +sel);
                }
            });
    All'apparenza funziona perfettamente, perché qualsiasi cella clicco viene stampata la scritta giusta.
    Però c'è un problema, l'evento non viene richiamato se, dopo aver cliccato una cella, ne clicco un altro sulla stessa riga.
    Se, ad esempio, clicco l'elemento (0;0) viene stampato il messaggio esatto, ma se dopo clicco l'elemento (0;1) (cioè stessa riga ma colonna diversa) non viene richiamato l'evento e, di conseguenza, non viene stampato nulla.
    Se invece dopo aver richiamato (0;0) richiamo (1;0) e dopo (0;1) tutte le scritte vengono stampate correttamente.
    Come devo fare affinché l'evento venga richiamato ovunque io clicchi?
    Grazie.

  2. #2
    Perché il "valueChanged"?

    Clicchi sulla tabella col mouse giusto?
    in caso affermativo fai cosi:
    codice:
     table.addMouseListener(new MouseAdapter() {    
                       public void mouseReleased(MouseEvent e){
                            java.awt.Point p = e.getPoint();
                            int column = table.columnAtPoint(p);
                            int row = table.rowAtPoint(p);
                            Object obj=table.getValue(row, column);
                            System.out.println(l oggetto cliccato è:+obj.toString());
                       }
                });
    Poi lo puoi modificare a tuo piacimento.

    Ciao.
    Ultima modifica di schumy2000; 04-11-2013 a 00:21
    I computer sono incredibilmente veloci, accurati e stupidi.
    Gli uomini sono incredibilmente lenti, inaccurati e intelligenti.
    Insieme sono una potenza che supera l'immaginazione.

    A.Einstein

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.