Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1

    Come strutturare un programam JAVA con GUI

    Salve, sono nuovo del forum, ho da poco iniziato la transizione dal paradigma procedurale all' OO, ma stò incontrando parecchie difficiltà, ho iniziato a leggere diversi manuali, ma ho ancora molti punti oscuri, quindi prima di andare avanti con la rettura e l'apprendimento volevo fare un po di chiarezza.

    Il metodo che stò usando per imparera è quello di prefissarimi un'obbiettivo, quindi partendo da questo obbiettivo stò cercando il modo di arrivarci.

    Il mio obbiettivo principale è la stesura di un programma che mi permetta il calcolo delle ore lavorate, quini una tabella con in calendario creato automaticamente, la gestione di più utenti, l'immissione delle ore e di vari modificatori, l'impostazione e l'esportazione di file .xls l'esportazione di file .pdf e poco altro.

    Il primo scoglio che mi sono trovato davanti è il corretto utilizzo delle API per creare l'interfaccia grafica, in particolare:

    - Qual'è la metodologia corretta per strutturare un programam con GUI, più che altro, non capisco se devo creare le varie finestre dal main o usare altre classi per creare il tutto e richiamare questa o queste classi dal main.
    - Come creare una tabella che abbia all'internotutti i giorni di un mese qualsiasi di un'anno qualsiasi.
    - Come salvare i dati, più che altro se usare dei file o un database, penso che sarebbe meglio almeno all'inizio usare dei file, ho visto che viene consigliato il metodo della serializzazione XML, non ho ancora ben capito cosa si intende per serializzazione, ma ho visto esempi di codice per ottenere ciò che mi serve.

    più che altro ho molta confusione in testa su come strutturare il programma, essendo abbituato a creare software in PHP il passaggio al java mi ha lasciato molto spiazzato, non so bene dove iniziare e leggendo i vari manuali non ho trovato risposte ai miei dubbi, poi magari stò sbagliando completamente approcio, ed è proprio per questo che vi chiedo aiuto, per capire secondo voi che strada dovrei seguire.

    Grazie.

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

    Re: Come strutturare un programam JAVA con GUI

    Originariamente inviato da Hotto000
    Il mio obbiettivo principale è la stesura di un programma che mi permetta il calcolo delle ore lavorate, quini una tabella con in calendario creato automaticamente, la gestione di più utenti, l'immissione delle ore e di vari modificatori, l'impostazione e l'esportazione di file .xls l'esportazione di file .pdf e poco altro.
    Non per sminuire o spaventare (ci mancherebbe ...) ma ... tutto questo che hai appena detto non è "robetta" da poco, sappilo.

    Originariamente inviato da Hotto000
    - Qual'è la metodologia corretta per strutturare un programam con GUI, più che altro, non capisco se devo creare le varie finestre dal main o usare altre classi per creare il tutto e richiamare questa o queste classi dal main.
    Innanzitutto devi stabilire in generale come si deve presentare la interfaccia utente, quante finestre deve avere e se più di una come devono relazionarsi.
    Molte applicazioni in genere devono trattare un "documento" (qualunque cosa si possa pensare come documento) e allora è possibile avere una sola finestra che gestisce 1 documento (pensa al Notepad di Windows) o una finestra con interfaccia "a tab" (pensa ai browser o a Notepad++) o una finestra con interfaccia MDI (Multi Document Interface) che fa da "desktop" e può contenere sotto-finestre ridimensionabili/iconizzabili ecc.. (pensa ai programmi di grafica o se ben ricordo ai "vecchi" Ms Word). Tutti questi tipi di interfacce sono sviluppabili in Java.

    Una volta che hai pensato la interfaccia utente in generale, devi scendere in dettaglio e sminuzzare la interfaccia in più sezioni. Se usi un linguaggio ad oggetti come Java la cosa da fare è appunto sfruttare i principi della programmazione ad oggetti: ereditarietà/polimorfismo, incapsulazione, ecc...
    Quindi dovresti cercare di creare classi distinte per le varie parti della interfaccia. Ad esempio una classe che estende JFrame per la finestra principale, altre classi che estendono JPanel magari per pannelli con un comportamento ben specifico, ecc...
    Più separi e incapsuli (nel modo giusto però ...) meglio è in genere.

    Originariamente inviato da Hotto000
    - Come creare una tabella che abbia all'internotutti i giorni di un mese qualsiasi di un'anno qualsiasi.
    In Swing (AWT ormai è "old") una tabella la si gestisce con JTable ma devi anche avere ben presente come si usano i table model. Se la tua tabella ha tipi di dato particolari, colonne con gestione particolare o si "modella" più o meno naturalmente su un tuo tipo di oggetto (pensa ad una tabella che gestisce una lista di oggetti Libro), ecc... devi essere preparato a implementare un tuo table model specifico, perché è la soluzione migliore.

    Originariamente inviato da Hotto000
    - Come salvare i dati, più che altro se usare dei file o un database, penso che sarebbe meglio almeno all'inizio usare dei file, ho visto che viene consigliato il metodo della serializzazione XML, non ho ancora ben capito cosa si intende per serializzazione, ma ho visto esempi di codice per ottenere ciò che mi serve.
    Per gestire file Excel, PDF, XML, servono delle API (librerie, per intenderci) specifiche. Per XML alcune API sono già presenti nelle più recenti versioni del framework standard.

    Originariamente inviato da Hotto000
    più che altro ho molta confusione in testa su come strutturare il programma, essendo abbituato a creare software in PHP il passaggio al java mi ha lasciato molto spiazzato, non so bene dove iniziare e leggendo i vari manuali non ho trovato risposte ai miei dubbi, poi magari stò sbagliando completamente approcio, ed è proprio per questo che vi chiedo aiuto, per capire secondo voi che strada dovrei seguire.
    Arrivare da PHP in effetti credo non aiuti più di tanto .... l'unica cosa che posso suggerirti è di continuare a documentarti, guardare esempi in giro ed eventualmente chiedere qui se hai dubbi.
    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
    Aug 2002
    Messaggi
    8,013
    Permettimi di dire che stai incominciando dal tetto a costruire la tua casa.

    Conviene che ti concentri prima sulle entità fondamentali:
    - utente
    - calendario
    - storage delle info (database)

    A questo punto, una volta creata l'intera ossatura/struttura, mettendo insieme i "mattoncini" costituitivi, puoi dare inizio alla creazione della GUI. Anche in questo caso vale il dividi e impera: creerai tante classi quante necessarie.

    La cosa che devi assolutamente tenere in mente quando cominci a programmare un'interfaccia grafica è che il programma dovrebbe poter funzionare anche a linea di comando (quasi). Se ti trovi a mescolare grafica e logica, allora di norma c'è un qualche problema di progettazione.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  4. #4
    @Andrea1979

    Ok, probabilemnte hai ragione, meglio iniziare dalle fondamenta, quinidi definire la struttura dell'utente, che per il momento penso che serà semplicemente nome e cognome, ma con la possibilità in futuro di implementare un'anagrafica più completa.

    quindi, come fare ciò?

    creando una classe utente avente attributi nome e cognome con il costruttore o i costruttori e i metodi getter e setter per gestire gli attributi?

    ciò che non riesco a capire degli oggetti è come usarli in modo dinamico cioè, io voglio aggiungere un'utente, quindi vado a creare un oggetto utente per esempio scrivendo

    codice:
    Utente xxx = new Utente();
    a parte il nome dell'oggetto che non ho ben chiaro come gestire, poi utilizzo dei dati che mi arrivano per esempio tramite tastiera per invocare i metodi xxx.setNome(variabile) e xxx.setCognome(variabile)
    per definire un nuovo utente, a questo punto il mio utente è completamente definirlo e posso per esempio salvarlo su un file .txt per esempio
    come posso però creare altri utenti?
    quello che effettivamente non riesco a capire è come rendere dinamico il codice.

    per adesso mi fermerei a questo primo passo, poi implementerei il calendario e dopo l'interfaccia grafica, per il momento preferirei utilizzare dei file come sistema di memorizzazione, magari creando delle directory in modo dinamico che abbiano il nomecognome dell'utente come nome, in modo da racchiudere all'interno tutti i file riguradanti le ore che abbiano come nome "neseanno" a cui si riferiscono, all'interno tutte le righe conteneti data, ore, e modificatori vari.

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Hotto000
    meglio iniziare dalle fondamenta
    Certamente. Io ti ho parlato più che altro della interfaccia utente, visto che chiedevi espressamente quello. Ma indipendentemente dalla GUI ci sono molte cose "dietro le quinte" che dovrai implementare (come modellare le entità, come gestirle, collezionarle, salvarle, ecc...). E quindi da qui devi comunque partire.

    Originariamente inviato da Hotto000
    quinidi definire la struttura dell'utente, che per il momento penso che serà semplicemente nome e cognome, ma con la possibilità in futuro di implementare un'anagrafica più completa.

    quindi, come fare ciò?

    creando una classe utente avente attributi nome e cognome con il costruttore o i costruttori e i metodi getter e setter per gestire gli attributi?
    Sì, esatto.

    Originariamente inviato da Hotto000
    ciò che non riesco a capire degli oggetti è come usarli in modo dinamico cioè, io voglio aggiungere un'utente, quindi vado a creare un oggetto utente per esempio scrivendo

    codice:
    Utente xxx = new Utente();
    a parte il nome dell'oggetto che non ho ben chiaro come gestire
    Il nome della variabile intendi? quel "xxx" che hai messo qui sopra?
    Il nome della variabile non è molto importante. L'importante è stabilire se dovrai gestire 1 utente o una "collezione" di utenti.

    Originariamente inviato da Hotto000
    poi utilizzo dei dati che mi arrivano per esempio tramite tastiera per invocare i metodi xxx.setNome(variabile) e xxx.setCognome(variabile)
    Qui semplicemente preleverai le stringhe da dei componenti grafici di testo ... ma è ad un livello più alto di quanto stai valutando adesso.

    Originariamente inviato da Hotto000
    come posso però creare altri utenti?
    quello che effettivamente non riesco a capire è come rendere dinamico il codice.
    Il punto non è arrivare a fare new Utente(....) ma stabilire quanti utenti vuoi gestire, cioè se vuoi gestire una collezione di oggetti Utente o no.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    @ andbin

    Vorrei gestire una collezione di utenti, di cui però non so il numero sicuramente più di uno e sicuramente estendibili in futuro, ma estendibili tramite GUI

    Io ho crato la seguente classe Utente:

    codice:
    public class Utente {
    
    private String nome;
    private String cognome;
    		
    public Utente(String nome, String cognome) {
    		
    	this.nome = nome;
    	this.cognome = cognome;
    	}
    
    public String getNome() {
    	return nome;
    	}
    
    public void setNome(String nome) {
    	this.nome = nome;
    	}
    
    public String getCognome() {
    	return cognome;
    	}
    
    public void setCognome(String cognome) {
    	this.cognome = cognome;
    	}
    
    }
    a questo punto devo poter creare una collezione di oggetti Utente giusto?
    ma questo funzione fino a quando non chiudo il programma, quindi dovrei anche salvare la collezione e ricaricarla all'apertura del programma.

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Hotto000
    Io ho crato la seguente classe Utente:
    La classe Utente che hai scritto è corretta e non fa una "piega". Quindi ok.

    Originariamente inviato da Hotto000
    a questo punto devo poter creare una collezione di oggetti Utente giusto?
    Sì. In Java le "collezioni" si trovano nel package java.util. Si tratta di strutture dati più o meno complesse, liste, set, mappe, code, ecc... Non hanno nulla a che fare, direttamente, con una GUI ... sono solo strutture dati e basta. Potresti già valutare quale usare.

    A livello di GUI i vari componenti grafici tipo JList (lista di elementi), JComboBox (combo con lista a discesa di elementi), JTable (griglia di dati), hanno a che fare con i loro rispettivi model, altre classi (non GUI) che contengono e gestiscono la struttura dati. E queste possono usare appunto le collezioni in java.util. Di fatto le implementazioni predefinite dei vari model es. DefaultListModel, DefaultTableModel si basano su Vector.
    Ma se implementi un tuo model sei libero di implementare la struttura dati come vuoi.

    Originariamente inviato da Hotto000
    ma questo funzione fino a quando non chiudo il programma, quindi dovrei anche salvare la collezione e ricaricarla all'apertura del programma.
    Sì ma questo sarà un altro discorso. Data una "collezione" di oggetti Utente dovrai semplicemente realizzare ulteriori classi (come ti è stato suggerito da Andrea1979, il principio è quello di separare e incapsulare il più possibile) per leggere/scrivere la collezione di utenti.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Originariamente inviato da andbin
    JTable (griglia di dati), hanno a che fare con i loro rispettivi model, altre classi (non GUI) che contengono e gestiscono la struttura dati. E queste possono usare appunto le collezioni in java.util. Di fatto le implementazioni predefinite dei vari model es. DefaultListModel, DefaultTableModel si basano su Vector.
    Ma se implementi un tuo model sei libero di implementare la struttura dati come vuoi.
    Quindi con la seguente List

    codice:
    List<Utente> Utenti = new LinkedList<Utente>();
    Aggingendo i dati tramite

    codice:
    Utenti.add(new Utente("Aldo", "Baglio"));
    Per farlo in modo dinamico quindi mi basta sostituire le stringhe con le variabili ricevute dall'esterno giusto?

    Se tutto è corretto inizierei a verere la GUI relativa all'immissione dei dati nella Lista, e successivamente il salvataggio della lista e la riapertura con la stampa degli elementi sempre nella GUI.

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Hotto000
    Per farlo in modo dinamico quindi mi basta sostituire le stringhe con le variabili ricevute dall'esterno giusto?
    Sì certo, il concetto da usare è proprio questo.

    Originariamente inviato da Hotto000
    Se tutto è corretto inizierei a verere la GUI relativa all'immissione dei dati nella Lista, e successivamente il salvataggio della lista e la riapertura con la stampa degli elementi sempre nella GUI.
    Sì va anche bene. Effettivamente lettura/scrittura in modo permanente è una cosa a parte che prescinde dalla GUI. Puoi fare prima l'una o l'altra.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  10. #10
    Allora, partiamo col la scrittura e la lettura dei dati, in sostanza io devo fare questo:

    - Quando viene aggiunto un'utente devo prima cosa aggiungerlo alla List, poi creare nella cartella dati la cartella relativa all'utente con il formato nomecognome ed infine salvare la lista nel file utenti.dat, in'oltre sull'aggiunta dell'utente devo aggiungere un controllo che non permetta di avere utenti uguali quindi con stesso nome e sesso cognome.

    - Quando avvio il programma leggere la List dal file, in quanto la lista poi viene aggirnata quando si aggiunge un utente non ho più bisogno di leggerla dal file giusto?

    ora io ho il seguente main

    codice:
    import java.io.File;
    import java.util.*;
    
    public class Main {
    
    	static List<Utente> Utenti = new LinkedList<Utente>();
    	
    	public static void main(String[] args) throws InterruptedException {
    		
    		Utenti.add(new Utente("Aldo", "Baglio"));
    		
    		for(Utente utente : Utenti) {
    			
    			if(new File("Dati/" + utente.getNome().toLowerCase()+utente.getCognome().toLowerCase()).exists())
    				System.out.println("L'utente "+ utente.getNome() + " " + utente.getCognome() +" esiste già");
    			else	
    			new File("Dati/" + utente.getNome().toLowerCase()+utente.getCognome().toLowerCase()).mkdirs();
    		}
    		
    
    	}
    }

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.