Pagina 3 di 4 primaprima 1 2 3 4 ultimoultimo
Visualizzazione dei risultati da 21 a 30 su 31
  1. #21
    E' anche vero che non lo conosco molto bene, tuttavia un conto è indicare immediatamente la gerarchia, ossia l' "URL" del dato/oggetto, che visiviamente risulta anche subito chiaro. Un conto è annidare tutti i gli elementi "TAG" uno dentro l'altro.
    In quest' ultimo caso mi pare che ti perdi parecchio quando hai molti oggetti; nell'altro caso invece sai già fin dall'inizio di che oggetto si tratta.
    Tutto qui.
    Poi per il resto certamenente è ben strutturato.
    E' vero che studiarlo bene male non fa, infatti potrei usare un TAG: <URL></URL>
    Ultima modifica di jabjoint; 12-03-2025 a 20:05
    jabjoint

  2. #22
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,276
    Guarda che io intendo una cosa del tipo:
    codice:
    <?xml version="1.0" encoding="UTF-8"?>
    <jframe class="com.esempio.MyEditorFrame" title="Editor di testo"
            defaultExitOperation="EXIT_ON_CLOSE" visible="true" pack="true">
        <jmenubar>
            <jmenu text="File">
                <jmenuitem text="Apri..." accelerator="CTRL+O"/>
                <jmenuitem text="Salva" accelerator="CTRL+S"/>
                <separator/>
                <jmenuitem text="Esci" accelerator="CTRL+Q"/>
            </jmenu>
        </jmenubar>
        <jscrollpane hScrollBar="AS_NEEDED" vScrollBar="AS_NEEDED" constraint="Center">
            <jtextarea rows="40" columns="80" lineWrap="true"/>
        </jscrollpane>
        <!-- una status bar con 3 label -->
        <jpanel layout="GridLayout" constraint="South">
            <jlabel/>
            <jlabel/>
            <jlabel/>
        </jpanel>
    </jframe>

    Quello che ho strutturato è "quasi" 1:1 con ciò che realmente fa e permette Swing. Salvo abbreviazioni/semplificazioni che vanno bene se sensate, tipo solo "AS_NEEDED" invece della lunga costante HORIZONTAL_SCROLLBAR_AS_NEEDED.

    E non ci vuole un "guru" di Swing per capire che si tratta di una piccola UI che rappresenta un mini text-editor, con il classico menù, una text-area scrollabile e una (abbozzata) status-bar. Chi legge questa struttura non deve perdere il tempo a guardare che "MainContainer" è una roba messa 30 righe prima ...

    Per come l'ho scritta così, è semplice, leggibile e più facile che scrivere tutto il codice Java a mano. Lo sai che ad esempio solo quel semplice menù con i vari accelerator, è una noia mortale da scrivere in codice Java con tutti i vari oggetti KeyStroke da creare per l'accelerator??

    Ma ovviamente ho solo "abbozzato" le funzionalità. Ci sono tante, tante, tante altre cose da valutare, del tipo:

    - come rappresenti i colori?
    - e i font?
    - e gli icon?
    - e i cursor?
    - e i margin?
    - e i border?
    - e le varie dimensioni: minimumSize/maximumSize/preferredSize?
    - e i constraint?

    Vedi che io ho messo constraint="Center" perché il jscrollpane va per default nel content-pane di JFrame, che tecnicamente è un JPanel con un BorderLayout per default. Con BorderLayout i constraint sono facili. BorderLayout.CENTER è una costante stringa che contiene appunto "Center".
    Ma se un container usa es. GridBagLayout, il constraint da usare per ciascun componente deve essere un oggetto più complesso, il java.awt.GridBagConstraints. Come lo rappresenteresti??

    E se volessi localizzare (nel senso di rendere "internazionale", con le lingue) la UI? Dai, questa è facile, te la dico. Si può pensare ad una forma tipo title="{{main.frame.title}}" dove main.frame.title diventa una "chiave" in un ResourceBundle per un certo Locale (lingua).

    Insomma, quello che io ho fatto è rappresentare la struttura tenendo a mente tutta la complessità e le finezze di Swing, che io personalmente conosco molto bene. E' chiaro che più vai a fondo su queste finezze e funzionalità di Swing, più il codice di parsing diventa complesso (ma comunque fattibile). Ovviamente nessuno obbliga ad arrivare fino a chissà quale livello di complessità.

    Quello che tu hai proposto è una cosa inguardabile, dove chi legge il file si "perde" solo tra index, name, ecc.. con il rischio solo di combinare casini se ci mette mani.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #23
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Guarda che io intendo una cosa del tipo:
    codice:
    <?xml version="1.0" encoding="UTF-8"?>
    <jframe class="com.esempio.MyEditorFrame" title="Editor di testo"
            defaultExitOperation="EXIT_ON_CLOSE" visible="true" pack="true">
        <jmenubar>
            <jmenu text="File">
                <jmenuitem text="Apri..." accelerator="CTRL+O"/>
                <jmenuitem text="Salva" accelerator="CTRL+S"/>
                <separator/>
                <jmenuitem text="Esci" accelerator="CTRL+Q"/>
            </jmenu>
        </jmenubar>
        <jscrollpane hScrollBar="AS_NEEDED" vScrollBar="AS_NEEDED" constraint="Center">
            <jtextarea rows="40" columns="80" lineWrap="true"/>
        </jscrollpane>
        <!-- una status bar con 3 label -->
        <jpanel layout="GridLayout" constraint="South">
            <jlabel/>
            <jlabel/>
            <jlabel/>
        </jpanel>
    </jframe>

    Quello che ho strutturato è "quasi" 1:1 con ciò che realmente fa e permette Swing. Salvo abbreviazioni/semplificazioni che vanno bene se sensate, tipo solo "AS_NEEDED" invece della lunga costante HORIZONTAL_SCROLLBAR_AS_NEEDED.

    E non ci vuole un "guru" di Swing per capire che si tratta di una piccola UI che rappresenta un mini text-editor, con il classico menù, una text-area scrollabile e una (abbozzata) status-bar. Chi legge questa struttura non deve perdere il tempo a guardare che "MainContainer" è una roba messa 30 righe prima ...

    Per come l'ho scritta così, è semplice, leggibile e più facile che scrivere tutto il codice Java a mano. Lo sai che ad esempio solo quel semplice menù con i vari accelerator, è una noia mortale da scrivere in codice Java con tutti i vari oggetti KeyStroke da creare per l'accelerator??

    Ma ovviamente ho solo "abbozzato" le funzionalità. Ci sono tante, tante, tante altre cose da valutare, del tipo:

    - come rappresenti i colori?
    - e i font?
    - e gli icon?
    - e i cursor?
    - e i margin?
    - e i border?
    - e le varie dimensioni: minimumSize/maximumSize/preferredSize?
    - e i constraint?

    Vedi che io ho messo constraint="Center" perché il jscrollpane va per default nel content-pane di JFrame, che tecnicamente è un JPanel con un BorderLayout per default. Con BorderLayout i constraint sono facili. BorderLayout.CENTER è una costante stringa che contiene appunto "Center".
    Ma se un container usa es. GridBagLayout, il constraint da usare per ciascun componente deve essere un oggetto più complesso, il java.awt.GridBagConstraints. Come lo rappresenteresti??

    E se volessi localizzare (nel senso di rendere "internazionale", con le lingue) la UI? Dai, questa è facile, te la dico. Si può pensare ad una forma tipo title="{{main.frame.title}}" dove main.frame.title diventa una "chiave" in un ResourceBundle per un certo Locale (lingua).

    Insomma, quello che io ho fatto è rappresentare la struttura tenendo a mente tutta la complessità e le finezze di Swing, che io personalmente conosco molto bene. E' chiaro che più vai a fondo su queste finezze e funzionalità di Swing, più il codice di parsing diventa complesso (ma comunque fattibile). Ovviamente nessuno obbliga ad arrivare fino a chissà quale livello di complessità.

    Quello che tu hai proposto è una cosa inguardabile, dove chi legge il file si "perde" solo tra index, name, ecc.. con il rischio solo di combinare casini se ci mette mani.
    Come accedi poi a quei contenuti?
    Come si cambiano le variabili?
    Sembra una buona soluzione poco innovativa come al solito ma funziona.

    Valuta che se avessi 15 annidamenti consecutivi sarebbe molto meglio raggiungere l'ultimo elemento con il mio sistema.

    Al posto degli indici si potrebbero usare costanti nominali.
    Ultima modifica di jabjoint; 13-03-2025 a 08:53
    jabjoint

  4. #24
    Comunque il sistema che ho proposto è elementare per chi conosce gli Array.
    jabjoint

  5. #25
    Comunque grazie, alla fine se c'� questo sistema già funzionante che proponi adotter� questo.
    È abbastanza elementare.
    jabjoint

  6. #26
    Quote Originariamente inviata da jabjoint Visualizza il messaggio
    Comunque grazie, alla fine se c'� questo sistema già funzionante che proponi adotter� questo.
    È abbastanza elementare.
    Come dice @alka adoperarlo sarà immediato visto che l' XML è standardizzato.
    Se mi fai un esempio di Accesso ai campi mi fai una cortesia. Buona giornata
    jabjoint

  7. #27
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,276
    Quote Originariamente inviata da jabjoint Visualizza il messaggio
    Se mi fai un esempio di Accesso ai campi mi fai una cortesia. Buona giornata
    E' quello che dicevo in precedenza e che forse non avevi recepito/intuito bene. La questione è che ad esempio nella classe che ho messo come esempio, <jframe class="com.esempio.MyEditorFrame", al suo interno magari ho bisogno di avere i field con la istanza del JTextArea, dei JMenuItem, ecc..., ovviamente per poterci lavorare e registrare dei listener e altro.

    Se io non devo più fare new JMenuItem("Salva"); .... e gli altri (perché lo fa "dinamicamente" la infrastruttura di loading della GUI da XML), come ottengo le istanze in quei field? Beh, ci sono diverse soluzioni sia "push", che "pull".

    Una soluzione è usare delle annotation, sia custom sia standard (pre-esistenti).

    <jmenuitem id="saveMenuItem" text="Salva" accelerator="CTRL+S"/>
    codice:
    public class MyEditorFrame {
        @GuiInject
        private JMenuItem saveMenuItem;
    
        @GuiInit
        void initialize() {
            // qui registro listener, ecc...
        }
    }

    Dove @GuiInject e @GuiInit sono annotation custom (le definisci tu). Qui ovviamente serve la reflection (e serve il setAccessible(true) per settare quel field private!). La infrastruttura va a cercare i field annotati con @GuiInject e ci inietta gli oggetti matchando per id. Poi ovviamente varianti possibili, es. @GuiInject("save") se nel XML id="save".

    Chiaramente ti serve anche un "punto" di inizializzazione, perché NON puoi registrare e fare cose nel costruttore, poiché l'injection avverrebbe solo DOPO il costruttore. Allora gestisci una @GuiInit per fornire un punto di aggancio nella inizializzazione.

    Invece di usare annotation custom, si possono anche usare annotation standard, tipo:
    - javax.inject.Inject (JSR 330)
    - jakarta.annotation.PostConstruct (Jakarta Annotation API, ex-javax in passato)

    Un'altra soluzione è usare un approccio "pull". All'interno della classe offri una API del tipo:

    saveMenuItem = GUIManager.getComponent(this, "saveMenuItem", JMenuItem.class); // this, il frame che fa da "contesto"

    Comunque, queste cose le fai solo se hai una visione ampia di cosa Java offre come linguaggio ed ecosistema. Io questa visione ampia ce l'ho ...
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #28
    Quote Originariamente inviata da andbin Visualizza il messaggio
    E' quello che dicevo in precedenza e che forse non avevi recepito/intuito bene. La questione è che ad esempio nella classe che ho messo come esempio, <jframe class="com.esempio.MyEditorFrame", al suo interno magari ho bisogno di avere i field con la istanza del JTextArea, dei JMenuItem, ecc..., ovviamente per poterci lavorare e registrare dei listener e altro.

    Se io non devo più fare new JMenuItem("Salva"); .... e gli altri (perché lo fa "dinamicamente" la infrastruttura di loading della GUI da XML), come ottengo le istanze in quei field? Beh, ci sono diverse soluzioni sia "push", che "pull".

    Una soluzione è usare delle annotation, sia custom sia standard (pre-esistenti).

    <jmenuitem id="saveMenuItem" text="Salva" accelerator="CTRL+S"/>
    codice:
    public class MyEditorFrame {
        @GuiInject
        private JMenuItem saveMenuItem;
    
        @GuiInit
        void initialize() {
            // qui registro listener, ecc...
        }
    }

    Dove @GuiInject e @GuiInit sono annotation custom (le definisci tu). Qui ovviamente serve la reflection (e serve il setAccessible(true) per settare quel field private!). La infrastruttura va a cercare i field annotati con @GuiInject e ci inietta gli oggetti matchando per id. Poi ovviamente varianti possibili, es. @GuiInject("save") se nel XML id="save".

    Chiaramente ti serve anche un "punto" di inizializzazione, perché NON puoi registrare e fare cose nel costruttore, poiché l'injection avverrebbe solo DOPO il costruttore. Allora gestisci una @GuiInit per fornire un punto di aggancio nella inizializzazione.

    Invece di usare annotation custom, si possono anche usare annotation standard, tipo:
    - javax.inject.Inject (JSR 330)
    - jakarta.annotation.PostConstruct (Jakarta Annotation API, ex-javax in passato)

    Un'altra soluzione è usare un approccio "pull". All'interno della classe offri una API del tipo:

    saveMenuItem = GUIManager.getComponent(this, "saveMenuItem", JMenuItem.class); // this, il frame che fa da "contesto"

    Comunque, queste cose le fai solo se hai una visione ampia di cosa Java offre come linguaggio ed ecosistema. Io questa visione ampia ce l'ho ...
    Ho capito in parte, molto interessante poter creare annotations personalizzate.
    Certo capisco che occorra molto lavoro per comprendere pienamente il meccanismo di come opera Java.
    Ovviamente mi sto candidando a questo.
    Ho tralasciato per molto tempo l'uso di Java perché ho lavorato con altro.

    Forse sai consigliarmi una guida ?
    P.S: Ma le annotazioni che usi hanno a che fare con Spring?
    jabjoint

  9. #29
    Comunque avevo recepito benissimo.
    Io ho adottato la reflection e pensavo di aggiungere tramite il metodo "add" al padre il figlio.
    Questo l'ho già detto.
    Se esiste un metodo migliore con le annotazioni ben venga.
    Ma mi pare che tu stesso usi la reflection in questo caso.
    jabjoint

  10. #30
    Il punto di inizializzazione sarà una lista di oggetti nel frame madre?
    Dal quale è anche prelevabile ogni oggetto creato tramite metodo: getComponent...
    jabjoint

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.