Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    480

    Problema dimensione JFrame di una GUI

    Ciao a tutti,
    ho costruito una applicazione in java tramite netbeans.
    Questo software consiste in un JFrame principale ni cui sono contenuti vari elementi (JTable, JButton, ...).
    Il problema nasce nel fatto che questa GUI la vorrei poter utilizzare su diversi schermi, e vorrei quindi dimensionare tutti i pannelli all'interno dei JFrame (quindi tutte le varie JLabel e i JButton) in funzione delle dimensioni "sfruttabili" dello schermo di quel preciso dispositivo.

    Cosa mi consigliate di fare? Come potrei riuscire a risalire alle dimensioni dello spazio del JFrame che veramente riesco ad utilizzre?

    Grazi a tutti

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da roquentin Visualizza il messaggio
    vorrei quindi dimensionare tutti i pannelli all'interno dei JFrame (quindi tutte le varie JLabel e i JButton) in funzione delle dimensioni "sfruttabili" dello schermo di quel preciso dispositivo.

    Cosa mi consigliate di fare?
    Per il layout dei componenti è stato usato il posizionamento "assoluto"? O uno o più layout manager? (e se sì, quale/i?)

    Per queste cose, cioè per rendere flessibile/adattabile il layout si usano i layout manager.
    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
    Jul 2014
    Messaggi
    480
    Ok, solo per un JPanel interno ho utilizzato BorderLayout. Tutti gli altri sono Free Design compreso il JFrame principale.
    Inoltre:
    codice:
    ....
    public PVE() throws Exception {
            initComponents();
            this.setLocationRelativeTo(null);
    ....
    ...
    Quindi il JFrame principale è centrato.

    Cosa posso fare ?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da roquentin Visualizza il messaggio
    Cosa posso fare ?
    Dovresti:
    a) comprendere bene i layout manager, perlomeno tutti quelli basilari. Dimentica SpringLayout/GroupLayout che sono tra quelli più complessi. Questi due vengono usati tipicamente dagli editor visuali di GUI ma sono parecchio difficili e "contorti" da usare a mano (basta che guardi un codice per la GUI generato da un IDE come es. NetBeans ...).

    b) scrivere tutto il codice per la creazione/composizione della interfaccia grafica "a mano" sfruttando i layout manager.

    c) sfruttare i principi della OOP (design pattern compresi). In Swing la principale "abilità" del programmatore sta solo nel saper "inscatolare" componenti dentro contenitori, dentro contenitori ecc.... separando bene le cose e sfruttando appunto la OOP. In tutto questo un editor visuale non solo non ti aiuta ma probabilmente ti mette pure i bastoni tra le ruote.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    480
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Dovresti:
    a) comprendere bene i layout manager, perlomeno tutti quelli basilari. Dimentica SpringLayout/GroupLayout che sono tra quelli più complessi. Questi due vengono usati tipicamente dagli editor visuali di GUI ma sono parecchio difficili e "contorti" da usare a mano (basta che guardi un codice per la GUI generato da un IDE come es. NetBeans ...).
    Vorrei che la GUI fosse centrata su qualsiasi dimensione di schermo di sistemi desktop.
    Non voglio che sia resizable ( e questo l'ho già impostato nel JFrame principale ).
    Voglio semplicemente che si adatti alla dimensione dello schermo di un qualsiasi sistema desktop su cui viene utilizzata.

    p.s. Ho letto di un metodo getScreenSize() ma non so come utilizzarlo (in particolare se considerarlo solo per il JFrame principale o per tutti i componenti)

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da roquentin Visualizza il messaggio
    Vorrei che la GUI fosse centrata su qualsiasi dimensione di schermo di sistemi desktop.
    Non voglio che sia resizable ( e questo l'ho già impostato nel JFrame principale ).
    Ok, avevo capito male io (le mie indicazioni comunque sono valide in generale). A te basta che la finestra sia "centrata" sullo schermo (i componenti contenuti non c'entrano nulla).

    Basta invocare sul frame

    setLocationRelativeTo(null)

    Che centra automaticamente la finestra. Questo va fatto dopo che le dimensioni fisiche del frame sono diventate note (generalmente dopo un setSize() o un pack() ).

    L'altra strada, con es. getScreenSize() è possibile ma il concetto di dimensione (e centro) dello schermo è più complicato di quello che pensi se si considerano i sistemi multi-monitor.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    480
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Ok, avevo capito male io (le mie indicazioni comunque sono valide in generale). A te basta che la finestra sia "centrata" sullo schermo (i componenti contenuti non c'entrano nulla).

    Basta invocare sul frame

    setLocationRelativeTo(null)

    Che centra automaticamente la finestra. Questo va fatto dopo che le dimensioni fisiche del frame sono diventate note (generalmente dopo un setSize() o un pack() ).

    L'altra strada, con es. getScreenSize() è possibile ma il concetto di dimensione (e centro) dello schermo è più complicato di quello che pensi se si considerano i sistemi multi-monitor.
    Allora, per il JFrame principale, ho già fatto:
    codice:
    public PVE() throws Exception {
            initComponents();
            this.setLocationRelativeTo(null);
    ...
    Ho provato il software sia su desktop PC che su notebook, i quali hanno dimensione di schermo differente ma entrambi con SO windows 7 e la GUI è centrata e proporzionata allo schermo.

    Ho fatto un'altra prova su un notebook con differente dimensione di schermo e con SO windows xp e la GUI va oltre le dimensioni dello schermo....

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da roquentin Visualizza il messaggio
    Ho fatto un'altra prova su un notebook con differente dimensione di schermo e con SO windows xp e la GUI va oltre le dimensioni dello schermo....
    La questione è che o stabilisci e richiedi dei requisiti minimi (es. risoluzione almeno 1024x768) oppure modifichi la tua interfaccia grafica in modo che sia ok su tutti gli schermi (in pratica renderla più piccola possibile ma un limite inferiore comunque ci deve essere) oppure ancora fai qualcosa di più "dinamico". Se c'è spazio magari un tuo componente che è "grande" lo metti di una certa dimensione mentre se c'è meno spazio lo rendi più piccolo.

    Non so darti altre indicazioni precise perché non conosco la tua applicazione.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    480
    Quote Originariamente inviata da andbin Visualizza il messaggio
    La questione è che o stabilisci e richiedi dei requisiti minimi (es. risoluzione almeno 1024x768) oppure modifichi la tua interfaccia grafica in modo che sia ok su tutti gli schermi (in pratica renderla più piccola possibile ma un limite inferiore comunque ci deve essere) oppure ancora fai qualcosa di più "dinamico". Se c'è spazio magari un tuo componente che è "grande" lo metti di una certa dimensione mentre se c'è meno spazio lo rendi più piccolo.

    Non so darti altre indicazioni precise perché non conosco la tua applicazione.
    Sto provando in questo modo:
    codice:
    public PVE() throws Exception {
            initComponents();
            this.setLocationRelativeTo(null);
            double percentualeLarghezza = 0.692;
            double percentualeAltezza = 0.74; 
            Dimension dimensioneSchermo = Toolkit.getDefaultToolkit().getScreenSize();
            this.setSize((int) (dimensioneSchermo.getWidth() * percentualeLarghezza), (int) (dimensioneSchermo.getHeight() * percentualeAltezza)); 
    ..
    Ma in questo modo: la dimensione di tutti gli altri componenti contenuti nel JFrame principale resta invariata. Quindi se considero una percentuale di altezza/larghezza troppo piccola va a "tagliarmi" fuori dei componenti (non si ridimensionano in proporzione) , se considero un percentuale troppo grande allora la dimensione del JFrame principale aumenta ma i componenti contenuti in essa restano nelle stesse posizioni e non si ridimensionano in proporzione
    Ultima modifica di roquentin; 22-04-2015 a 14:56

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da roquentin Visualizza il messaggio
    Ma in questo modo: la dimensione di tutti gli altri componenti contenuti nel JFrame principale resta invariata. Quindi se considero una percentuale di altezza/larghezza troppo piccola va a "tagliarmi" fuori dei componenti (non si ridimensionano in proporzione) , se considero un percentuale troppo grande allora la dimensione del JFrame principale aumenta ma i componenti contenuti in essa restano nelle stesse posizioni e non si ridimensionano in proporzione
    Eh ... ma è appunto dovuto al posizionamento assoluto. In questo caso infatti è tutto a tuo carico. Hai es. un JTable (più che JTable, è il JScrollPane che lo contiene!) che è un buon candidato a cui dare una altezza "dinamicamente" in base allo spazio disponibile? Bene, allora se hai componenti sotto il JScrollPane/JTable spetta a te spostarli!


    Quello che posso dirti (e ripeterti ... l'ho già detto prima): setLocationRelativeTo(null) va fatto DOPO aver causato il calcolo delle dimensioni fisiche.
    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.