Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2010
    Messaggi
    34

    [JTable + JPopupMenu] aprire JPopupMenu su clic destro su determinate righe

    Salve!

    Titolo complicato per dire che cosa..

    Cio' che vorrei fare e':

    Ho la mia tabella nel mio frame, ho il mio jpopupmenu con i suoi bottoni che gestiranno poi eventuali operazioni.
    Ora, con un listener sul mouse faccio in modo che il popupmenu' corrisponda al un clic destro sulla tabella, il codice e' piu' o meno
    codice:
            table.addMouseListener(new MouseAdapter() {
               public void mousePressed(MouseEvent e) { eccetera
    fin qui tutto ok..

    Cio' che vorrei poter fare io sarebbe che il menu' si aprisse non ad un casuale clic destro sulla tabella ma in corrispondenza di una row selezionata, in modo tale da poter poi modificare i campi della row (una delle varie funzioni del popupmenu e' appunto edit, che mi apre un jdialog eccetera)

    Ed e' qui che mi son bloccato..con table.getSelectedRow() ho di ritorno un intero che indica che riga e' selezionata, ma come uso quest'informazione per chiamarci sopra il mouse listener?
    Indicativamente, quello che si vorrebbe poter fare e' tipo table.getSelectedRow().addMouseListener(....)
    questo se getSelectedRow() ritornasse un Object e non un int...ma ok, sto sconfinando nella fantascienza ora..:P

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [JTable + JPopupMenu] aprire JPopupMenu su clic destro su determinate righe

    Originariamente inviato da stefo_11
    Ed e' qui che mi son bloccato..con table.getSelectedRow() ho di ritorno un intero che indica che riga e' selezionata, ma come uso quest'informazione per chiamarci sopra il mouse listener?
    No. Il MouseEvent ti dà un Point (il punto di click). Il Point lo puoi passare a:

    int columnAtPoint(Point point)
    int rowAtPoint(Point point)

    Questi forniscono gli indici riga/colonna nella "view". Se poi ti serve l'indice di riga/colonna nel model, allora li dovresti traslare perché potrebbero essere differenti (vedi convertRowIndexToModel e convertColumnIndexToModel).
    L'utente per default infatti ha la possibilità di "trascinare" le colonne e spostarle mentre da Java 6 si può assegnare un RowSorter (questo lo "sai" tu se c'è un ordinamento).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2010
    Messaggi
    34
    Perfetto, grazie mille..

    Funziona, spiego brevissimamente che ho fatto cosi' che se qualcuno avra' lo stesso problema lo trova gia' risolto (io non so come farei senza l'archivio di html.it:P spero questa volta di poter esser io a dare aiuto oltre che riceverlo^^)

    Ho raccolto il Point del punto di clic del mouse come indicato da andbin:
    Point p = e.getPoint();

    e ho messo in una variabile intera la riga a cui questo corrisponde:
    dove_sono = table.rowAtPoint(p);
    (la var dove_sono e' inizializzata sopra)

    e poi quando clicco sull'opzione modifica controllo:

    codice:
                     	if(table.isRowSelected(dove_sono))
                    		edita_riga();
                    	else
                    		 JOptionPane.showMessageDialog(null, "Errore, riga selezionata per la modifica non valida (" +
                    		 		"per la modifica occorre clic.destro sulla riga che si desidera" +
                    		 		" modificare)", "Errore", JOptionPane.ERROR_MESSAGE);
    dove il metodo edita_riga() apre poi un jdialog con tutti i campi del caso..


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.