Visualizzazione dei risultati da 1 a 10 su 33

Visualizzazione discussione

  1. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da jabjoint Visualizza il messaggio
    Questo è il file di configurazione:
    Ok .. quello che "temevo". Una soluzione "fatta in casa" che però ha un sacco di problemi. Ed ora cerco di spiegarti.

    Innanzitutto quel tuo file di configurazione è estremamente "prolisso". Poi, perché tutti quei "#"?? La gestione di questo formato che ti sei "inventato", è tutta a TUO carico. E non è affatto banale. Non voglio nemmeno immaginare (no, non farmelo vedere ..) cosa hai scritto per parsare questo formato!

    E in ogni caso, da quella struttura si capisce molto poco. Soprattutto, quello che si capisce poco è la struttura "effettiva" dell'albero dei componenti.

    Si vede ad esempio:

    Parent(#FRAME, MainFrame1#);

    e

    Parent(#CONTAINER, MainContainer#);

    Ma già così si capisce poco. MainFrame1 è il Name di un frame messo 27 righe prima. Ora, se già così si capisce poco, immagina uno scenario nemmeno troppo complesso: un JFrame che contiene 1 JPanel, che contiene 3 JPanel, e ciascuno contiene 10~12 componenti.

    Secondo te, una persona che LEGGE quel file, va continuamente a cercarsi avanti e indietro le relazioni tra i nomi?? E secondo te, solo leggendo il file, riesce a farsi una idea mentalmente della struttura (ad "albero") della interfaccia utente??

    E infatti: non è così che va fatto!

    Quote Originariamente inviata da jabjoint Visualizza il messaggio
    Trovare la gerarchia dal file di conf. è semplice, basta filtrare uguagliando il campo parent del figlio col campo nome del padre.
    No, non è questo che va fatto!! Anche se tecnicamente lo facessi, il file resterebbe comunque (quasi) illeggibile.


    Quote Originariamente inviata da jabjoint Visualizza il messaggio
    Per la creazione dinamica dei componenti uso:
    codice:
    Class classX = Class.forName(fullClassName);
    
    Constructor constr = classX.getDeclaredConstructor();
    
    constr.setAccessible(true);
    
    Component c = (Component) constr.newInstance();
    Anche qui sbagli. Innanzitutto il setAccessible probabilmente non ti serve. Il setAccessible(true) serve per permettere l'accesso a metodi/costruttori/field che non sarebbero normalmente accessibili per reflection secondo le regole sui livelli di accesso.
    Ma a te NON serve usare cose "interne" di Swing. E te basta usare l'API "pubblica" di Swing. E per questo, il setAccessible NON serve.

    Ti dico di più. L'uso di "diretto" della reflection (Class, Field, Method ecc...) ok, è un conto, ma esiste un'altra API nel framework, quella nel package java.beans. Questa API è di più "alto" livello ed è stata fatta proprio per gestire gli oggetti che seguono la specifica dei JavaBeans (oggetti con getXxx/setXxx ecc...) e in modo specifico i componenti AWT/Swing, che di fatto sono proprio dei JavaBeans.

    Poi hai considerato anche altri aspetti? Ad esempio il fatto che il setVisible(true) generalmente è l'ultima cosa da fare su un frame.

    E inoltre anche un'altra cosa: come gestisci il fatto che ad esempio in una certa classe che estende JFrame hai bisogno del riferimento a certi componenti? Quando io faccio una UI Swing, generalmente scrivo una cosa tipo:
    codice:
    public class MyFrame extends JFrame {
        private JLabel infoLabel;
    
        public MyFrame() {
            // qui costruisco i componenti, es.:
            infoLabel = new JLabel();
            // ....
        }
    
        // altri metodi dove uso infoLabel
    }

    Se con un file di configurazione, la creazione dei componenti è dinamica basata su quel file, quel infoLabel = new JLabel(); di fatto non esiste più. Quindi la domande è: chi mi popola quel field infoLabel che comunque mi serve nel codice di MyFrame?
    Sappi che ci sono diverse soluzioni (almeno 2 ho in mente) per questo aspetto.

    Hai pensato e ragionato su questi aspetti?
    Ultima modifica di andbin; 11-03-2025 a 18:29
    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.