Torna indietro   Hardware Upgrade Forum > Software > Programmazione

iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile
iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile
C'è tanta sostanza nel nuovo smartphone della Mela dedicato ai creator digitali. Nuovo telaio in alluminio, sistema di raffreddamento vapor chamber e tre fotocamere da 48 megapixel: non è un semplice smartphone, ma uno studio di produzione digitale on-the-go
Intel Panther Lake: i processori per i notebook del 2026
Intel Panther Lake: i processori per i notebook del 2026
Panther Lake è il nome in codice della prossima generazione di processori Intel Core Ultra, che vedremo al debutto da inizio 2026 nei notebook e nei sistemi desktop più compatti. Nuovi core, nuove GPU e soprattutto una struttura a tile che vede per la prima volta l'utilizzo della tecnologia produttiva Intel 18A: tanta potenza in più, ma senza perdere in efficienza
Intel Xeon 6+: è tempo di Clearwater Forest
Intel Xeon 6+: è tempo di Clearwater Forest
Intel ha annunciato la prossima generazione di processori Xeon dotati di E-Core, quelli per la massima efficienza energetica e densità di elaborazione. Grazie al processo produttivo Intel 18A, i core passano a un massimo di 288 per ogni socket, con aumento della potenza di calcolo e dell'efficienza complessiva.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 16-05-2006, 18:49   #1
caralu
Member
 
L'Avatar di caralu
 
Iscritto dal: Sep 2004
Città: Sardegna
Messaggi: 98
[JAVA]Problema eventi finestra e bottoni

Ciao! Mi serve un'aiuto!!
Ho corretto tutto e adesso mi funziona QUASI perfettamente la gestione dei bottoni, a parte che ne dovrei creare altri due che implementano dei listeners che generano certi eventi (al click di uno qualsiasi di questi 2 bottoni si dovrebbe chiudere la finestra principale e se ne dovrebbe aprire un'altra della stessa dimensione, sullo stesso punto di quella principale. Chidendo poi quest'ultima finestra creata si dovrebbe riaprire la finestra principale).
Ho provato a implementare tutto ciò sfruttando un po di codice della finestra principale (il codice che ho postato sopra), ma non riesco a chiudere la principale e fare aprire la nuova. Potete darmi qualche consiglio?
caralu è offline   Rispondi citando il messaggio o parte di esso
Old 16-05-2006, 19:58   #2
franksisca
Senior Member
 
L'Avatar di franksisca
 
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
emh, il codice???
__________________
My gaming placement
franksisca è offline   Rispondi citando il messaggio o parte di esso
Old 16-05-2006, 20:28   #3
caralu
Member
 
L'Avatar di caralu
 
Iscritto dal: Sep 2004
Città: Sardegna
Messaggi: 98
Quote:
Originariamente inviato da franksisca
emh, il codice???
Scusa.....
Classe Della finestra principale:
Codice:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

public class GUI extends Window {
    private JRadioButton closeButton;
    private JButton start;
    private JButton configura;
    private JButton credit;
    private JButton help;
    private JLabel authors;

    /* Larghezza della finestra (della foto di sfondo)*/
    public static final int WIDTH  = 629;
    
    /* Altezza della finestra (della foto di sfondo)*/
    public static final int HEIGHT = 475;
    
    /* Frame associato alla finestra */
    protected static JFrame frameOwner = new JFrame("Carlo e Marco");
        
    /* Ascoltatore per i movimenti del mouse */
    private static MouseMotion mouseMotion;
    
    /* Verifica della mobilità della finestra */
    private static boolean moveable = true;

    /* Istanza di questa classe */
    public static GUI menù;
    
    /*Dimensioni icone pulsante menù*/
    private static final int ALTEZZA_PULSANTE = 35;
    private static final int LARGHEZZA_PULSANTE = 150;
    
    /*posizione icone pulsanti menù*/
    private int yPulsante = 160;
    private final int X_PULSANTE = 40;
    private final int DISTANZA_PULSANTE = 10;
    /*
     * Punto di accesso del programma, da qua avviamo l'interfaccia grafica.
     */
    public static void main(String argv[]) {
        GUI gui = new GUI();
    }

    /*
     * Costruttore Standard (contiene tutte le istruzioni per creare i componenti grafici).
     */
    public GUI() {
        
        super(frameOwner);
                
        //Diamo una dimensione alla nostra finestra e posizioniamola al centro dello schermo:
        //WIDTH ed HEIGHT sono due costanti che definiscono larghezza e altezza
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        setBounds((screenSize.width-WIDTH)/2,(screenSize.height-HEIGHT)/2,WIDTH,HEIGHT);
        
        ImageIcon icon = new ImageIcon("background.png"); //Carichiamo la nostra immagine di sfondo
        JLabel background = new JLabel(icon);
        background.setSize(background.getPreferredSize());
        
        /* Inseriamo la nostra immagine come se fosse uno sfondo; gli elementi aggiunti manm mano vengono collocati uno sopra l'altro.
           L'immagine è visualizzata tramite un semplice componente JLabel aggiunto poi al JLayeredPane, unico pannello che risiede nella
           window */
        JLayeredPane layer = new JLayeredPane();
        layer.setPreferredSize(background.getPreferredSize());
        layer.add(background, JLayeredPane.DEFAULT_LAYER);
        
        setLayout(new BorderLayout());
        add("Center", layer);
            
        JLabel title = new JLabel("PROVA A USCIRE DAL LABIRINTO!",new ImageIcon("icon.png"),SwingConstants.LEFT);
        title.setBounds(30,10,400,64);
        title.setFont(new Font(title.getFont().getName(),Font.BOLD,20));
        //Ogni altro elemento grafico deve essere aggiunto alla finestra non passando per il metodo add(), bensì per il  layer seguente:
        layer.add(title, JLayeredPane.PALETTE_LAYER);
        
        //Pulsante di chiusura: collocazione sul pannello e attribuzione del compito di chiusura della finestra.
        closeButton  = new JRadioButton(new ImageIcon("close.png"));
        closeButton.setBounds(570,18,40,37);
        closeButton.setFocusable(false);
        closeButton.setBorderPainted(true);
        closeButton.setOpaque(false);
 
        layer.add(closeButton, JLayeredPane.PALETTE_LAYER);
        
        start = new JButton(new ImageIcon("start.jpg"));
        start.setBounds(X_PULSANTE,yPulsante,LARGHEZZA_PULSANTE,ALTEZZA_PULSANTE);
        start.setFocusable(false);
        start.setBorderPainted(true);
        start.setOpaque(false);
        layer.add(start, JLayeredPane.PALETTE_LAYER);
        
        configura = new JButton(new ImageIcon("opzioni.jpg"));
        configura.setBounds(X_PULSANTE, (yPulsante += (DISTANZA_PULSANTE + ALTEZZA_PULSANTE)), LARGHEZZA_PULSANTE, ALTEZZA_PULSANTE);
        configura.setFocusable(false);
        configura.setBorderPainted(true);
        configura.setOpaque(false);
        layer.add(configura, JLayeredPane.PALETTE_LAYER);
        
        credit = new JButton(new ImageIcon("credits.jpg"));
        credit.setBounds(X_PULSANTE,(yPulsante += (DISTANZA_PULSANTE + ALTEZZA_PULSANTE)), LARGHEZZA_PULSANTE, ALTEZZA_PULSANTE);
        credit.setFocusable(false);
        credit.setBorderPainted(true);
        credit.setOpaque(false);
        layer.add(credit, JLayeredPane.PALETTE_LAYER);
        
        help = new JButton(new ImageIcon("help.jpg"));
        help.setBounds(X_PULSANTE,(yPulsante += (DISTANZA_PULSANTE + ALTEZZA_PULSANTE)), LARGHEZZA_PULSANTE, ALTEZZA_PULSANTE);
        help.setFocusable(false);
        help.setBorderPainted(true);
        help.setOpaque(false);
        layer.add(help, JLayeredPane.PALETTE_LAYER);
        
        //Aggiungiamo un'ascoltatore degli eventi per ogni bottone
        Gestore gestore = new Gestore(); //Crea un'istanza della classe interna Gestore per la gestione dell'uscita dal gioco
        closeButton.addActionListener(gestore);   
        start.addActionListener(gestore); 
        configura.addActionListener(gestore); 
        credit.addActionListener(gestore); 
        help.addActionListener(gestore); 
        
        authors = new JLabel("<HTML><BODY>\t gioco</BODY></HTML>");
        authors.setBounds(452,427,400,30);
        layer.add(authors, JLayeredPane.PALETTE_LAYER);
                
        mouseMotion = new MouseMotion();        
        addMouseMotionListener(mouseMotion);
        addMouseListener(new MouseAdapter() {
            public void mouseReleased(MouseEvent me) {
                if (!moveable) return;
                mouseMotion.clearPosition();
                }
            public void mousePressed(MouseEvent me)
                if (!moveable) return;              
        });
        
        setVisible(true);                        
    }
    
    
    /* 
     * Ascoltatore per rilevare i movimenti del mouse e consentire
     * lo spostamento esatto della finestra (gestisce il trascinamento col mouse).
     */
    public class MouseMotion implements MouseMotionListener {
        
        int oldx = -10;
        int oldy = -10;         
            
        public void mouseDragged(MouseEvent me) {
            
            if (!moveable) return;
            
            if ((oldx == -10) && (oldy == -10)) {
                oldx = me.getX();
                oldy = me.getY();
                return;
            }
            
            if (me.getID() == MouseEvent.MOUSE_RELEASED) {
                System.out.println("x: " + me.getX() + " y: " + me.getY());
            }
            
            setLocation(getLocation().x - (oldx - me.getX()), getLocation().y - (oldy - me.getY()));
            
        }
        
        public void mouseMoved(MouseEvent me) {}
        
        public void clearPosition() {
            oldx = -10;
            oldy = -10;
        } 
    }   
    
    /*Classe interna per la gestione dell'uscita dal gioco*/
    private class Gestore implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
            {   
            Object src = e.getSource();
                          
            if ( src.equals(closeButton) ) 
                {    
                 //n è il valore di ritorno del pulsante che viene premuto nella finestra di dialogo: 0 = "SI", 1 = "NO"
                 int n= JOptionPane.showConfirmDialog(null,"Sei sicuro di volere uscire dal gioco?", "EXIT", JOptionPane.YES_NO_OPTION);          
                 if(n==0)
                    System.exit(0);                         
                }
            else
             if( src.equals(start) )
                {
                frameOwner.setVisible(false);         
                Game inizio = new Game();
                }
                else
                    if( src.equals(configura) )
                    {
                        frameOwner.setVisible(false); 
                        Configure nuoveOpzioni = new Configure();
                    }
                    else
                        if( src.equals(credit) )
                        {
                            System.out.println("credit");
                        }
                        else
                            if( src.equals(help) )
                                {
                                    System.out.println("help");
                                }
    
            }
    }
}
Classe della finestra che mi dovrebbe aprire:
Codice:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

public class Configure extends GUI
{    
    private JButton closeButton;
    /* Frame associato alla finestra */
    protected static JFrame frameConfigure = new JFrame("Configure");
        
    /* Ascoltatore per i movimenti del mouse */
    private static MouseMotion mouseMotion;
    
    /* Verifica della mobilità della finestra */
    private static boolean moveable = true;
    
    /*Dimensioni icone pulsante menù*/
    private static final int ALTEZZA_PULSANTE = 35;
    private static final int LARGHEZZA_PULSANTE = 150;
    
    /*posizione icone pulsanti menù*/
    private int yPulsante = 160;
    private final int X_PULSANTE = 40;
    private final int DISTANZA_PULSANTE = 10;
    /*
     * Punto di accesso del programma, da qua avviamo l'interfaccia grafica.
     */
    public static void main(String argv[]) {
        Configure nuovaConfigurazione = new Configure();
    }

    /*
     * Costruttore Standard (contiene tutte le istruzioni per creare i componenti grafici).
     */
    public Configure() 
        {
        
        //super(frameConfigure);
                
        //Diamo una dimensione alla nostra finestra e posizioniamola al centro dello schermo:
        //WIDTH ed HEIGHT sono due costanti che definiscono larghezza e altezza
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        setBounds((screenSize.width-WIDTH)/2,(screenSize.height-HEIGHT)/2,WIDTH,HEIGHT);
        
        ImageIcon icon = new ImageIcon("settings.jpg"); //Carichiamo la nostra immagine di sfondo
        JLabel background = new JLabel(icon);
        background.setSize(background.getPreferredSize());
        
        /* Inseriamo la nostra immagine come se fosse uno sfondo; gli elementi aggiunti manm mano vengono collocati uno sopra l'altro.
           L'immagine è visualizzata tramite un semplice componente JLabel aggiunto poi al JLayeredPane, unico pannello che risiede nella
           window */
        JLayeredPane layer = new JLayeredPane();
        layer.setPreferredSize(background.getPreferredSize());
        layer.add(background, JLayeredPane.DEFAULT_LAYER);
        
        setLayout(new BorderLayout());
        add("Center", layer);
            
        JLabel title = new JLabel("CONFIGURAZIONE I COMANDI",new ImageIcon("icona_chiave.jpg"),SwingConstants.LEFT);
        title.setBounds(30,10,400,64);
        title.setFont(new Font(title.getFont().getName(),Font.BOLD,20));
        //Ogni altro elemento grafico deve essere aggiunto alla finestra non passando per il metodo add(), bensì per il  layer seguente:
        layer.add(title, JLayeredPane.PALETTE_LAYER);
        
        //Pulsante di chiusura: collocazione sul pannello e attribuzione del compito di chiusura della finestra.
        closeButton  = new JButton(new ImageIcon("close.png"));
        closeButton.setBounds(570,18,40,37);
        closeButton.setFocusable(false);
        closeButton.setBorderPainted(true);
        closeButton.setOpaque(false);
         
        layer.add(closeButton, JLayeredPane.PALETTE_LAYER);
                
        //Aggiungiamo un'ascoltatore degli eventi per ogni bottone
        Gestore gestore = new Gestore(); //Crea un'istanza della classe interna Gestore per la gestione dell'uscita dal gioco
        closeButton.addActionListener(gestore);   
                        
        mouseMotion = new MouseMotion();        
        addMouseMotionListener(mouseMotion);
        
        addMouseListener(new MouseAdapter() 
                                            {
                                                public void mouseReleased(MouseEvent me) 
                                                {
                                                    if (!moveable) return;
                                                    mouseMotion.clearPosition();
                                                    
                                                }
                                                public void mousePressed(MouseEvent me) 
                                                {
                                                    if (!moveable) return;
                                                    
                                                }
                                            });
        
        setVisible(true);

                        
    }
    
    
    /* 
     * Ascoltatore per rilevare i movimenti del mouse e consentire
     * lo spostamento esatto della finestra (gestisce il trascinamento col mouse).
     */
    public class MouseMotion implements MouseMotionListener 
        {
        
        int oldx = -10;
        int oldy = -10;         
            
        public void mouseDragged(MouseEvent me) {
            
            if (!moveable) return;
            
            if ((oldx == -10) && (oldy == -10)) 
                {
                oldx = me.getX();
                oldy = me.getY();
                return;
                }
            
            if (me.getID() == MouseEvent.MOUSE_RELEASED) 
                {
                System.out.println("x: " + me.getX() + " y: " + me.getY());
                }
            
            setLocation(getLocation().x - (oldx - me.getX()), getLocation().y - (oldy - me.getY()));
            
        }
        
        public void mouseMoved(MouseEvent me) {}
        
        public void clearPosition() 
            {
            oldx = -10;
            oldy = -10;
            } 
    }   
    
    /*Classe interna per la gestione dell'uscita dal gioco*/
    private class Gestore implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
            {   
            Object src = e.getSource();
                          
            if ( src.equals(closeButton) ) 
                {    
                 frameConfigure.setVisible(false);
                 GUI menùInizio = new GUI();
                 menùInizio.frameOwner.setVisible(true);
                }
    
            }
    }
}
caralu è offline   Rispondi citando il messaggio o parte di esso
Old 16-05-2006, 21:52   #4
franksisca
Senior Member
 
L'Avatar di franksisca
 
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
io ti consiglio smplicemente di provare a fare così, scusa se sarò poco chiarmo ma sto uscendo:

crea un metodo che apre la nuova finestra, e prima del metodo setti il frame a visible=false, e dopo la chiamata al metodo, che ritornerà solo quando la finestra sarà chiusa metti visible=true.

Prova, dovrebbe funzionare, altrimenti domani dò una occhiata "migliore".
__________________
My gaming placement
franksisca è offline   Rispondi citando il messaggio o parte di esso
Old 17-05-2006, 10:04   #5
caralu
Member
 
L'Avatar di caralu
 
Iscritto dal: Sep 2004
Città: Sardegna
Messaggi: 98
Quote:
Originariamente inviato da franksisca
io ti consiglio smplicemente di provare a fare così, scusa se sarò poco chiarmo ma sto uscendo:

crea un metodo che apre la nuova finestra, e prima del metodo setti il frame a visible=false, e dopo la chiamata al metodo, che ritornerà solo quando la finestra sarà chiusa metti visible=true.

Prova, dovrebbe funzionare, altrimenti domani dò una occhiata "migliore".
Grazie!
Ho provato a fare quello che mi hai consigliato, ma con il codice che ho postato mi apre un nuovo frame (diverso dalla finestra che voglio creare).
Il mio obiettivo è che compaia al momento del click (su un bottone della finestra principale) una finestra delle stesse dimensioni e sullo stesso posto di quella principale...Per fare ciò stavo utilizzando il codice della finestra principale, ma senza esito!
caralu è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile iPhone 17 Pro: più di uno smartphone. &Eg...
Intel Panther Lake: i processori per i notebook del 2026 Intel Panther Lake: i processori per i notebook ...
Intel Xeon 6+: è tempo di Clearwater Forest Intel Xeon 6+: è tempo di Clearwater Fore...
4K a 160Hz o Full HD a 320Hz? Titan Army P2712V, a un prezzo molto basso 4K a 160Hz o Full HD a 320Hz? Titan Army P2712V,...
Recensione Google Pixel Watch 4: basta sollevarlo e si ha Gemini sempre al polso Recensione Google Pixel Watch 4: basta sollevarl...
Roscosmos: static fire per i propulsori ...
Alcune partite NBA saranno trasmesse in ...
Intel Core 13000 e 14000 aumentano uffic...
Gemini sta per arrivare in Google Maps: ...
2 minuti per vedere le 27 offerte imperd...
Ray-Ban Meta Display: tecnologia sorpren...
Un mini PC a prezzo stracciato, non cerc...
Al via i coupon nascosti di ottobre: qua...
Ferrari Elettrica si aggiorna solo in of...
Doppio sconto sugli smartphone top Xiaom...
Samsung è sempre più prota...
ChatGPT ha pregiudizi politici? Ecco cos...
Un solo iPhone rubato ha portato alla sc...
Xiaomi 17 Ultra sta arrivando: ecco come...
Il Motorola Edge 70 non ha più se...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 18:59.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v