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

    Esercizio Eventi Tastiera

    Ragazzi ho un problema con questo esercizio...posto testo ed il mio codice
    codice:
    
     /** Esercizio:
    1)creare un frame con una scritta centrata in esso.
    2)La dimensione della scritta cambia se si schiacciano i tasti corrispondenti
    ai numeri(0 grandezza minima,9 grandezza massima).
    3)Il colore della scritta cambia come segue:
    -rosso,verde e blue aumentano di un'unità ogni volta che schiaccio i tasti
    'r','g','b' rispettivamente.
    -Diminuiscono di un'unità ogni volta che schiaccio i tasti'e','f',e 'v'
    rispettivamente.
    */
    
    import java.awt.*;
    import javax.swing.*;
    import java.awt.event.*;
    
    public class EsercizioEventi extends JFrame implements KeyListener
    {
        private mioPannello pannellino;
    
        public EsercizioEventi()
        {
            setTitle("Eventi in un pannello");
            setSize(new Dimension(500,500));
            setLocation(new Point(200,200));
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            //dichiaro il frame listener di se stesso
            addKeyListener(this);
            Container contentPane=getContentPane();
            pannellino=new mioPannello();
            contentPane.add(pannellino);
        }
    
        public void KeyPressed(KeyEvent e)
        {
            //recupero il codice del tasto premuto
            int codiceTasto=e.getKeyCode();
            //recupero eventuali modificatori si stringhe
            int modificatori=e.getModifiers();
            //verifico cosa è stato premuto e cambio la dimensione della parola
            if(codiceTasto==KeyEvent.VK_0)
                pannellino.dimFont=6;
            else if(codiceTasto==KeyEvent.VK_1)
                pannellino.dimFont=10;
            else if(codiceTasto==KeyEvent.VK_2)
                pannellino.dimFont=12;
            else if(codiceTasto==KeyEvent.VK_3)
                pannellino.dimFont=14;
            else if(codiceTasto==KeyEvent.VK_4)
                pannellino.dimFont=18;
            else if(codiceTasto==KeyEvent.VK_5)
                pannellino.dimFont=22;
            else if(codiceTasto==KeyEvent.VK_6)
                pannellino.dimFont=24;
            else if(codiceTasto==KeyEvent.VK_7)
                pannellino.dimFont=32;
            else if(codiceTasto==KeyEvent.VK_8)
                pannellino.dimFont=42;
            else if(codiceTasto==KeyEvent.VK_9)
                pannellino.dimFont=72;
            else if(codiceTasto==KeyEvent.VK_R)//aumento ikl rosso se clicco sul tasto R
                pannellino.incrementaRosso();
            else if(codiceTasto==KeyEvent.VK_G)
                pannellino.incrementaVerde();
            else if(codiceTasto==KeyEvent.VK_B)
                pannellino.incrementaBlue();
            else if(codiceTasto==KeyEvent.VK_E)//diminuisce il rosso
                pannellino.decrementaRosso();
            else if(codiceTasto==KeyEvent.VK_F)//diminuisce il verde
                pannellino.decrementaVerde();
            else if(codiceTasto==KeyEvent.VK_V)//diminuisce il blue
                pannellino.decrementaBlue();
            pannellino.repaint();
        }
        public void keyReleased(KeyEvent e)
        {
        }
    
        public void keyTyped(KeyEvent e)
        {
        }
    
        public static void main(String[]args)
        {
            JFrame frame=new EsercizioEventi();
            frame.setVisible(true);
    }
    }
    
    //creo il pannello per scrivere
    class mioPannello extends JPanel
    {
        static int dimFont=10;
        static int r=95,g=95,b=95;
        static int e=95,v=95,f=95;
    
        //public mioPannello()
        //{
        //inplemento i vari metodi
        public static void incrementaRosso()
            {
               if(r<245)
                   r+=20;
           }
    
        public static void incrementaVerde()
            {
               if(g<245)
                   g+=20;
           }
    
           public static void incrementaBlue()
            {
               if(b<245)
                   b+=20;
           }
           public static void decrementaRosso()
            {
               if(e>20)
                   e-=20;
           }
           public static void decrementaVerde()
            {
               if(f>20)
                   f-=20;
           }
           public static void decrementaBlue()
            {
               if(b>20)
                 b-=20;
           }
    
        public void paintComponent(Graphics g)
        {
            super.paintComponent(g);
            //qui inizio a creami la scritta
            int larghezzaStringhe=this.getWidth()/2;
            int altezzaStringhe=this.getHeight()/2;
            //scrivo la frase
            String messaggio="DAVIDE";
            //creo e imposto i font da usare
            Font f=new Font("SanSerif",Font.BOLD+Font.ITALIC,24);
            g.setFont(f);
            setBackground(Color.cyan);
            g.drawString(messaggio,larghezzaStringhe-25,altezzaStringhe);//-25 è la grandezza di default delle stringhe
        }
    }
    Praticamente quando clicco sui tasti non succede nulla,nè cambia colore la scritta,nè cambia la dimensione della scritta.Dove sbaglio?
    Grazie mille in anticipo a tutti

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

    Re: Esercizio Eventi Tastiera

    Originariamente inviato da sicula83
    Praticamente quando clicco sui tasti non succede nulla,nè cambia colore la scritta,nè cambia la dimensione della scritta.Dove sbaglio?
    Ci sono diverse cose che non vanno, pure concettuali.

    a) Per fare quello che il testo richiede non sarebbe nemmeno necessario effettuare il painting diretto sul Graphics (se ti è stato richiesto esplicitamente .. beh, ok). Bastarebbe usare una banale JLabel ed impostare font/colore con setFont()/setForeground().

    b) Il tuo codice così come è non compila perché hai scritto KeyPressed mentre va messo keyPressed

    c) Nella tua classe mioPannello hai messo variabili e metodi di classe (static). Funziona ma non ha molto senso ... dovrebbero essere variabili/metodi di istanza.

    d) Sempre concettualmente, il repaint dovrebbe essere fatto dentro la classe mioPannello, non all'esterno. Cioè è mioPannello che dovrebbe "sapere" quando ridisegnarsi.

    e) A parte tutto quanto detto sopra, tu hai messo delle variabili dimFont, r, g, b, ecc... ma poi non le hai usate in paintComponent(), quindi non vedo proprio come la visualizzazione possa cambiare!!! Cioè stai solo cambiando il valore di quelle variabili ....
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Ker quanto riguarda keyPressed avevo già corretto,mi ero dimenticata di correggerlo qui.Per il resto hai ragione e ti ringrazio tantissimo.
    Vado a sistemarlo così come mi hai spiegato.Grazie mille

  4. #4
    Un ultimo favore...ho riprovato ma nulla,non funziona.Non è che cortesemente potresti aggiustare il mio codice?Te ne sare grata così capisco dove ho sbagliato...perchè sicuramente continuo a sbagliare qualcosa
    Grazie mille e scusa per il disturbo

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da sicula83
    Un ultimo favore...ho riprovato ma nulla,non funziona.Non è che cortesemente potresti aggiustare il mio codice?
    Ma hai provato a fare delle modifiche al codice sulla base di quanto ho detto?? Perché nel codice che hai postato ci sarebbero molte (troppe) cose da cambiare.

    Io ti suggerisco di non fare il painting diretto sul componente ma di usare un semplice JLabel per visualizzare il testo. Poi devi solo cambiargli Font e Color con gli appositi metodi.

    Posso farti un esempio davvero minimo (visto che l'esercizio devi farlo tu):

    codice:
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    public class TestFrame extends JFrame
    {
        private JLabel label;
        private Font font;
    
        public TestFrame ()
        {
            super ("Test Frame");
    
            setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
            setSize (700, 350);
    
            font = new Font ("Serif", Font.PLAIN, 20);
    
            label = new JLabel ("Prova");
            label.setFont (font);
            label.setHorizontalAlignment (JLabel.CENTER);
            add (label);
    
            addKeyListener (new KeyAdapter ()
            {
                public void keyPressed (KeyEvent e)
                {
                    int key = e.getKeyCode ();
    
                    int size = font.getSize ();
    
                    if (key == KeyEvent.VK_UP)
                    {
                        if (size < 100)
                            font = font.deriveFont ((float) size+5);
                    }
                    else if (key == KeyEvent.VK_DOWN)
                    {
                        if (size > 10)
                            font = font.deriveFont ((float) size-5);
                    }
    
                    label.setFont (font);
                }
            });
        }
    
        public static void main (String[] args)
        {
            SwingUtilities.invokeLater (new Runnable ()
            {
                public void run ()
                {
                    TestFrame f = new TestFrame ();
                    f.setVisible (true);
                }
            });
        }
    }
    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.