Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2016
    Messaggi
    2

    Problema sulle reali dimensioni di JFrame e JPanel.

    Salve a tutti, come appunto spiega il titolo di questa nuova discussione ho dei problemi nel capire come settare precisamente le dimensioni di un JFrame e ridimensionare in maniera opportuna i JPanel che vado ad inserire dentro.
    Aggiungo che come programmazione grafica su Java non conosco "nulla" o davvero poco.
    Passiamo al codice e successivamente dettaglio il mio problema :
    codice:
    import java.awt.*;
    import javax.swing.*;
    publicclass Tris1 extends JFrame {
    /**
         * Launch the application.
         */
        
    publicstaticvoid main(String[] args) {
            EventQueue.invokeLater(new Runnable() {
    publicvoid run() {
    try {
                        Tris1 frame = new Tris1();
    frame.setVisible(true);
                    } catch (Exception e) {
    e.printStackTrace();
                    }
                }
            });
        }
    /**
         * Create the frame.
         */
    public Tris1() {
            setLayout(null);
            getContentPane().setLayout(null);
            setSize(300, 400);
            setBackground(Color.white);        
            JPanel n = new JPanel();
    n.setLocation(0, 0);
    n.setSize(300,400);
    n.setBackground(Color.black);
            getContentPane().add(n);
        }
    }
    
    In poche parole, quando si apre il Frame, se osservo come esso è stato definito, ha una grandezze reale più piccola del JPanel, anche se io ho affermato che le size di entrambi siano (300, 400).
    Non capisco il perché di questa cosa???

    Ho impostato il Layout a null perché non mi serve un layout preciso, volevo progettare un applicazione statica e non dinamica per il momento.

    Sbaglio qualcosa o c'è qualcosa sul quale non presto attenzione ?
    Ultima modifica di Whowas; 28-05-2016 a 19:10

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    Padova
    Messaggi
    361
    Quote Originariamente inviata da Whowas Visualizza il messaggio
    In poche parole, quando si apre il Frame, se osservo come esso è stato definito, ha una grandezze reale più piccola del JPanel, anche se io ho affermato che le size di entrambi siano (300, 400).
    Non capisco il perché di questa cosa???
    Fare setSize sul frame non ti assicura in nessun modo che le dimensioni "interne" del frame siano quelle che hai stabilito, in teoria dovrebbero essere inclusi anche i "bordi" del frame (che fra l'altro variano tra i vari sistemi operativi), ma anche misurando tutto il frame che crea il tuo codice a me su Windows 10 esce un frame alto 390 pixel circa (bordo compreso).

    Quote Originariamente inviata da Whowas Visualizza il messaggio
    ho dei problemi nel capire come settare precisamente le dimensioni di un JFrame e ridimensionare in maniera opportuna i JPanel che vado ad inserire dentro.
    E' questo il punto principale del discorso: non dovresti farlo.

    Cioè l'approccio è sbagliato, non dovresti voler settare la dimensione del frame e fare in modo che i pannelli "ci stiano dentro", questo causerà sempre vari problemi.
    Dovresti seguire l'ordine inverso: impostare le dimensioni dei componenti interni, e lasciare che la dimensione dei contenitori sia impostata direttamente dall'applicazione, che provvederà a renderli grandi il giusto per poter contenere ciò che è dentro.

    Il JFrame, come molti altri componenti, ha un metodo chiamato pack() che serve appunto a "impacchettare" il frame, se lo richiami dopo aver aggiunto ogni componente il metodo provvederà a validare il frame e dimensionarlo correttamente.
    Questo è l'approccio che viene tipicamente seguito.

    Per quanto riguarda il pannello, anche qui potrebbe non servire volerne forzare la dimensione, anche se in molti casi ha senso.
    In ogni caso se lo vuoi fare penso sia preferibile utilizzare il metodo setPreferredSize(Dimension d) rispetto al setSize(int,int).

    Quote Originariamente inviata da Whowas Visualizza il messaggio
    Ho impostato il Layout a null perché non mi serve un layout preciso, volevo progettare un applicazione statica e non dinamica per il momento
    Ti sconsiglio caldamente di farlo, questo tipo di approccio è largamente superato, i LayoutManager ci sono e conviene imparare ad usarli, meglio iniziare da subito .
    Tra l'altro anche per le prime prove che farai ci sono layout manager davvero semplici da usare, e ti assicuro che se capisci come funzionano potrai continuare ad usarli per molto tempo e per applicazioni anche più complesse

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.