Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    420

    [java] PAINT E REPAINT senza applet?

    E' possibile usare i metodi paint e repaint senza usare applet?
    io vorrei creare un videogioco ma con jframe, jpanel ecc, non un applet. Sapete se questi metodi ci sono lo stesso?
    O che metodi è meglio usare x creare animazioni?
    the sALIEN

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,303
    Il metodo paint() ed il metodo repaint() sono comuni a tutti i Components. Applet è un Components e per questo è possibile utilizzarlo.

    JPanel, JFrame, ecc sono tutti discendenti di Component, per cui è possibile ridefinire il metodo paint() come hai sempre fatto nelle Applet.

    Attenzione, però: JFrame, JPanel, ecc, sono classi di Swing, per le quali sarebbe più opportuno ridefinire il metodo paintComponent() che ha la stessa firma di paint().


    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
    Jan 2005
    Messaggi
    420
    grazie 1000 x avermi risposto

    con "stessa firma" cosa intendi?
    the sALIEN

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    420
    p.s. e x l'init, esiste?
    the sALIEN

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,303
    Originariamente inviato da thesalien
    grazie 1000 x avermi risposto

    con "stessa firma" cosa intendi?
    La firma di un metodo è la sua dichiarazione: ovvero il tipo di dato che restituisce, il suo nome e la lista dei parametri che prende. In questo caso:
    codice:
    public void paint(Graphics g)
    Originariamente inviato da thesalien
    p.s. e x l'init, esiste?
    Quello dovrebbe essere un metodo proprio delle Applet. Nelle applicazioni, quel ruolo viene svolto dal costruttore delle classi.


    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

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    420
    sei stato chiarissimo

    Ma ascolta, se io devo creare un videogioco. Come mi conviene partire?
    io stavo pensando cosi:
    Mi creo una classe che estenda un jframe ed altre classi che estendano dei jpanel. Ad esempio, un jpanel è la presentazione del gioco, un altro è il menu e un altro ancora è il gioco.

    Non capisco però in questo modo quale jpanel debba mettere nel jframe e come si faccia a mettere nel jframe un altro jpanel con un metodo interno ad un altro jpanel. Non so se mi hai capito, io sto provando ma in pratica mi da un errore e mi dice che il contesto è statico.

    Si può fare in modo diverso da come sto facendo?
    Se sbaglio l'impostazione iniziale sarà una catastrofe
    cosa mi suggeriresto di fare?
    the sALIEN

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,303
    Sicuramente io farei in modo diverso, dato che Swing mette a disposizione degli oggetti più avanzati (vedi JMenu, JMenuItem, JMenuBar, ecc...).
    Comunque, l'errore che ti dà, da quel che ho capito (contesto statico) si riferisce ad un problema col tuo codice: stai facendo riferimento ad oggetti non statici da un contesto statico (esempio, il main).

    Quando ti trovi in un contesto statico (sempre il main, ad esempio, o comunque qualsiasi metodo dichiarato static) non puoi fare riferimento a oggetti non statici (ovvero che non sono stati dichiarati all'interno di quel metodo o comunque che non sono dichiarati static).

    Sempre andando ad intuito, immagino che il problema si proponga quando tenti di aggiungere pannelli o elementi grafici.
    Queste operazioni, solitamente, si fanno all'interno del costruttore della classe (la Finestra, ad esempio).

    Comunque, prova a postare un po' di codice, così vediamo quali sono i problemi che incontri e magari possiamo darti anche qualche dritta su come impostare più agevolmente il codice.


    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

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    420
    ok, grazie 1000, ora provo un pò a ragionarci su quel che mi hai detto. Se ho qualche problema posto un pò di codice
    grazie x la disponibilità
    the sALIEN

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    420
    Secondo me è sbagliata proprio l'impostazione..
    Se provi a compilare questo codice di da subito dov'è l'errore, mi dice proprio quello di cui tu stavi parlando


    codice:
    import java.awt.*;
    import javax.swing.*;
    import java.io.*;
    
    
    public class FrameMio extends JFrame 
    { 
        
        public Pannello_intro pannello22;
        public PannelloA pannelloA2;
        public PannelloB pannelloA3;
        public JRadioButton laser, cannon, atomic; 
        private ButtonGroup topic;
        private JPanel provalo,domain;
        public static boolean inizia = false;
        
        
        
        public FrameMio()
        { 
            setTitle("Scatenopoli");
            setSize(1024, 768);
            setLocation(0,0);
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            
            
            
            Container contentPane = getContentPane();
            pannello22 = new Pannello_intro();
                
            
            pannelloA2 = new PannelloA();
              pannello22.setVisible(true);
              pannelloA2.setVisible(false);
              
                contentPane.add(pannello22);
                contentPane.add(pannelloA2);
              
              
        }
    }
    codice:
    import java.awt.*;
    import javax.swing.*;
    import java.io.*;
    
    public class PannelloA extends JPanel 
    {
        private Image strumento,devil,stop,fulmini,fulmini1,fulmini2,astronave,astronave1;
    
        public PannelloA()
        {
            super(); 
            setBackground(Color.white);
        }
        
        public void paint(Graphics g)
        {
            long punteggio = 99999999; 
            int livello = 999;
            int vita;
            String comm  = "ciao";
            
            super.paintComponent(g);
            Graphics2D g2=(Graphics2D)g;
            
            // disegno linee contorno
            g2.setColor(Color.gray);
            g2.fillRect(0,500,1024,10);
            g2.fillRect(75,0,870,10);
            g2.fillRect(75,0,10,500);
            g2.fillRect(945,0,10,500);
            
            // disegno dello shermo
            g2.setColor(Color.blue);
            g2.fillRect(85,10,860,490);
            
            g2.setColor(Color.yellow);
            g2.fillRect(0,510,250,30);
            g2.setColor(Color.black);
            g2.drawRect(0,510,250,30);
            g2.setColor(Color.red);
            g2.setFont( new Font( "Arial", Font.BOLD,20));
            g2.drawString("  PUNTEGGIO " + punteggio ,0,530);
        
            g2.setColor(Color.yellow);
            g2.fillRect(774,510,250,30);
            g2.setColor(Color.black);
            g2.drawRect(774,510,250,30);
            g2.setColor(Color.red);
            g2.setFont( new Font( "Arial", Font.BOLD,20));
            g2.drawString("    LIVELLO     " + livello ,790,530);
            
            g2.setColor(Color.green);
            g2.fillRect(252,510,521,30);
            g2.setColor(Color.black);
            g2.drawRect(252,510,521,30);
            g2.setColor(Color.blue);
            g2.setFont( new Font( "Arial", Font.BOLD,20));
            g2.drawString("    COMMANDANTE     " + comm ,290,530);
            
            g2.setColor(Color.cyan);
            g2.fillRect(0,542,511,60);
            g2.setColor(Color.black);
            g2.drawRect(0,542,511,60);
            g2.setColor(Color.orange);
            g2.setFont( new Font( "Arial", Font.BOLD,20));
            g2.drawString("  VITA     ",30,580);
            g2.setColor(Color.black);
            g2.drawRect(100,552,400,40);
            for (int i = 104; i < 500; i+=4)
                g2.drawLine(i,552,i,592);
                
            g2.setColor(Color.cyan);
            g2.fillRect(513,542,511,60);
            g2.setColor(Color.black);
            g2.drawRect(513,542,511,60);
            g2.setColor(Color.orange);
            g2.setFont( new Font( "Arial", Font.BOLD,20));
            g2.drawString("NEMICO     ",520,580);
            g2.setColor(Color.black);
            g2.drawRect(613,552,400,40);
            for (int i = 617; i < 1017; i+=4)
                g2.drawLine(i,552,i,592);
                
            g2.setColor(Color.red);
            g2.fillRect(377,604,270,160);
            g2.setColor(Color.black);
            g2.drawRect(377,604,270,160);
            g2.setColor(Color.white);
            g2.setFont( new Font( "Arial", Font.BOLD,15));
            g2.drawString("        MUNIZIONI RESTANTI  ",400,623);
            g2.setColor(Color.green);
            g2.fillRect(405,635,180,30);
            g2.setColor(Color.black);
            g2.drawRect(405,635,200,30);
            for (int i = 415; i < 605; i+=10)
                g2.drawLine(i,635,i,665);
                
            
            fulmini1 = Toolkit.getDefaultToolkit().getImage("fulmini016.gif");
            g2.drawImage (fulmini1,200,100,this);
            g2.drawImage (fulmini1,300,250,this);
            fulmini = Toolkit.getDefaultToolkit().getImage("fulmini009.gif");
            g2.drawImage (fulmini,400,100,this);
            astronave = Toolkit.getDefaultToolkit().getImage("alieni060.gif");
            g2.drawImage (astronave,400,200,this);
            astronave1 = Toolkit.getDefaultToolkit().getImage("alieni150.gif");
            g2.drawImage (astronave1,600,200,this);
    
        }
    }


    codice:
    import java.awt.*;
    import javax.swing.*;
    import java.io.*;
    
    import java.awt.*;
    import java.awt.event.*;
    import java.util.*;
    import javax.swing.Timer;
    
    
    public class Pannello_intro extends JPanel 
    {
        private Image strumento,devil,stop,fulmini,fulmini1,fulmini2,astronave,astronave1;
    
        public Pannello_intro()
        {
            super(); 
            setBackground(Color.blue);
            addMouseListener (new IntroMouseListener());
            
        }
        
        public void paint(Graphics g)
        {
            long punteggio = 99999999; 
            int livello = 999;
            int vita;
            String comm  = "ooo";
            
            super.paintComponent(g);
            Graphics2D g2=(Graphics2D)g;
            
            g2.setColor(Color.white);
            g2.setFont( new Font( "Arial", Font.BOLD,50));
            g2.drawString("  ciao a tutti " ,100,100);
            
            g2.setColor(Color.white);
            g2.setFont( new Font( "Arial", Font.BOLD,15));
            g2.drawString("  ciao  " ,300,600);
            g2.drawString("  prova 1 2 3" ,300,620);
            
            g2.setColor(Color.cyan);
            g2.fillRect(400,650,200,70);
            g2.setColor(Color.black);
            g2.drawRect(400,650,200,70);
            
            g2.setColor(Color.red);
            g2.setFont( new Font( "scritte", Font.ITALIC,20));
            g2.drawString(" CREDITS " ,450,695);
            
            for (int i =180; i <= 340; i += 80)
            {
                g2.setColor(Color.cyan);
                g2.fillRect(10,i,200,70);
                g2.setColor(Color.black);
                g2.drawRect(10,i,200,70);
            }
            
            for (int i =180; i <= 340; i += 80)
            {
                g2.setColor(Color.yellow);
                g2.fillRect(800,i,200,70);
                g2.setColor(Color.black);
                g2.drawRect(800,i,200,70);
            }
            
            g2.setColor(Color.red);
            g2.setFont( new Font( "scritte", Font.ITALIC,20));
            g2.drawString(" NUOVA PARTITA " ,25,225);
            g2.drawString(" CARICA PARTITA " ,20,305);
            g2.drawString(" TOP TEN " ,50,385);
            
            g2.setColor(Color.black);
            g2.drawString(" OPZIONI " ,850,225);
            g2.drawString(" CONTROLLI " ,840,305);
            g2.drawString(" ESCI " ,860,385);
            
            for (int i = 300, j = 400; i <= 340; i += 10, j -= 20)
            {
                g2.setColor(Color.pink);
                g2.fillRect(i,i+140,j,j-320);
                g2.setColor(Color.cyan);
                g2.fillRect(i+5,i+145,j-10,j-330);
            }
            
            g2.setColor(Color.black);
            g2.drawRect(300,440,400,80);
            
            
                
            
           // Disegno fulmini e l'atronave
            astronave = Toolkit.getDefaultToolkit().getImage("fulmini009.gif");
            g2.drawImage (astronave,800,500,this); 
            g2.drawImage (fulmini,100,500,this);
            astronave1 = Toolkit.getDefaultToolkit().getImage("alieni150.gif");
            g2.drawImage (astronave1,450,300,this);
        }
        
        private class IntroMouseListener implements MouseListener
        {
            /**
             * Metodo che si occupa di gestire gli eventi generati dal
             * click del mouse
             * 
             * @param  event l'evento generato dal click del mouse
             */
            public void mouseClicked (MouseEvent event)
            {
                // bandiera che verifica se il click è dentro qualche forma
                boolean flag = true;
                Point clickPoint;
                
                // trasforma l'arrayList in array per farne la scasione
                clickPoint = event.getPoint();
                
                flag = true;
                // controlla se il click del mouse è denro una forma, nel qual caso 
                // elimina la forma dall'ArrayList e aggiunge punti al contatore
                
                
                if ( (clickPoint.x >= 10 && clickPoint.x < 210) 
                    && (clickPoint.y >= 180 && clickPoint.y < 250))
                {
                                
                     FrameMio.inizia = true;  
    
    //qui c'è l'errore
                     FrameMio.pannelloA2.setVisible(false);
                }
                
                
            }
            
           
            
            // metodi non implementati per i metodi non utilizzati
            public void mouseEntered (MouseEvent event){}
            public void mouseExited (MouseEvent event){}
            public void mousePressed (MouseEvent event){}
            public void mouseReleased (MouseEvent event){}
        }
        
    
    }

    codice:
    import java.awt.*;
    import javax.swing.*;
    import java.io.*;
    
    public class Main
    {
        public static void main(String [] argrs)
        { 
            JFrame frame = new FrameMio();
            frame.setVisible(true);    
            //JMenuBar menubar = new JMenuBar();
            //frame.setMenubar(menubar);
        }
    }
    the sALIEN

  10. #10
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    420
    non sono ancora riuscito a risolvere questo problema
    qualcuno mi può dare qualche suggerimento?
    the sALIEN

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 © 2024 vBulletin Solutions, Inc. All rights reserved.