Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [JAVA] come collegare bottone con evento su un jpanel (panel e bottone stanno su classi differenti)

    Buongiorno a tutti, oggi dopo qualche studio su guide online sono ritornato a fare un gioco (avevo già chiesto come fare delle cose su quel gioco) ho un dilemma : ho creato un thread (livello1 ed è nella classe principale main) e ho un menu con dei bottoni, io vorrei che quando tu clicchi il bottone gioca puoi scegliere la modalità ( classica , arcade) ok, e quando premi classica ti viene una finestra con 10 pulsanti (ognuno sarà un livello) e ho anche un thread 2 che l'ho fatto in una classe a parte ok, ma ho un dilemma , per far aprire la pagina del thread 2 si deve cliccare il bottone del livello , ma io non so come inserire il bottone su un panel ma il bottone devo inserirlo non dalla classe del jpanel ma da un altra classe es. (ho una classe main dove c'è il jpanel vorrei inserire il bottone2 dalla classe Livello2, come faccio ?)

  2. #2
    Come già detto in precedenza le guide on line servono a chiarirsi qualche dubbio.
    Prendi un libro su Fondamenti di Java e STUDIA.
    Poi non capisco a cosa possa servire un Thread in una classe gui con bottoni.
    I thread si usano in applicazioni concorrenti...nelle gui serve a poco (se non per progressbar e via dicendo)
    I computer sono incredibilmente veloci, accurati e stupidi.
    Gli uomini sono incredibilmente lenti, inaccurati e intelligenti.
    Insieme sono una potenza che supera l'immaginazione.

    A.Einstein

  3. #3
    il thread in poche parole è il livello che ho fatto e so che non si possono fare 2 thread insieme vero ? e siccome voglio fare + livelli del gioco ho fatto una nuova classe dove fare il thread ma ora ho questo dubbio come prima : (ho una classe main dove c'è il jpanel vorrei inserire il bottone2 dalla classe Livello2, come faccio ?) per piacere mi aiuti

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Richisottini Visualizza il messaggio
    il thread in poche parole è il livello che ho fatto e so che non si possono fare 2 thread insieme vero ?
    Scusa, te lo dico gentilmente ma: che vuol dire? Un thread è un "flusso" di esecuzione. Nelle applicazioni grafiche Swing esiste già un thread specifico per la GUI che è il Event Dispatch Thread. Poi tu sei libero di creare quanti altri flussi di esecuzione ti servono ma in genere servono per compiere operazioni in "background": operazioni su file-system, su DB, su networking ecc... E in casi particolari per un "loop" di disegno in scenari più avanzati.

    Quote Originariamente inviata da Richisottini Visualizza il messaggio
    e siccome voglio fare + livelli del gioco ho fatto una nuova classe dove fare il thread
    Dico ancora che "livello di gioco" e "thread" (inteso come flusso di esecuzione) di per sé non hanno nulla a che fare direttamente. A meno che spieghi come si deve svolgere il gioco e cosa comporta.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5

    0k

    ok andbin ma quello del thread l'ho detto per intro , ma quello che mi interessa è se si può inserire un bottone in un panel (jpanel è nella classe main e il bottone in un'altra classe)

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Richisottini Visualizza il messaggio
    quello che mi interessa è se si può inserire un bottone in un panel (jpanel è nella classe main e il bottone in un'altra classe)
    Tecnicamente certo che si può arrivare a farlo (senza vedere il tuo codice comunque non saprei dire di più). Ma il punto, anzi i punti, sono altri: perché un pannello è in una classe e il pulsante in un'altra? E il pulsante è tenuto come? Come variabile di istanza? E chi deve "ascoltare" gli eventi del pulsante? E in generale come è il "design" delle tue classi?

    Specialmente in Swing, l'obiettivo dovrebbe essere quello di realizzare classi che raggruppano bene e in modo logico (sotto)parti della interfaccia grafica, componendole insieme possibilmente con l'uso dei layout manager e "inscatolando" componenti dentro contenitori, dentro altro ecc..
    E poi gestendo gli eventi possibilmente nel punto più vicino e "intimo" possibile a dove sono tenuti i componenti. A meno che si riesca ad intravedere un design generale che risulti riutilizzabile più volte nella applicazione o in applicazioni differenti.

    Tutto questo richiede un po' di esperienza e la conoscenza dei principi basilari della OOP e dei principali design pattern. Non è una cosa che è immediata o facile, ci vuole un po' .. lo so e lo capisco. Cerca di valutare meglio questi aspetti. Altrimenti te lo dico subito e di nuovo gentilmente: continuerai a fare domande di questo tipo e a non avanzare molto in Java/Swing.


    P.S. Magari prova a descrivere a parole come vuoi che sia e si comporti la interfaccia grafica. E si possono poi fare valutazioni ulteriori.
    Ultima modifica di andbin; 03-09-2015 a 00:17
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7

    okLivello2

    ok ti posto il codice, io ho messo il button in un altra classe per fare una cosa molto in ordine e vorrei solo sapere come mettere il button (classe: livello2) in un panel (classe: Gioco). come posso fare ?

    CLASSE MAIN

    codice:
    public Gioco()
      {
        caricaRisorse();
        iniziaGioco();
        inizializza();
        aggiungiListener();
        
        
      }
    
    
      private void inizializza()
      {
    
    //Questo è il Jpanel in cui dobbiamo mettere il button che si trova nel Livello2
    
    
        this.finestra.setName("Pioggia Fruit by Richisottini");
        this.finestra.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.finestra.setPreferredSize(new Dimension(900, 600));
        this.finestra.setResizable(false);
    
    
        JPanel contenitore = new JPanel()
        {
          protected void paintComponent(Graphics graphics)
          {
            super.paintComponent(graphics);
    
    
            graphics.drawImage(Gioco.this.sfondofinestra, 0, 0, 1500, 1320, this);
          }
        };
        this.Gioca = new JButton("")
        {
          protected void paintComponent(Graphics graphics)
          {
            super.paintComponent(graphics);
    
    
            graphics.drawImage(Gioco.this.bottonegioca, 0, 0, 200, (int) 107.5, this);
          }
        };
        this.Record = new JButton("")
        {
          protected void paintComponent(Graphics graphics)
          {
            super.paintComponent(graphics);
    
    
            graphics.drawImage(Gioco.this.bottonerecord, 0, 0, 200, (int) 107.5, this);
          }
        };
        this.Info = new JButton("")
        {
          protected void paintComponent(Graphics graphics)
          {
            super.paintComponent(graphics);
    
    
            graphics.drawImage(Gioco.this.bottoneinfo, 0, 0, 200, (int) 107.5, this);
          }
        };
        this.Quit = new JButton("")
        {
          protected void paintComponent(Graphics graphics)
          {
            super.paintComponent(graphics);
    
    
            graphics.drawImage(Gioco.this.bottonequit, 0, 0, (int) 109, (int) 109, this);
          }
        };
        
        
    
    
        SpringLayout layout = new SpringLayout();
        contenitore.setLayout(layout);
    
    
        contenitore.add(this.Gioca);
        contenitore.add(this.Record);
        contenitore.add(this.Info);
        contenitore.add(this.Quit);
        
        
        
        
    
    
        layout.putConstraint("West", this.Gioca, 350, "West", contenitore);
        layout.putConstraint("North", this.Gioca, 20, "North", contenitore);
        layout.putConstraint("East", this.Gioca, -350, "East", contenitore);
    
    
        layout.putConstraint("South", this.Gioca, -450, "North", this.Gioca);
    
    
        layout.putConstraint("West", this.Gioca, 350, "West", contenitore);
        layout.putConstraint("East", this.Gioca, -350, "East", contenitore);
    
    
        layout.putConstraint("South", this.Gioca, -450, "North", this.Gioca);
    
    
        layout.putConstraint("West", this.Gioca, 350, "West", contenitore);
        layout.putConstraint("East", this.Gioca, -350, "East", contenitore);
        layout.putConstraint("South", this.Gioca, -450, "South", contenitore);
        
        
        
    
    
        layout.putConstraint("West", this.Record, 680, "West", contenitore);
        layout.putConstraint("North", this.Record, 20, "North", contenitore);
        layout.putConstraint("East", this.Record, -20, "East", contenitore);
    
    
        layout.putConstraint("South", this.Record, -450, "North", this.Record);
    
    
        layout.putConstraint("West", this.Record, 680, "West", contenitore);
        layout.putConstraint("East", this.Record, -20, "East", contenitore);
    
    
        layout.putConstraint("South", this.Record, -450, "North", this.Record);
    
    
        layout.putConstraint("West", this.Record, 680, "West", contenitore);
        layout.putConstraint("East", this.Record, -20, "East", contenitore);
        layout.putConstraint("South", this.Record, -450, "South", contenitore);
        
        
        
        
        layout.putConstraint("West", this.Info, 20, "West", contenitore);
        layout.putConstraint("North", this.Info, 20, "North", contenitore);
        layout.putConstraint("East", this.Info, -680, "East", contenitore);
    
    
        layout.putConstraint("South", this.Info, -450, "North", this.Info);
    
    
        layout.putConstraint("West", this.Info, 20, "West", contenitore);
        layout.putConstraint("East", this.Info, -680, "East", contenitore);
    
    
        layout.putConstraint("South", this.Info, -450, "North", this.Info);
    
    
        layout.putConstraint("West", this.Info, 20, "West", contenitore);
        layout.putConstraint("East", this.Info, -680, "East", contenitore);
        layout.putConstraint("South", this.Info, -450, "South", contenitore);
        
        
        
    
    
        layout.putConstraint("West", this.Quit, 770, "West", contenitore);
        layout.putConstraint("North", this.Quit, 450, "North", contenitore);
        layout.putConstraint("East", this.Quit, -20, "East", contenitore);
    
    
        layout.putConstraint("South", this.Quit, -20, "North", this.Quit);
    
    
        layout.putConstraint("West", this.Quit, 770, "West", contenitore);
        layout.putConstraint("East", this.Quit, -20, "East", contenitore);
    
    
        layout.putConstraint("South", this.Quit, -20, "North", this.Quit);
    
    
        layout.putConstraint("West", this.Quit, 770, "West", contenitore);
        layout.putConstraint("East", this.Quit, -20, "East", contenitore);
        layout.putConstraint("South", this.Quit, -20, "South", contenitore);
        
        
    
    
        this.finestra.add(contenitore);
        this.finestra.pack();
        this.finestra.setVisible(true);
      }
    
    
      void aggiungiListener()
      {
        this.Record.addMouseListener(new MouseAdapter()
        {
          public void mouseClicked(MouseEvent e)
          {
          }
        });
        this.Info.addMouseListener(new MouseAdapter()
        {
          public void mouseClicked(MouseEvent e)
          {
            JPanel pannello = new JPanel()
                    
            {
              protected void paintComponent(Graphics graphics)
              {
                super.paintComponent(graphics);
    
    
                graphics.drawImage(Gioco.this.sfondoinfo, 0, 0, 750, 1050, this);
              }
            };
            Gioco.this.info.setDefaultCloseOperation(2);
            Gioco.this.info.add(pannello);
            Gioco.this.info.setSize(750, 1050);
            Gioco.this.info.setVisible(true);
          }
        });
        this.Quit.addMouseListener(new MouseAdapter()
        {
          public void mouseClicked(MouseEvent e)
          {
                System.exit(0);
             }
            });
          
             }
    
    
    
    
    
    
      public static void main(String[] args)
        throws FileNotFoundException, IOException
        {
        new Gioco();
    //.................................................. ............................................[/HTML]

    CLASSE LIVELLO2

    codice:
    public Livello2()
      {
        caricaRisorse();
        iniziaGioco();
        inizializza();
        aggiungiListener();
        
        
      }
    
    
      private void inizializza()
      {
        
      }
    
    
      void aggiungiListener()
      {
    //questo è il bottone che devo mettere nel panel nel class Gioco
          this.Gioca.addMouseListener(new MouseAdapter()
        {
          public void mouseClicked(MouseEvent e)
          {
            
            Livello2 gioco2 = new Livello2();
    
    
            Livello2.this.finestra.dispose();
            
    
    
            Dimension dimensione_finestra = new Dimension(1500, 1320);
            Livello2.this.finestra_gioco.setPreferredSize(dimensione_finestra);
            Livello2.this.finestra_gioco.setMaximumSize(dimensione_finestra);
    
    
            Livello2.this.finestra_gioco.pack();
            Livello2.this.finestra_gioco.setResizable(false);
            
         
            Livello2.this.finestra_gioco.setVisible(true);
    
    
            Livello2.this.finestra_gioco.add(gioco2);
    
    
            gioco2.addKeyListener(gioco2);
    
    
            Thread thread_gioco2 = new Thread(gioco2);
            thread_gioco2.start();
        }
        });
          }
    //...........................................................................
    COMUNQUE GRAZIE MILLE PER ALCUNE SPIEGAZIONI
    Ultima modifica di Richisottini; 03-09-2015 a 00:32

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Richisottini Visualizza il messaggio
    ok ti posto il codice, io ho messo il button in un altra classe per fare una cosa molto in ordine e vorrei solo sapere come mettere il button (classe: livello2) in un panel (classe: Gioco). come posso fare ?
    Mi spiace davvero dirtelo ma da quello che vedo ci sono troppe cose inappropriate, brutte e fumose.

    Perché devi disegnare una immagine sopra i pulsanti? Non sai che i pulsanti possono tranquillamente avere un Icon per visualizzare una icona/immagine? E oltretutto hai replicato 4 volte una anonymous inner class, senza quindi "intravedere" un design comune e riutilizzabile. Poi altre cose assurde tipo una costante double di cui fai il cast a int: (int) 107.5

    Troppe troppe anonymous inner class. Addirittura in Gioco una anonymous inner class per MouseAdapter nel cui mouseClicked c'è un'altra anonymous inner class per il pannello. Queste cose generalmente è bene non farle!

    Poi perché in Livello2 fai tanti Livello2.this.finestra_gioco.blabla? Se la anonymous inner class è in un metodo di istanza (ed è così) e finestra_gioco è un campo di istanza e non c'è uno "shadowing" del campo (e non è così) puoi benissimo usare solo finestra_gioco.blabla perché il campo è "visibile" anche dalla anonymous inner class.

    Non vorrei sembrare scortese, perché non lo sono ma: ti servono basi su Java e sulla programmazione ad oggetti.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    ok , ma quello che ti dico si può fare ? poi tutto quello cercherò di sistemarlo con calma, comunque l'(int) 107.5 seria perché dovevo mettere l'immagine a quella grandezza
    Ultima modifica di Richisottini; 03-09-2015 a 11:01

  10. #10
    allora come posso fare ?

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.