Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    21

    [java] visualizzare contenuto linkedlist

    Ciao, sto creado una semplice applicazione con java swing per l'inserimento di dati anagrafici e la visualizzazione dei dati inseriti.

    ho creato una classe lista con i parametri nome cognome eta e titolo studi cosi fatta:
    codice:
    class lista 
    	public lista(String nome,String cognome,int eta,String studi)
    	{
    		this.nome=nome;
    		this.cognome=cognome;
    		this.eta=eta;
    		this.stud=studi;
    .........
    ........
    poi ho pensato di fare una linkedlist <lista> per creare una lista di oggetti , per far in modo che ogni elemento della linked list contenga un oggetto (nome,cognome,eta,studi) cosi: linkedlist.add(new lista(n,c,et,st));.
    per prima cosa , va bene usare una linkedlist o c'era qualche struttura migliore escludendo i DataBase? (se faccio una list normale list<lista> mi da errore).
    poi volevo sapere come faccio a visualizzare su un form l'intero contenuto della linkedlist?
    se il contenuto era string o altro riesco a visualizzarli ma il problema e' che il contenuto della linked list sono oggetti.

    per riempire la linkedlist c'e' una form con varie textarea/checkbox in cui l utente inserisce i dati
    che io vado a prelevare ed inserire gestendo gli eventi di click:
    codice:
    LinkedList<lista> elenco=new LinkedList<lista>();
    JButton inserisci=new JButton("inserisci");
    JButton visualizza=new JButton("visualizza lista");
    ........
    ........
    class AscoltaActionListener implements ActionListener
    	{
    		public void actionPerformed (ActionEvent e)
    		{
    			String s=e.getActionCommand();
    
    // click tasto inserimento
    			if(s.compareTo("inserisci")==0)
    			{
    				// inserisco nome ,cognome ,eta ,e titolo studi su 4 variabili 
                                    //prelevando i valori dalle textarea/checkbox
    				String n=nome.getText();
    				String c=cognome.getText();
    				int et=Integer.parseInt(eta.getText());
    				String st="non inserito";
    				if (chb1.getState()) st=chb1.getLabel();
    				else if (chb2.getState()) st=chb2.getLabel();
    				else if (chb3.getState()) st=chb3.getLabel();
    				else if (chb4.getState()) st=chb4.getLabel();
    // aggiungo un nuovo elemento di tipo lista(nome,cognome,eta,studi) alla linkedlist          
    
    				elenco.add(new lista(n,c,et,st));  
    				nome.setText("");
    				cognome.setText("");
    				eta.setText("");
    				chb1.setState(false);
    				chb2.setState(false);
    				chb3.setState(false);
    				chb4.setState(false);
    			}
    
    // click tasto visualizza apro una nuova form in cui andrebbe stampato il contenuto della linked list
    
    			if(s.compareTo("visualizza lista")==0)
    			{
    				
                              operazioni per visualizzare l'intera linkedlist sul nuovo form fr? 
    
    			     fr.setVisible(true);
    				
    			}

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    conosci le Collection?
    RTFM Read That F*** Manual!!!

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

    Re: [java] visualizzare contenuto linkedlist

    Originariamente inviato da max8787
    ho creato una classe lista con i parametri nome cognome eta e titolo studi cosi fatta:
    codice:
    class lista 
    	public lista(String nome,String cognome,int eta,String studi)
    	{
    		this.nome=nome;
    		this.cognome=cognome;
    		this.eta=eta;
    		this.stud=studi;
    .........
    ........
    Innanzitutto bisognerebbe cercare di denominare le classi in modo che il nome sia coerente con quello che la classe rappresenta realmente.
    Una classe con nome "lista" farebbe pensare ad un oggetto che contiene N altre entità ma nel tuo caso non è così in quanto la tua lista rappresenta solo una singola entità (una persona / studente o quello che è ...).
    Quindi sarebbe più appropriato: Persona o Studente (o altro simile).

    Originariamente inviato da max8787
    per prima cosa , va bene usare una linkedlist o c'era qualche struttura migliore escludendo i DataBase? (se faccio una list normale list<lista> mi da errore).
    java.util.List è la interfaccia (quindi un tipo "astratto") base. Le implementazioni "concrete" (che sono quelle che puoi istanziare con new) sono es. ArrayList, LinkedList e altre. Le varie implementazioni differiscono per la struttura dati interna e di conseguenza nelle prestazioni per le varie operazioni add, get, iterazione, ecc...

    Originariamente inviato da max8787
    poi volevo sapere come faccio a visualizzare su un form l'intero contenuto della linkedlist?
    Dipende da come vuoi visualizzare una singola entità (nel tuo caso la persona).
    In Swing esiste JList (una lista di N celle) oppure JTable (una griglia di NxM celle).

    In nessuno di questi casi però conviene sfruttare una "linked" list. Sia JList che JTable si basano su dei "model" (rispettivamente le interfacce ListModel e TableModel). Quindi o usi i model di default (predefiniti) come DefaultListModel o DefaultTableModel che hanno già una loro struttura dati interna oppure implementi un "tuo" model in modo che contenga una struttura dati di tua scelta (che potrebbe essere un array se non deve espandere oppure un List, come tipo concreto meglio un ArrayList).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    21
    grazie per le risposte, ora sono riuscito a farlo funzionare utilizzando gli arraylist al posto dei linkedlist e tramite una textarea richiamando i metodi get della classe persone(classe che prima ho chiamato lista ),solo che questa soluzione anche se funzionante non mi sembra proprio ottimale.
    codice:
    class AscoltaActionListener implements ActionListener
    	{
    		public void actionPerformed (ActionEvent e)
    		{
    			
    			String s=e.getActionCommand();
    			if(s.compareTo("inserisci")==0)
    			{
                                   ...............
                                   ..............
    			}
    			if(s.compareTo("visualizza lista")==0)
    			{
    				 
    					for (Persone i :elenco)  //Persone e' la vecchia classe lista 
                                                                           //che ho modificato come da consiglio
                                                                           // area e' una jtextarea
    					{
    						app=area.getText();
    						String nm=i.getNome();
    						String cm=i.getCognome();
    						String ea=String.valueOf(i.getEta());
    						String std=i.getStudi();
    						area.setText(app+nm+" "+cm+" "+ea+" "+std+"\n");
    				}
    				   fr.setVisible(true);
    				
    			}
    in questo modo ottengo all'interno della textarea tutte le persone, ad es:
    mario rossi 22 medie
    luca bianchi 32 laurea
    ............


    dite che puo' andare bene ugualmente o e' fatta troppo in malo modo??
    ho provato ad usare una jlist o jtable ma nn riesco a capire come funziona , dovrei usare gli iterator?

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    jlist e/o jtable sono un po' più complessi da usare e non sono immediati come gli altri componenti swing che vedi. A tal proposito ti consiglio di partire da qui
    Riguardo quello che hai fatto, con qualche ottimizzazione può andare bene, in genere è così che si lavora.
    codice:
    for (Persone persona :elenco) {
    
    	app=area.getText();											area.setText(app+persona.getNome()+" "+persona.getCognome()+" "+persona.getEta()+" "+persona.getStudi()+"\n");
    				}
    questo è già un inizio.
    puoi addirittura fare quello che fai qui tra parentesi nella classe Persona facendo l'override di toString()

    codice:
    public String toString(){
        StringBuilder build = new StringBuilder(""); 
        build.append("Nome "); 
        build.append(nome);
        build.append(" cognome ");
        build.append(cognome);
        build.append(" eta ");
        build.append("" + eta);
        build.append(" studi ");
        build.append(studi);
    return build.toString(); 
    
    }
    e la tua area diventa
    codice:
    for (Persone persona :elenco) {
    
    	app=area.getText();	
    
    	area.setText(app+persona + "\n");
    				}
    non ricordo se in area puoi usare append o no
    RTFM Read That F*** Manual!!!

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    21
    Originariamente inviato da valia
    jlist e/o jtable sono un po' più complessi da usare e non sono immediati come gli altri componenti swing che vedi. A tal proposito ti consiglio di partire da qui
    Riguardo quello che hai fatto, con qualche ottimizzazione può andare bene, in genere è così che si lavora.
    codice:
    for (Persone persona :elenco) {
    
    	app=area.getText();											area.setText(app+persona.getNome()+" "+persona.getCognome()+" "+persona.getEta()+" "+persona.getStudi()+"\n");
    				}
    si e' vero hai ragione e' inutile usare una variabile d'appoggio.

    grazie per i consigli ora mi vado a leggere il link .

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.