Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    271

    [java] posizionamento centrale finestra

    ho creato una finestra per l'about, che viene aperta quando viene cliccato l'apposito pulsante, solo che la finestra che viene lanciata sta in alto a sinistra e vorrei metterla al centro dello schermo, sapete dirmi come posso fare?

    il codice della finestra è:

    codice:
    package video.client;
    
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import oracle.jdeveloper.layout.XYConstraints;
    import oracle.jdeveloper.layout.XYLayout;
    
    public class InfoAboutPanel {
    
        private XYLayout xyLayout = new XYLayout();
        public static final int LARGHEZZA = 250;
        public static final int ALTEZZA = 210;
    
        public InfoAboutPanel() {
            JFrame window = new JFrame("About");
            window.setLayout( xyLayout );
            window.setBounds(0,0,LARGHEZZA,ALTEZZA);
            JLabel jLabel1 = new JLabel("Progetto sviluppato da:");
            JLabel jLabel2 = new JLabel("aaa");
            JLabel jLabel3 = new JLabel("bbb");
            JLabel jLabel4 = new JLabel("ccc");
            window.add(jLabel1, new XYConstraints(20, 20, -1, -1));
            window.add(jLabel2, new XYConstraints(20, 55, -1, -1));
            window.add(jLabel3, new XYConstraints(20, 75, -1, -1));
            window.add(jLabel4, new XYConstraints(20, 95, -1, -1));
            JButton jButton = new JButton("OK");
            jButton.addActionListener( new ActionListener() { 
                public void actionPerformed( ActionEvent ae ) { AboutExit_ActionPerformed( ae ); } } );
            window.add(jButton, new XYConstraints(95, 130, -1, -1));
            window.setVisible(true);
    
        }
        
        void AboutExit_ActionPerformed(ActionEvent e) {
                    System.exit(0);
        }
    
    }
    e lancio la finestra (dalla schermata principale) così:

    codice:
    InfoAboutPanel panelInfoAbout = new InfoAboutPanel();
    come faccio a centrarla?
    inoltre.. come sostituisco in AboutExit_ActionPerformed il comando System.exit(0) per evitare che si chiuda tutto, ma per far si che si chiuda solo la finestra dell'about?



    edit: non ho visto che c'è l'apposita sezione per il java.. qualche mod può spostare il mio msg? Scusatemi tanto.. a volte dormo a occhi aperti

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [java] posizionamento centrale finestra

    Originariamente inviato da dogo21sob
    ho creato una finestra per l'about, che viene aperta quando viene cliccato l'apposito pulsante, solo che la finestra che viene lanciata sta in alto a sinistra e vorrei metterla al centro dello schermo, sapete dirmi come posso fare?
    tuoFrame.setLocationRelativeTo(null);

    Nel tuo caso 'tuoFrame' è quella tua variabile 'window'.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    271
    perfetto! per il posizionamento ci siamo.. invece per l'altro problema? come faccio a far chiudere solo il frame dell'about quando clicco su ok? visto che com'è il codice chiude tutto il programma.. come lo posso modificare?

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    271
    ok ho risolto dichiarando window come variabile globale e usando window.dispose()

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da dogo21sob
    come faccio a far chiudere solo il frame dell'about quando clicco su ok?
    Ovviamente se fai System.exit(0) fai terminare la JVM!

    Imposta innanzitutto:

    tuoFrame.setDefaultCloseOperation(JFrame.DISPOSE_O N_CLOSE);

    Poi nel actionPerformed() invochi dispose() sul tuo frame. Devi avere il reference al frame visibile.
    La tua variabile 'window' è locale al costruttore. Non sarebbe visibile in AboutExit_ActionPerformed. Quindi innanzitutto togli questo metodo che non ti serve e poi nel "vero" actionPerformed() fai window.dispose().
    NOTA: il tuo listener è definito come anonymous class. Affinché lì dentro la variabile 'window' sia visibile, deve essere marcata 'final'. Quindi:

    final JFrame window = ....

    Altrimenti cambia "design".

    P.S. 1) Documentati sul setDefaultCloseOperation(), è abbastanza tipico e utile impostare il "close operation" di default.

    P.S. 2) In genere per le finestre di "about" si usano delle dialog (e "modali", oltretutto), non normali frame.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    271
    codice:
    package video.client;
    
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import oracle.jdeveloper.layout.XYConstraints;
    import oracle.jdeveloper.layout.XYLayout;
    
    public class HelpAboutPanel extends JFrame {
    
        private XYLayout xyLayout = new XYLayout();
        private String jver = System.getProperty("java.version");
        private JButton jButton;
        private JFrame window;
        public static final int LARGHEZZA = 250;
        public static final int ALTEZZA = 250;
    
        public HelpAboutPanel() {
            
            window = new JFrame("About");
            window.setLayout( xyLayout );
            window.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            window.setBounds(0,0,LARGHEZZA,ALTEZZA);
            JLabel jLabel1 = new JLabel("Progetto sviluppato da:");
            JLabel jLabel2 = new JLabel("aaa");
            JLabel jLabel3 = new JLabel("bbb");
            JLabel jLabel4 = new JLabel("ccc");
            JLabel jLabel5 = new JLabel("Java Version: " + jver);
            window.add(jLabel1, new XYConstraints(20, 20, -1, -1));
            window.add(jLabel2, new XYConstraints(20, 55, -1, -1));
            window.add(jLabel3, new XYConstraints(20, 75, -1, -1));
            window.add(jLabel4, new XYConstraints(20, 95, -1, -1));
            window.add(jLabel5, new XYConstraints(20, 135, -1, -1));
            jButton = new JButton("OK");
            jButton.addActionListener( new ActionListener() { 
               public void actionPerformed( ActionEvent ae ) { AboutExit_ActionPerformed( ae );      } } );
            window.add(jButton, new XYConstraints(95, 170, -1, -1));
            window.setLocationRelativeTo(null);
            window.setVisible(true);
    
        }
        
        void AboutExit_ActionPerformed(ActionEvent e) {
            if (e.getSource() == jButton) 
                window.dispose();
        }
    
    }
    se elimino il metodo AboutExit_ActionPerformed, cambio la dichiarazione di window, da private a final, e sostituisco questa riga:

    codice:
    jButton.addActionListener( new ActionListener() { 
               public void actionPerformed( ActionEvent ae ) { AboutExit_ActionPerformed( ae );      } } );
    con questa

    codice:
    jButton.addActionListener( new ActionListener() { 
               public void actionPerformed() { window.dispose;      } } );
    non funziona.. mi da i seguenti errori:
    Error(37,57): anonymous class should be declared abstract; it does not define method actionPerformed(java.awt.event.ActionEvent) of interface java.awt.event.ActionListener
    Error(38,44): not an expression statement

    e a parte questo.. volevo farlo con JDialog ma non ci sono riuscito, perciò ho optato per JFrame.. come dovrei modificare il codice di cui sopra per usare una dialog, invece di un frame?

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    271
    up!

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da dogo21sob
    non funziona.. mi da i seguenti errori:
    Error(37,57): anonymous class should be declared abstract; it does not define method actionPerformed(java.awt.event.ActionEvent) of interface java.awt.event.ActionListener
    Error(38,44): not an expression statement
    actionPerformed(java.awt.event.ActionEvent)

    E comunque dispose è un metodo, non una variabile.

    Originariamente inviato da dogo21sob
    e a parte questo.. volevo farlo con JDialog ma non ci sono riuscito, perciò ho optato per JFrame.. come dovrei modificare il codice di cui sopra per usare una dialog, invece di un frame?
    Usa JDialog invece di JFrame. E crea una dialog "modale" (il che significa che setVisible(true) non ritorna finché la dialog non viene chiusa). Vedi javadoc di JDialog.

    Poi comunque vedo che fai:

    public class HelpAboutPanel extends JFrame

    e nel costruttore istanzi un nuovo JFrame:

    window = new JFrame("About");

    O uno o l'altro ... cioè o usi HelpAboutPanel sapendo che è appunto già un JFrame oppure non estendi JFrame e ne crei uno "al volo" come hai fatto nel costruttore.

    Rivedi (molto) bene il tutto.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.