Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    14

    Scrivere un solo carattere

    Ciao a tutti.
    Dopo essere un po' impazzita sono riuscita a scrivere questo programmino che disegna un rettangolo o un ovale a seconda del tasto premuto.
    Vorrei modificare il programma in modo che sia possibile digitare un solo ed unico carattere e non una stringa.
    Non riesco a trovare un metodo pronto. Pensavo di poter chiudere

    testo += e.getKeyChar();
    repaint();

    all'interno di un ciclo, solo che il risultato è che non digita proprio niente. Potete indicarmi la strada su cui continuare ad impazzire?


    codice:
    public class EsercizioDue extends Frame implements KeyListener
    {
    	Ascoltatore asc = new Ascoltatore();
    	String testo ="";
    	
    	
    	public static void main (String args[])
    	{
    		EsercizioDue ist = new EsercizioDue();		
    	}
    	
    	EsercizioDue()
    	{
    		setBounds(5,10,500,300);
    		setTitle ("Esercizio Due");
    		addWindowListener(asc);
    //		addKeyListener(this);
    		setVisible(true);		
    	}	
    	
    	public void keyPressed (KeyEvent e)
    	{		
    	}
    	public void keyReleased (KeyEvent e)
    	{		
    	}
    	public void keyTyped (KeyEvent e)
    	{	
    		testo += e.getKeyChar();
    		repaint();
    	}
    	
    	public void paint (Graphics g)
    	{		
    		g.setColor(Color.red);
    		g.drawString("Digita una R per disegnare un rettangolo oppure uno O per un ovale", 20, 40);
    		g.setColor(Color.black);
    		g.drawString(testo, 30, 80);		
    		
    		addKeyListener(this);
    		if (testo.equalsIgnoreCase("r"))
    			g.drawRect(20, 80, 400, 200);
    		if (testo.equalsIgnoreCase("o"))
    			g.drawOval(20, 80, 400, 200);
    //		else 
    //			System.out.println("Hai digitato un tasto non corretto");
    		
    	}
    	
    	class Ascoltatore extends WindowAdapter
    	{
    		public void windowClosed (WindowEvent e)
    		{
    			System.exit(0);
    		}
    		public void windowClosing (WindowEvent e)
    		{
    			e.getWindow().dispose();
    		}
    	}
    }

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,323
    Non so se è quello che serve a te, ma dovresti modificare il keyTyped in questo modo:

    codice:
    public void keyTyped(KeyEvent e) {
       testo = String.valueOf( e.getKeyChar() );
    }
    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
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Ti conviene utilizzare Swing e non AWT.
    Per la chiusura del Frame puoi utilizzare setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    Prima di tutto se vuoi utilizzare un carattere non ha senso memorizzarlo in una stringa. Ha ancora meno senso concatenare il valore letto da tastiera...
    Il valore dovresti leggerlo in keyPressed() o keyReleased(). Inoltre non capisco perchè metti l'ascoltatore nel metodo paint()!!
    paint() viene chiamato ogni volta che deve essere ridisegnata la finestra...non viene chiamato solo una volta!

    Comunque ecco il codice sistemato. E' ciò che ti serve penso:
    codice:
    import java.awt.*;
    import java.awt.event.*;
    
    
    public class EsercizioDue extends Frame implements KeyListener
    {
    	Ascoltatore asc = new Ascoltatore();
    	char testo;
    	
    	
    	public static void main (String args[])
    	{
    		EsercizioDue ist = new EsercizioDue();		
    	}
    	
    	EsercizioDue()
    	{
    		setBounds(5,10,500,300);
    		setTitle ("Esercizio Due");
    		addWindowListener(asc);
    		addKeyListener(this);
    		setVisible(true);		
    	}	
    	
    	public void keyPressed (KeyEvent e)
    	{		
    	}
    	public void keyReleased (KeyEvent e)
    	{		
        		testo = e.getKeyChar();
    		repaint();
    	}
    	public void keyTyped (KeyEvent e)
    	{	
    
    	}
    	
    	public void paint (Graphics g)
    	{		
    		g.setColor(Color.red);
    		g.drawString("Digita una R per disegnare un rettangolo oppure uno O per un ovale", 20, 40);
    		g.setColor(Color.black);
    		g.drawString(String.valueOf(testo), 30, 80);		
    		
    		if (testo == 'r')
    			g.drawRect(20, 80, 400, 200);
    		if (testo == 'o')
    			g.drawOval(20, 80, 400, 200);
    //		else 
    //			System.out.println("Hai digitato un tasto non corretto");
    		
    	}
    	
    	class Ascoltatore extends WindowAdapter
    	{
    		public void windowClosed (WindowEvent e)
    		{
    			System.exit(0);
    		}
    		public void windowClosing (WindowEvent e)
    		{
    			e.getWindow().dispose();
    		}
    	}
    }

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    14
    Grazie a entrambi per la risposta.
    @Patrick Jane
    se non inserisco l'ascoltatore nel metodo paint non sente la pressione del tasto...

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    A me la sente benissimo. Comunque puoi inserire nel costruttore setFocusable(true).

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.