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

    Perplessità su layout manager

    per imparare ad usare meglio i componente swing ho deciso di riscrivere a mano i miei tre frame.
    ho una perplessità però sui layout manager.
    io parecchie label, un jtabbedpane, vari bottoni e textfield, menu item.
    con netbeans posiziono tutto dove mi pare a me.
    è possibile riprodurre le stesse posizioni con i layout a disposizione??
    ho letto che ce ne sono diversi, ma nessuno mi sembra dia questa libertà di scelta.

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    il migliore resta gridbaglayout, richiede un po' di fatica per impararlo, ma appena lo sai maneggiare vedi che nel 90% dei tuoi casi risolve una marea di problemi (compresi quelli di resizing)

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

    Re: Perplessità su layout manager

    Originariamente inviato da fermat
    con netbeans posiziono tutto dove mi pare a me.
    è possibile riprodurre le stesse posizioni con i layout a disposizione??
    ho letto che ce ne sono diversi, ma nessuno mi sembra dia questa libertà di scelta.
    Esistono dei layout manager come il GroupLayout o il SpringLayout che però sono molto complessi. Con uno solo di questi due sarebbe possibile gestire l'intero insieme di componenti in una finestra, gestendo posizioni e (ri)dimensionamenti in modo completo.
    Ma lo ripeto, sono davvero complessi, c'è un "prezzo" da pagare per tutta la flessibilità che offrono.

    A meno quindi di usare i due citati, generalmente (e nel 99% dei casi) si può fare quasi tutto con i layout manager più semplici (BorderLayout, FlowLayout, GridLayout, ecc...). Il fatto che tu dici "nessuno mi sembra dia questa libertà di scelta" e dovuto ad una visione sbagliata del problema.

    Nemmeno GridBagLayout (che già comunque è molto flessibile) permette di fare davvero tutto (e comunque non banalmente per via dei constraint). Quando si lavora con i layout manager, specialmente quelli più semplici, la "abilità" principale consiste nel saper "inscatolare" componenti, dentro contenitori, eventualmente dentro altri contenitori, ecc... Magari sfruttando layout manager differenti nei vari contenitori.

    E questo tra l'altro può anche essere utile per incapsulare certe funzionalità al fine di nascondere magari un insieme di componenti o comportamenti o per rendere certe cose facilmente riutilizzabili. Il punto è sempre il solito: non tanto i layout manager ma saper strutturare le classi, incapsulare e separare le funzionalità, riutilizzare ciò che è possibile, ecc... Insomma: è questione di "programmazione ad oggetti".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    si group layaout è quello usato da netbeans e lo vedo che è parecchio complicato......

    cmq la tua spiegazione nn è proprio incoraggiante ma vedrò che riesco a fare.
    grazie!

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da fermat
    cmq la tua spiegazione nn è proprio incoraggiante ma vedrò che riesco a fare.
    Non mi sembra di aver detto qualcosa di particolarmente ostico o incomprensibile. Ho solo detto che come minimo è sufficiente inscatolare componenti dentro contenitori ecc....

    Pensa ad una interfaccia dove nella parte centrale (che occupa il più possibile) c'è un JScrollPane con un JTextArea e sotto una fila orizzontale di es. 2 pulsanti Load/Save. Il content pane di un JFrame che ha già un BorderLayout è sufficiente come base. In CENTER si mette il JScrollPane e in SOUTH ..... si mette un JPanel (appunto un altro contenitore!) con dentro i pulsanti e sfruttando un layout manager diverso, es. un FlowLayout o un BoxLayout orizzontale (o un GridLayout 1x2).

    E se per questo pannello+pulsanti è necessaria una logica un po' più complessa (es. gestione di un JFileChooser), allora puoi pensare di fare proprio una classe apposta per il pannello (che estende JPanel) invece di istanziare tutto "al volo" nella classe del frame.

    E se vuoi slegare il più possibile le due classi frame/pannello puoi pensare di farlo attraverso una apposita interfaccia che permette di definire i metodi per le notifiche. O ad un livello più alto, con un apposito listener.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Originariamente inviato da andbin
    Non mi sembra di aver detto qualcosa di particolarmente ostico o incomprensibile. Ho solo detto che come minimo è sufficiente inscatolare componenti dentro contenitori ecc....

    Pensa ad una interfaccia dove nella parte centrale (che occupa il più possibile) c'è un JScrollPane con un JTextArea e sotto una fila orizzontale di es. 2 pulsanti Load/Save. Il content pane di un JFrame che ha già un BorderLayout è sufficiente come base. In CENTER si mette il JScrollPane e in SOUTH ..... si mette un JPanel (appunto un altro contenitore!) con dentro i pulsanti e sfruttando un layout manager diverso, es. un FlowLayout o un BoxLayout orizzontale (o un GridLayout 1x2).

    E se per questo pannello+pulsanti è necessaria una logica un po' più complessa (es. gestione di un JFileChooser), allora puoi pensare di fare proprio una classe apposta per il pannello (che estende JPanel) invece di istanziare tutto "al volo" nella classe del frame.

    E se vuoi slegare il più possibile le due classi frame/pannello puoi pensare di farlo attraverso una apposita interfaccia che permette di definire i metodi per le notifiche. O ad un livello più alto, con un apposito listener.
    no no nulla di insormontabile.
    anche se sicuramente per te è molto più facile che per me.
    a livello teorico ci sono, è poi sul pratico che mi inceppo un pò.....

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    e ma sul pratico viene fuori esperienza...cmq aiuta parecchio visualizzare su carta come deve essere il frame che vuoi costruire, POI inizialo a costruire.
    In questo modo, noti i comportamenti dei vari layout, ti viene meglio scegliere quello più adatto.
    Per quanto riguarda il raggruppamento in pannelli, l'esperienza ti aiuta a capire cosa è meglio e cosa non lo è. Di solito si raggruppano componenti che si assomiglieranno per logica: mi spiego, se hai un form in cui metti label + textfield che indicano varie proprietà degli user, è chiaro che un pannello conterrà tutte le label, uno tutti i text e li metti a fianco in un altro pannello che copre l'area user details. Avrai dei bottoni (In un altro pannello) che fanno le funzionalità, se sono dirette all'user le metti nel pannello user details, altrimenti le posizioni da un'altra parte.
    Altri ad esempio scelgono un pannello per ogni coppia label/textfield e uno che li contiene tutti, ma nel primo caso, imposti meglio la dimensione e gli allineamenti (considera che scegli al dimensione della label più grande e fai partire i textfield a fianco a questa, sono comunque tutti allineati e visivamente è più gradevole da vedere).
    se mi serve visualizzare tabella + due pulsanti sicuramente avrò due pannelli (minimo), uno per la tabella (con borderlayout) e uno per i pulsanti (con layout a piacimento).
    Come vedi raggruppo in pannelli componenti simili per logica (dove logica intendo quella applicativa, cosa rappresentano per chi vede la GUI).
    Ricorda di impostare il layout anche per il frame principale...
    Anche qui il consiglio di andbin è corretto (slega il più possibile), ma rischi di incartarti in passaggi che ora non capisci a pieno.
    Prova a visualizzare tutto su carta e vedi che capisci meglio come raggruppare

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.