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

    prova con KeyListener non funziona

    salve a tutti.. sono nuovo di questo forum e questo è il mio primo messaggio quindi se sbagli sezione o non mi sono presentato prima perdonatemi

    Bene, io ho un problema con il codice che posto qui sotto, in pratica volevo fare una semplice prova che se premevo un pulsante qualsiasi mi stampava a schermo "premuto", ma non succede niente, invece il MouseListener funziona benissimo, qualcuno sa dirmi cosa dimentico?

    codice:
    codice:
    import java.awt.Graphics;
    import java.awt.event.KeyAdapter;
    import java.awt.event.KeyEvent;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    
    import javax.swing.JPanel;
    
    @SuppressWarnings("serial")
    public class MyPanel extends JPanel{
    
    	String key = "niente";
    	String mouse = "niente";
    
    	public MyPanel(){
    		super();
    		
    		this.addKeyListener(new KeyAdapter() {
    
    			@Override
    			public void keyPressed(KeyEvent e) {
    				super.keyPressed(e);
    				key = "premuto";
    				repaint();
    			}
    			
    			@Override
    			public void keyReleased(KeyEvent e) {
    				super.keyReleased(e);
    				key = "rilasciato";
    				repaint();
    			}
    			
    		});
    		
    		
    		
    		this.addMouseListener(new MouseAdapter() {
    			
    			@Override
    			public void mousePressed(MouseEvent e) {
    				super.mousePressed(e);
    				mouse = "cliccato";
    				repaint();
    			}
    			
    			@Override
    			public void mouseReleased(MouseEvent e) {
    				super.mouseReleased(e);
    				mouse = "rilasciato";
    				repaint();
    			}
    		});
    		
    		
    	}
    	
    	@Override
    	protected void paintComponent(Graphics g) {
    		super.paintComponent(g);
    		g.drawString("keyboard: "+ key, 20, 20);
    		g.drawString("mouse: "+ mouse, 20, 40);
    	}	
    }

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Moderazione

    Ciao e benvenuto nel forum.
    Il forum è quello giusto, solo ho aggiunto i tag CODE per il codice, come prevede il regolamento interno, in modo da mantenere indentazione e formattazione.

    Perchè un componente sia in grado di rispondere ad un KeyListener è necessario che quel componente abbia lo stato attivo (il focus). Generalmente, solo i componenti che hanno una certa interattività ottengono automaticamente il focus (e sempre solo uno alla volta). Un JPanel non ha nulla di interattivo: è un contenitore di altri oggetti. Devi fare in modo di assicurarti che ce l'abbia lui lo stato attivo. Questo lo puoi fare richiamando il metodo requestFocusInWindow() dell'oggetto a cui si vuole dare il focus. Quindi, dopo aver istanziato il tuo JPanel (l'hai fatto vero?) e dopo averlo aggiunto alla finestra (l'hai fatto vero?) dovrai richiamarne il metodo:

    codice:
    public TuaFinestra() {
       ...
       MyPanel mp = new MyPanel();
       ...
       getContentPane().add( mp );   // o comunque tu l'abbia aggiunto
       ...
       mp.requestFocusInWindow();
    }
    Non ho testato se effettivamente funziona, ma dovrebbe...


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    grazie mille era proprio questo, ho dovuto aggiungere la funzione che rendeva focusable il pannello e quella che richiamare il focus come hai scritto tu e funziona tutto

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.