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

    problemi sulla compilazione di un gioco facile in Java2

    Come esercitazione nella programmazione Java2 sto cercando d'implementare un gioco tipo il famoso Snake, e precisamente ho impostato il lavoro su tre classi, una di test, una che crea il Jframe, e l'altra che mi crea il Jpanel e gestisce gli eventi mediante una sua classe annidata. Il problema l'ho avuto nel momento della compilazione proprio di quest'ultima classe, ed in particolar modo ho avuto il seguente messaggio di errore:

    C:\j2sdk1.4.1_01\bin>javac SketchPanel.java
    SketchPanel.java:128: SketchPanel.KeyHandler should be declared abstract; it doe
    s not define keyReleased(java.awt.event.KeyEvent) in SketchPanel.KeyHandler
    private class KeyHandler implements KeyListener{
    ^
    Note: SketchPanel.java uses or overrides a deprecated API.
    Note: Recompile with -deprecation for details.
    1 error

    Di seguito viene riportato il listato del programma:

    import java.awt.*;
    import java.awt.geom.*;
    import java.util.*;
    import java.awt.event.*;
    import javax.swing.*;

    public class SketchTest{

    public static void main(String[] args){
    SketchFrame frame = new SketchFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOS E); //permette di chiudere il frame
    frame.show(); //visualizza il frame
    }//main
    }//SketchTest

    ---------------------------------------------------------

    public class SketchFrame extends JFrame{

    /*** Costruttore ***/

    /**
    @requires richiede i package java.awt, java.awt.even e javax.swing
    @effects dopo aver acquisito le impostazioni dello schermo dal sistema operativo crea un frame il quale risulterà un quarto dell'intero schermo
    @return restituisce un frame pari ad 1/4 del video contenente una figura gestibile con itasti della tastiera
    */

    public SketchFrame(){
    //acquisisce le dimensioni dello schermo
    // La classe Toolkit iteragisce con il sistema operativo
    Toolkit kit = Toolkit.getDefaultToolkit();
    Dimension screenSize = kit.getScreenSize(); //restituisce la dimensione dello schermo come oggetto Dimension
    int screenHeight = screenSize.height;
    int screenWidth = screenSize.width;

    //centra il frame nello schermo
    setSize(screenWidth/2, screenHeight/2); //dimezza la larghezza ed altezza delle dimensioni del video precdentemente acquisite
    setLocation(screenWidth/4, screenHeight/4); //consente di riposizionare il frame

    //imposta l'icona ed il titolo del frame
    Image img = kit.getImage("icon.gif");
    setIconImage(img); //prende un oggetto img e lo usa come icona del frame
    setTitle("Giuseppe SPECCHIO - Progetto LI4"); //imposta il titolo del frame

    //aggiunge un pannello al frame
    SketchPanel panel = new SketchPanel();
    panel.setBackground(SystemColor.window); //imposta il colore di sfondo del frame sul colore predefinto nel sistema operativo
    Container contentPane = getContentPane(); //restituisce l'oggetto pannello del contenuto del JFrame
    contentPane.add(panel); //aggiunge il pannello al frame
    }//SketchFrame

    }//SketchFrame

    -----------------------------------------

    public class SketchPanel extends JPanel{

    /*** Variabili di Classe ***/

    //private Image image; //rappresenta l'immagine di sfondo
    private Point2D last; //rappresenta l'estremo più anziano della linea
    private ArrayList lines; //rappresenta l'insieme di punti che definiranno gli estremi le linee
    private static final int SMALL_INCREMENT = 1;
    private static final int LARGE_INCREMENT = 5;

    /*** Costruttore ***/
    /**
    @requires richiede i package java.awt, java.awt.event, java.awt.geom, java.util e javax.swing
    @effects dopo aver acquisito le impostazioni dello schermo dal sistema operativo crea un frame il quale risulterà un quarto dell'intero schermo
    @return restituisce un pannello con un'immagine da disegnare con la tastiera premendo le frecce od i tasti 'h', 'l', 'k', 'j'
    */

    public SketchPanel(){

    //acquisisce l'immagine di sfondo
    /* image = Toolkit.getDefaultToolkit().getImage("Background.g if");
    MediaTracker tracker = new MediaTracker(this);
    tracker.addImage(image, 0); //aggiunge image all'elenco d'immagini da caricare
    try{ tracker.waitForID(0);} //attende che siano caricate tutte le immagini con l'id specificato
    catch (InterruptedException exception) {}
    */
    last = new Point2D.Double(100,100); //il primo punto parte da posizione (100,100)
    lines = new ArrayList(); //memorizza l'insieme di punti che definiranno gli estremi delle linee
    KeyHandler listener = new KeyHandler(); //gestore venti da tatsiera
    addKeyListener(listener); //inserisce gli eventi nella lista eventi da tastiera
    }//SketchPanel

    public void paintComponent(Graphics g){
    super.paintComponent(g);
    /*
    //acquisisce le dimensioni dello schermo
    // La classe Toolkit iteragisce con il sistema operativo
    Toolkit kit = Toolkit.getDefaultToolkit();
    Dimension screenSize = kit.getScreenSize(); //restituisce la dimensione dello schermo come oggetto Dimension
    int screenHeight = screenSize.height;
    int screenWidth = screenSize.width;

    //disegna l'immagine
    g.drawImage(image, 0, 0, null); //per ottenere l'immagine al centro del frame????
    */
    Graphics2D g2 = (Graphics2D)g;

    //disegna tutte le linee
    for(int i = 0; i < lines.size(); i++)
    g2.draw((Line2D)lines.get(i));
    }//paintComponent

    /*
    @effects permette al pannello di aver il focus in input
    */
    public boolean isFocusTraversable(){
    return true;
    }//isFocusTraversable

    /*
    @effects Aggiunge un nuovo segmento di linea al disegno
    @param dx il movimento è nella direzione x
    @param dy il movimento è nella direzione y
    */
    public void add(int dx, int dy){
    //calcola il nuovo punto finale
    Point2D end = new Point2D.Double(last.getX() + dx, last.getY() + dy);

    //aggiunge un segmento di linea
    Line2D line = new Line2D.Double(last, end);
    lines.add(line);
    repaint();

    //ricorda nuovo punto finale
    last = end;
    }//add

    /* @effects quando si fa clic su un pulsante, si cambiano le impostazioni del sistema.
    Inoltre dato che la classe ColorAction non può accedere alle impostazioni dela pannello
    la s'imposta annidata, ecco il perchè qui della sua presenza.
    @param name di tipo String, il quale rappresenta il nome del pulsante
    @param plafName di tipo String, il quale rappresenta il nome della classe di ambientazione
    */
    /*
    void makeButton implements ActionListener{

    //aggiunge un pulsante al pannello

    JButton button = new JButton(name);
    add(button);

    //imposta l'azione del pulsante

    button.addActionListener(new ActionListener(){

    public void actionPerformed(ActionEvent event){
    //azione del pulsante: nuova ambientazione
    try{
    UIManager.setLookAndFeel(plafName); //cambia dinamicamente le impostazioni
    SwingUtilities.updateComponentTreeUI(PlafPanel.thi s); //aggiorna le impostazioni
    }catch(Exception e){
    e.printStackTrace();
    }//catch
    }//actionPerformed
    }

    }//makeButton
    */
    /*
    @effects Gestisce gli venti da tastiera
    */
    private class KeyHandler implements KeyListener{

    /*
    @effects gestisce gli eventi delle frecce
    */
    public void keyPressed(KeyEvent event){

    int keyCode = event.getKeyCode(); //restituisce il codice del tasto virtuale premuto

    //imposta la distanza
    int d;
    //se l'utente ha premuto il tasto MAIUSC usa l'incremento maggiore
    if(event.isShiftDown())
    d = LARGE_INCREMENT;
    else
    d = SMALL_INCREMENT;

    //aggiunge un segmento di linea
    if(keyCode == KeyEvent.VK_LEFT) //se il tasto premuto è la freccia sinistra
    add(-d, 0);
    else if (keyCode == KeyEvent.VK_RIGHT) //se il tasto premuto è la freccia destra
    add(d, 0);
    else if (keyCode == KeyEvent.VK_UP) // se il tasto premuto è freccia sù
    add(0, -d);
    else if (keyCode == KeyEvent.VK_DOWN) // se il tasto premuto è freccia giù
    add(0, d);
    }//keyPressed

    /*
    E' un metodo Adapter
    @effects sfrutta il metodo della supeclasse il quale gestisce l'evento rilascio del tasto
    */
    //public void keyRelased(KeyEvent event){}//keyrelased

    /*
    @effects gestisce gli eventi con i tasti
    */
    public void keyTyped(KeyEvent event){

    int keyChar = event.getKeyChar(); //restituisce il codice del carattere premuto

    //imposta la distanza
    int d;
    //se l'utente ha premuto il tasto MAIUSC usa l'incremento maggiore
    if(event.isShiftDown())
    d = LARGE_INCREMENT;
    else
    d = SMALL_INCREMENT;

    //aggiunge un segmento di linea
    if(keyChar == 'h')
    add(-d, 0);
    else if (keyChar == 'l') //se il tasto premuto è la freccia destra
    add(d, 0);
    else if (keyChar == 'k') // se il tasto premuto è freccia sù
    add(0, -d);
    else if (keyChar == 'j') // se il tasto premuto è freccia giù
    add(0, d);
    }//keyTyped

    }//KeyHandler

    }//SketchPanel
    Giuseppe SPECCHIO

  2. #2
    1)
    SketchPanel.java:128: SketchPanel.KeyHandler should be declared abstract; it doe
    s not define keyReleased(java.awt.event.KeyEvent) in SketchPanel.KeyHandler

    Nella classe KeyHandler devi aggiungere il metodo keyReleased(KeyEvent e){}

    Poi hai implemnetato qualche metodo che è stato deprecato nella nuova versione di java , però non so quale sia... dovrei controllarli
    Lang=Java
    Ambiente = Eclipse forever
    Ubuntu & Win XP Pro

  3. #3
    public boolean isFocusTraversable(){
    return true;
    }

    va sostituito con

    public boolean isFocusable(){
    return true;
    }

    Quando utilizzi un metodo controlla che non sia deprecato.

    Ciauz
    Lang=Java
    Ambiente = Eclipse forever
    Ubuntu & Win XP Pro

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.