Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    420

    [JAVA] pulsanti fantasma

    SAlve a tutti, qualcuno mi saprebbe aiutare?
    Mi è successa una cosa strana
    Ho scritto un programma dove dovrebbero comparire dei pulsanti ma questi appaiono solo se ci passi col mouse cliccandoli. Se inserisco un immagine addiritura i pulsanti non appaiono per nulla

    vi posto il codice oscuro composto da tre classi:

    n.b. strumento è una gif che non ho potuto allegare qua dentro

    codice:
    import java.awt.*;
    import javax.swing.*;
    import java.io.*;
    
    public class PannelloA extends JPanel 
    {
        private Image strumento;
    
        public PannelloA()
        {
            super(); 
            setBackground(Color.white);
        }
        
        public void paint(Graphics g)
        {
            long punteggio = 99999999; 
            int livello = 999;
            int vita;
            String comm  = "nome del c";
            
            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);
                
            //strumento = Toolkit.getDefaultToolkit().getImage("strumento.gif");
            //g2.drawImage (strumento,300,200,this);
                
            
            
    
        }
    }


    codice:
    public class Main
    {
        public static void main(String [] argrs)
        {   
        JFrame frame = new FrameMio();
        frame.setVisible(true);     
        }
    }

    codice:
    public class FrameMio extends JFrame 
    { 
        
        public PannelloA pannelloA2;
        public PannelloB pannelloA3;
        public JRadioButton laser, cannon, atomic; 
        private ButtonGroup topic;
        private JPanel provalo,domain;
        
        public FrameMio()
        { 
            setTitle("Scatenopoli");
            setSize(1024, 768);
            setLocation(0,0);
            setDefaultCloseOperation(EXIT_ON_CLOSE);
                
            Container contentPane = getContentPane();
            pannelloA2 = new PannelloA();
            laser = new JRadioButton ("Laser", true);
            cannon = new JRadioButton ("Cannone", false);
            atomic = new JRadioButton ("Bomba atomica", false);
    
            topic = new ButtonGroup();
            topic.add (laser);
            topic.add (cannon);
            topic.add (atomic);
            domain = new JPanel();
            
            domain.add (laser);
            domain.add (cannon);
            domain.add (atomic);
            provalo = new JPanel();
              
            provalo.add (domain);
            pannelloA2.setLayout (new BorderLayout()); 
            pannelloA2.add (provalo, BorderLayout.SOUTH);
            
            
            
            contentPane.add(pannelloA2);
            //pannelloA3 = new PannelloB();
             
        }
    }
    codice:
    public class PannelloB extends JPanel 
    {
    
        public JRadioButton laser, cannon, atomic; 
        private ButtonGroup topic;
        private JPanel provalo,domain;
        
        
               
        public PannelloB()
        {
            
            laser = new JRadioButton ("Laser", true);
            cannon = new JRadioButton ("Cannone", false);
            atomic = new JRadioButton ("Bomba atomica", false);
    
            topic = new ButtonGroup();
            topic.add (laser);
            topic.add (cannon);
            topic.add (atomic);
                
                
               
            domain = new JPanel();
            domain.setLayout (new BoxLayout (domain, BoxLayout.Y_AXIS));
            domain.add (laser);
            domain.add (cannon);
            domain.add (atomic);
              
            provalo = new JPanel();
            provalo.setLayout (new BorderLayout());
                
            provalo.add (domain, BorderLayout.SOUTH);
            //setContentPane (provalo);
    
        }
    }
    the sALIEN

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Sabgliato il post...
    "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
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Ho visto il codice, ho visto quello che fa ed il mio consiglio è di rivedere un po' tutto.
    Evita di ridefinire il metodo paint() quando puoi ottenere gli stessi effetti utilizzando dei JPanel separati.

    Il problema è che quando viene aggiunto un componente (nel tuo caso il pannello contenente i tre pulsanti), il contenitore richiama il metodo doLayout() (anche in maniera esplicita) e questo forza una chiamata al metodo paint() il quale sovrascrive tutto con il colore rosso.

    Cerca di utilizzare il metodo setBackground() per impostare i colori di sfondo degli elementi, invece di ridefinire il metodo paint() per "disegnare". Vedrai che ti troverai sicuramente meglio e farai minori sforzi.


    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

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    420
    OK, cercherò di fare quel che dici!
    Grazie 1000 x il consiglio
    the sALIEN

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    420
    ciao, stavo provando a far quel che dici ma mi sono un pò incasinato
    In generale comunque, è possibile fare coesistere pulsanti e oggetti di tipo Graphics nello stesso jpanel?
    the sALIEN

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Originariamente inviato da thesalien
    ciao, stavo provando a far quel che dici ma mi sono un pò incasinato
    In generale comunque, è possibile fare coesistere pulsanti e oggetti di tipo Graphics nello stesso jpanel?
    Direi di sì, ma la cosa è complessa: il metodo paint(), infatti, serve a disegnare il componente che lo implementa. Se questo componente contiene altri oggetti il metodo potrebbe andarci a disegnare sopra.
    Io, per quanto possibile, eviterei l'override di tale metodo e l'utilizzo dell'oggetto Graphics.


    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

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.