Visualizzazione dei risultati da 1 a 4 su 4

Discussione: Problema con variabili

  1. #1

    Problema con variabili

    Salver agazzi,

    ho creato vedendo i post precedenti un evento su una JTable quando un utente clicca su una riga col tasto destro appare un JPopupmenu.

    Le opzioni che un utente ha sono Modifica, Cancella e Stampa....

    ora su questa tabella ho implementato 2 eventi del mouse

    doppio click e tasto destro

    per prendere la riga sulla quale l'utente desidera fare operazioni procedo in questo modo

    codice:
    public void mouseClicked(MouseEvent me) {
              	  
                	TableExample2 t = (TableExample2)me.getSource();
                	int row = t.rowAtPoint(me.getPoint());
                    int column = t.columnAtPoint(me.getPoint());
                    if (me.getClickCount() == 2) {
                    	//System.out.println("doppio click");
                        
                        riempiText(row, column); 
                    }//fine if
    }
    ora faccio lo stesso anche per il tasto destro

    codice:
    if(me.getButton() == MouseEvent.BUTTON3) //tasto dx
                    {
                      //  cancellaOperazione();
                    	
                    	
                    	popup = new JPopupMenu();
                        menuItem = new JMenuItem("Modifica");
                        
                        menuItem.addActionListener( new ActionListener() {
         		           public void actionPerformed( ActionEvent e ) {
         		        	 // System.out.println() 
         		        	  riempiText2(row,column); 
         		           }//fine metodoVoid
         		        });//fine actionlistener 
                        popup.add(menuItem);
                       
                        MouseListener popupListener = new PopupListener(popup);
                        tableOperazioni.addMouseListener(popupListener);
    
                    }}//fine else e if
    ora il problema è che richiede che io dichiari come final la variabile row. In questo modo una volta che a row assegno un valore poi ogni volta che faccio tasto destro il valore rimane sempre quello e i risultati sono sbagliati

    come posso fare?????

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

    Re: Problema con variabili

    Originariamente inviato da bircastri
    per prendere la riga sulla quale l'utente desidera fare operazioni procedo in questo modo

    codice:
    public void mouseClicked(MouseEvent me) {
              	  
                	TableExample2 t = (TableExample2)me.getSource();
                	int row = t.rowAtPoint(me.getPoint());
                    int column = t.columnAtPoint(me.getPoint());
                    if (me.getClickCount() == 2) {
                    	//System.out.println("doppio click");
                        
                        riempiText(row, column); 
                    }//fine if
    }
    Occhio solo a una cosa. Se non hai disabilitato la funzionalità di trascinamento delle colonne, l'utente può spostarle. Il columnAtPoint di JTable fornisce la colonna nella "view", non nel "model". Se il tuo riempiText() "ragiona" in termini di riga/colonna nella view allora ok, altrimenti (se sul model) no, ci possono essere problemi.

    Originariamente inviato da bircastri
    ora faccio lo stesso anche per il tasto destro

    codice:
    if(me.getButton() == MouseEvent.BUTTON3) //tasto dx
                    {
                      //  cancellaOperazione();
                    	
                    	
                    	popup = new JPopupMenu();
                        menuItem = new JMenuItem("Modifica");
                        
                        menuItem.addActionListener( new ActionListener() {
         		           public void actionPerformed( ActionEvent e ) {
         		        	 // System.out.println() 
         		        	  riempiText2(row,column); 
         		           }//fine metodoVoid
         		        });//fine actionlistener 
                        popup.add(menuItem);
                       
                        MouseListener popupListener = new PopupListener(popup);
                        tableOperazioni.addMouseListener(popupListener);
    
                    }}//fine else e if
    ora il problema è che richiede che io dichiari come final la variabile row. In questo modo una volta che a row assegno un valore poi ogni volta che faccio tasto destro il valore rimane sempre quello e i risultati sono sbagliati
    A me pare di no (cioè in teoria non dovrebbe esserlo). Il JPopupMenu è sempre "nuovo", idem il JMenuItem e idem il listener. Se non riusi il JPopupMenu per altro, il suo contesto è solo il click fatto su una cella.


    P.S: il test del button sull'evento è corretto ma nota che SwingUtilities offre un comodissimo boolean isRightMouseButton(MouseEvent)
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Ok grazie mille il problema di prima l'h risolto, dichiarando le variabili non nel metodo del mouseevent ma all'inizio della classe e adesso funziona.

    Una cosa però, se clikko col tasto destro su una riga non funziona se prima non l'ho selezionata col sinistro.

    Non si può unire questa funzione??

    Cioè mi posizione sulla riga tasto destro lui evidenzia e fa apparire il JPopupMenu??

    PS: grazie per quel sugggerimento

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da bircastri
    Una cosa però, se clikko col tasto destro su una riga non funziona se prima non l'ho selezionata col sinistro.

    Non si può unire questa funzione??

    Cioè mi posizione sulla riga tasto destro lui evidenzia e fa apparire il JPopupMenu??
    Allora: eventi del mouse e "selezione" sono due cose ben diverse. E perlomeno per quanto riguarda il "tasto destro" non centrano nulla. Il cambio della selezione è possibilmente una conseguenza degli eventi del mouse.

    Il click con tasto destro NON cambia la selezione. Ma potrebbe anche non importarti questo. Hai l'evento, puoi ottenere la riga relativa all'evento, usi la riga. Quale è il problema?
    Vuoi che venga selezionata? Allora se è solo questo .... imposta la selezione!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.