Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Dimensioni finestra Swing

    Ciao a tutti,
    avrei un piccolo problema nella visualizzazione dei contenuti all'interno di una finestra creata con Swing (tra l'altro seguendo un vostro tutorial: http://www.html.it/articoli/swing-pe...ctor-jframe-1/). In poche parole, nonostante funzioni tutto a perfezione, quando avvio il programma la finestra risulta vuota e solo dopo averla leggermente ridimensionata con il mouse appaiono tutti i contenuti. Da cosa dipende?
    Grazie in anticipo

  2. #2
    prova con un repaint() alla fine del codice.

    Ciao.
    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
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Il codice di creazione dell'interfaccia estrailo in un metodo e chiamalo in invokeLater, senza mettere repaint e altre robe:

    codice:
    import ...
    
    public class SimpleFrame 
    {
    
        public static void main(String[] args)
        {
            SwingUtilities.invokeLater(new Runnable()
            {
                @Override
                public void run()
                {
                    createAndShowGui();
                }
            });
        }
    
        private static void createAndShowGui() 
        {
            JFrame jFrame = new JFrame("Empty window");
            jFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            jFrame.setSize(400, 400);
    
            ...
            ...
    
            jFrame.setVisible(true);
        }
    
    }
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  4. #4
    risolto!
    dal tuo codice ho intuito che in realtà il problema dipendeva dal fatto che avrei dovuto richiamare il metodo setVisible(true) solo alla fine del codice. Richiamandolo erroneamente all'inizio, invece, prima mi apriva la finestra vuota e solo dopo un suo ridimensionamento disegnava gli altri componenti dentro...

  5. #5
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da redluck
    dal tuo codice ho intuito che in realtà il problema dipendeva dal fatto che avrei dovuto richiamare il metodo setVisible(true) solo alla fine del codice.
    Nì. il setVisible(true) va sempre chiamato alla fine ma il nocciolo della mia risposta è l'utilizzo di invokeLater.
    Il problema non è il setVisible() e anche se hai "corretto" potresti avere comunque lo stesso problema.

    Come dice la javadoc di invokeLater: (invokeLater) causes doRun.run() to be executed asynchronously on the AWT event dispatching thread. This will happen after all pending AWT events have been processed. This method should be used when an application thread needs to update the GUI.

    Senza invokeLater l'interfaccia viene subito mandata a video ma magari la coda awt non è terminata e ti viene mostrata un'interfaccia "parziale". Il alcuni casi vedrai alcuni componenti non correttamente allineati o con dimensioni non corrette ecc (in particolare se i componenti da disegnare sono tanti). Usando invokeLater ti assicuri che l'interfaccia venga completamente pronta prima di essere mandata a video.
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  6. #6
    grazie per il consiglio.
    per maggior sicurezza percorrerò questa strada

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.