Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it L'avatar di Pierock
    Registrato dal
    Dec 2008
    Messaggi
    102

    [java] variabili comuni tra classi

    salve,
    ho realizzato un classe (" Pannello") che genera un JPanel composto da diversi JTextField,
    i dati inseriti in questi JTextField tuttavia devono essere passati ad un'altra classe ("Gestione"), quindi la mia idea quella di evitare di rendere tutti i JTextField publici e statici e riempire la classe gestione di decine di chiamate del tipo

    Pannello.Jtxt1.getText();

    e allo stesso tempo di evitare di creare decine di metodi "get" nella classe Pannello.

    la mia idea (che già premetto si è rivelata na fregnaccia)
    era quella di creare una classe astratta contenente tutte le variabili che interessano entrambe le classi..
    e rendere:
    - Pannello extends Abstract
    - Gestione extends Abstract

    di modo che in Pannello ci sia una funzione che setti
    super.nome = NomeJtextFiel.getText();

    e dunque in Gestione possa serenamente usare
    super.nome

    .... ovviamente questa mia idea non ha funzionato assolutamente...
    sapreste spiegarmi bene per quale motivo? .. ed esiste un modo per ottenere quello che avevo immaginato?

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

    Re: [java] variabili comuni tra classi

    Originariamente inviato da Pierock
    quindi la mia idea quella di evitare di rendere tutti i JTextField publici e statici e riempire la classe gestione di decine di chiamate del tipo

    Pannello.Jtxt1.getText();
    No, così non sarebbe un buon "design" perché dovresti aprire l'accesso ai componenti dall'esterno. E a meno di casi davvero particolari/speciali (al momento non me ne vengono in mente ma potrebbero essercene) è preferibile di no.

    Originariamente inviato da Pierock
    la mia idea (che già premetto si è rivelata na fregnaccia)
    era quella di creare una classe astratta contenente tutte le variabili che interessano entrambe le classi..
    e rendere:
    - Pannello extends Abstract
    - Gestione extends Abstract

    di modo che in Pannello ci sia una funzione che setti
    super.nome = NomeJtextFiel.getText();

    e dunque in Gestione possa serenamente usare
    super.nome

    .... ovviamente questa mia idea non ha funzionato assolutamente...
    sapreste spiegarmi bene per quale motivo?
    Perché sebbene i campi siano in Abstract e visibili alle sotto-classi, quando istanzi Pannello e istanzi Gestione, ognuno ha le "sue" variabili (La istanza X di Pannello ha il suo nome e la istanza Y di Gestione ha il suo nome).

    Non è che mettendo un campo di istanza in una super-classe, esso è unico e "globale" a tutti gli oggetti delle sotto-classi!!

    Originariamente inviato da Pierock
    e allo stesso tempo di evitare di creare decine di metodi "get" nella classe Pannello.
    Se è un'altra classe che deve "estrarre" i dati (quindi bisogna invocare qualcosa sul tuo pannello per averli) gli approcci potrebbero essere:

    1) Mettere dei getXyz che restituiscono i riferimenti ai JTextField. Concettualmente sarebbe già meglio che mettere i campi direttamente public ma non è comunque una buona soluzione (non delle migliori, cioè).

    2) Mettere dei getXyz che restituiscono ognuno il testo contenuto nel textfield, es.:
    codice:
    public String getNome() {
        return fieldNome.getText();
    }
    Questa soluzione è già buona.

    3) Mettere un solo getXyz che restituisce un oggetto Xyz che "modella" l'insieme dei dati (ammesso che abbia senso per i tuoi dati).
    Anche questo è buona.
    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.