Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339

    Identificare Un componente Row (riga) di una JTable con un mouse listener

    Sto implementando un ascoltatore che deve far apparire un piccolo menù quando si clicca con il tasto destro del mouse su una riga di una JTable.

    codice:
    public class ascoltatoreMouseJTable implements MouseListener {
    	
    	
    	public void MouseClicked(MouseEvent e){
    		
    		if(e.getComponent().equals(?)){
                    
                    //FAI QUESTO
    
    
    		}
    	}
    	
    }
    Come faccio a capire quando il componente è uguale a Row ?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Markus85 Visualizza il messaggio
    Sto implementando un ascoltatore che deve far apparire un piccolo menù quando si clicca con il tasto destro del mouse su una riga di una JTable.
    Come faccio a capire quando il componente è uguale a Row ?
    Vedi mia risposta qui
    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
    Feb 2011
    Messaggi
    339
    Non capisco come far apparire il JPopupMenu nella JTable

    Ho creato il JPopupMenu :

    codice:
    public class PopupMenuJTable extends JPanel {
    	
    	public static JPopupMenu pmenu;
    	
    	public PopupMenuJTable(){
    		
    		pmenu = new JPopupMenu();
    		JMenuItem item;
    		pmenu.add(item = new JMenuItem("Vendi Articolo..."));
    		pmenu.add(item = new JMenuItem("Vedi Caratteristiche..."));
    			
    	}
    
    
    }
    Il mouse listener mi sa che fa acqua :

    codice:
    public class ascoltatoreMouseJTable implements MouseListener {
    	
    	
    	@Override
    	public void mouseClicked(MouseEvent e){
    	        
    			checkPopup(e);
    			
    	}
    	
    	 private void checkPopup(MouseEvent e) {
    	      if (e.isPopupTrigger()) {
    	        PopupMenuJTable.pmenu.show(new PopupMenuJTable() , e.getX(), e.getY());
    	        
    	        
    	      }
    	    }
    
    
    	@Override
    	public void mouseEntered(MouseEvent arg0) {
    		// TODO Auto-generated method stub
    		
    	}
    
    
    	@Override
    	public void mouseExited(MouseEvent arg0) {
    		// TODO Auto-generated method stub
    		
    	}
    
    
    	@Override
    	public void mousePressed(MouseEvent arg0) {
    		// TODO Auto-generated method stub
    		
    	}
    
    
    	@Override
    	public void mouseReleased(MouseEvent arg0) {
    		// TODO Auto-generated method stub
    		
    	}
    
    
    }
    P.S. Come faccio ad associare il MouseListener alla JTable?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Markus85 Visualizza il messaggio
    codice:
    	public static JPopupMenu pmenu;
    	
      .....
    
    	        PopupMenuJTable.pmenu.show(new PopupMenuJTable() , e.getX(), e.getY());
    Fa "acqua" dal punto di vista del design (campo pubblico+statico!) e fa pure "acqua" perché il giro di inizializzazione è quanto meno fumoso.
    È vero che pmenu lo assegni nel costruttore di PopupMenuJTable. Ma alla prima volta che checkPopup viene invocato, PopupMenuJTable.pmenu è ancora a null. Il compilatore fa sì che il costruttore venga comunque invocato ma ormai ha già valutato l'espressione deducendo che pmenu è null.

    Evita come la peste queste cose .....


    E inoltre aggiungo: show ha il primo parametro Component invoker: "the component in whose space the popup menu is to appear". Ma il tuo PopupMenuJTable (JPanel) non è nemmeno a video!
    Ultima modifica di andbin; 11-07-2014 a 18:10
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339
    Credo di aver risolto...

    codice:
    public class ascoltatoreMouseJTable extends MouseAdapter{
    	
    	
    	
    	@Override
    	public void mouseClicked(MouseEvent e){
    		// TODO Auto-generated method stub
    
    
    	}
    
    
    	@Override
    	public void mouseEntered(MouseEvent e) {
    		// TODO Auto-generated method stub	
    	}
    
    
    	@Override
    	public void mouseExited(MouseEvent e) {
    		// TODO Auto-generated method stub
    		
    	}
    
    
    	@Override
    	public void mousePressed(MouseEvent e) {	
    		// TODO Auto-generated method stub
    	}
    
    
    	@Override
    	public void mouseReleased(MouseEvent e) {
    	  
    		if(e.isPopupTrigger())
    			new PopupMenuJTable();
                PopupMenuJTable.pmenu.show(InterfacciaPrincipale.Jtable , e.getX(),e.getY());     
    		
    	}
    	
    }

    codice:
    public class PopupMenuJTable extends JPanel {
    	
    	public static JPopupMenu pmenu;
    	
    	public PopupMenuJTable(){
    		
    		pmenu = new JPopupMenu();
    		JMenuItem item;
    		pmenu.add(item = new JMenuItem("Vendi Articolo..."));
    		pmenu.add(item = new JMenuItem("Vedi Caratteristiche..."));
    			
    	}
    
    
    }//POPUP MENU JTABLE

    In alternativa al campo pubblico + statico come posso fare?

  6. #6
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Perché estendi MouseAdapter se puoi ridefinisci lo stessi i metodi che non ti servono?

    codice:
    public class AscoltatoreMouseJTable extends MouseAdapter {
        
        
        @Override
        public void mouseReleased(MouseEvent e) {
          
            if(e.isPopupTrigger())
                new PopupMenuJTable();
                PopupMenuJTable.pmenu.show(InterfacciaPrincipale.Jtable , e.getX(),e.getY());     
            
        }
        
    }
    Poi, sai vero che quell'if, nonostante l'indentazione, include solo la riga "new PopupMenuJTable()"?

    Tra l'altro, non fai prima a dichiarare il listener come classe interna anonima?
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339
    Già

    codice:
    public class ascoltatoreMouseJTable extends MouseAdapter{
    	
    
    
    	@Override
    	public void mouseReleased(MouseEvent e) {
    	  
    		if(e.getButton() == MouseEvent.BUTTON3){
    			new PopupMenuJTable();
                PopupMenuJTable.pmenu.show(InterfacciaPrincipale.Jtable , e.getX(),e.getY());     
    		}
    	}
    	
    }

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.