Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    aggiungere oggetti generati da lettura file(tramite stream) a componente JComboBox[JAVA]

    sto cercando di fare un programmino CON ECLIPSE IN java che lavori sulle istanze di oggetti selezionabili da componente JComboBox...il problema è che ho cercato di fare in modo che tramite interfaccia grafica si potessero aggiungere altri oggetti da poter selezionare.
    il problema era che chiuso il programma e la rispettiva finestra principale gli oggetti generati sarebbero andati persi...ecco allora il lampo di genio per salvare i nuovi oggetti:scriverli una volta aggiuti in un file txt che all avvio del programma viene letto e interpretato in modo da aggiungere gli oggetti al JComboBox.
    sono convinto che esistano metodi appropriati per salvare i dati di un programma,ma io mi sono voluto gettare lo stesso in questa prova.
    il problema è che dopo aver letto il file,ed aver aggiunto tutti gli oggetti generati dalla lettura del file in un String[] oggetti,se do al costruttore della JCombo box l array,quando apro la JComboBox invece dei nomi degli oggetti ci sono dei numeri(probabilmente l indirizzo di memoria)
    tuttavia se provo a lavorare con quegli oggetti il programma,esso non fa quello che deve ma non da neanche errore.
    se li aggiungo creando per ogni oggetto un item e tramite metodo li aggiungo alla JComboBox passandogli per parametri oggetto.getText() e posizione,nella JComboBox gli elementi c sono ma nn sono visibili(come se avessero nome "")...e se provo a lavorarci con l ascoltatore del bottone da errore

    VI PREGO AIUTOOOOOOOOOOO

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Direi che senza vedere nemmeno l'ombra di una riga di codice, di aiuto te ne possiamo dare ben poco.
    Quel che è cero è che se gli oggetti sono correttamente inseriti in un array di String e questo array viene passato al costruttore di JComboBox, essi devono essere correttamente rappresentati dal renderer di default del JComboBox. Se tu vedi dei numeri (tipo indirizzi), c'è qualcosa di sbagliato o nella lettura da file o nella costruzione dell'array.

    Dal punto di cui dici "se li aggiungo creando per ogni oggetto un item" non ho più capito un acca.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    PARTE DEL CODIDE è QUESTA:


    codice:
    public class CalcolaRicetta {
        public static void main(String[] args){
            final JFrame finestra=new JFrame();
            finestra.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            
            final JPanel pannello = new JPanel();
            finestra.setContentPane(pannello);
            pannello.setLayout(new BorderLayout());
            final JComboBox scelte1=new JComboBox();
            final String nuova=leggiFile("C:/Users/Stefano/Desktop/codici2.txt");//leggi file mi torna una stringa con quello scritto nel file
            int numero=contaComponeti(nuova);//contacomponenti serve per sapere quanti oggetti devo creare
    //il metodo lavora stringa prepara la stringa nuova per essere  letta dal  costruttore di ingredienti
            String [] elementi=lavoraStringa(nuova,numero*3);
            Ingrediente[] ingrediente=new Ingrediente[numero];
    //da qui cerco di creare gli oggeti prendendo come riferimento le istanza di[]elementi
            int posItem=0;
            int fineScorri=2;
            int inizioScorri=0;
            while(numero>0){
                String nomeMom="";
                int primo=0;
                int secondo=0;
                for(int i=inizioScorri;i<fineScorri;i++){
                    if(i==0){
                        nomeMom=elementi[i];
                    }
                    if(i==1){
                        primo=Integer.parseInt(elementi[i]);
                    }
                    if(i==2){
                        secondo=Integer.parseInt(elementi[i]);
                    }
                }
                fineScorri=fineScorri+3;
                inizioScorri=inizioScorri+3;
    //creo l oggetto dentro il ciclo while e lo associo al jComboBox scelte1
                Ingrediente nuovo=new Ingrediente(nomeMom,primo,secondo);
                scelte1.insertItemAt(nuovo.getText(),posItem);
                ingrediente[posItem]=nuovo;
                posItem++;
                numero--;
            }
            
    
    //ascoltatoreBottone
    calcola.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent arg0) {
                    int rgrassi=((Ingrediente) scelte1.getSelectedItem()).getGrassi();
                    int rcarboidrati=((Ingrediente) scelte1.getSelectedItem()).getCarboidrati();
                    areaRicetta.setText(areaRicetta.getText()+"GRASSI TOTALI: "+""+rgrassi+"\n");
                    areaRicetta.setText(areaRicetta.getText()+"CARBOIDRATI TOTALI: "+""+rcarboidrati+"\n");
                }
                
            });

    //classeIngrediente

    codice:
    public class Ingrediente {
        
    private String nome;    
    private int carboidrati;
    private int grassi;
    
    public Ingrediente(String nome,int carboidrati,int grassi){
        this.nome=nome;
        this.carboidrati=carboidrati;
        this.grassi=grassi;
    }
    public int getGrassi(){
        return grassi;
    }
    public int getCarboidrati(){
        return carboidrati;
    }
    public String getText(){
        return nome;
    }
    }
    Ultima modifica di LeleFT; 26-11-2014 a 19:21 Motivo: Aggiungi i tag CODE

  4. #4
    secondo me il problema risiede nel fatto che gli oggetti che passo al JComboBox sono dichiarati dentro il while ed ogni volta sovrascritti....
    il fatto è che non trovo nessun altro modo pre poter creare oggetti da file txt

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Al di là del caos... visto che inizialmente la JComboBox sarà vuota, perchè complicarsi tanto la vita ad usare insertItemAt() e tenere conto della posizione? Non fai prima ad usare addItem(), che prende solo il nuovo valore da aggiungere e lo mette in coda?


    Ciao.
    Ultima modifica di LeleFT; 26-11-2014 a 19:32
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  6. #6
    giusto,ma peccato che non risolva il problema...

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Sì, lo so... ieri sera non avevo tempo per guardare bene il codice (che, ripeto, è molto caotico e andrebbe rivisto in un ottica più aderente alla OOP).

    Tutto ciò che viene fatto dentro al while ha pochissimo senso ed è errato.
    Dopo che il for è stato eseguito la prima volta (alla prima iterazione del ciclo while), vengono incrementate le variabili "inizioScorri" e "fineScorri" e queste assumeranno i valori 3 e 5 (poi 6 e 8, ecc). Di conseguenza, dalla seconda iterazione del while in poi, nessuna delle 3 if poste dentro al for sarà mai vera... poichè "i" inizia le iterazioni col valore 3, poi col valore 6, ecc.

    Da notare, inoltre, che la terza if non sarà MAI vera poichè alla prima iterazione del while i non assumerà mai il valore 2 (condizione del for) e dalla successiva partirà da 3. Quindi, potresti banalmente toglierla e il risultato non cambierebbe.

    Il mio consiglio è di rivedere completamente quel codice:

    1) Crea una classe apposita per la finestra.
    2) Crea una classe apposita per la lettura e parserizzazione del file
    3) Cerca di scrivere il codice in modo da renderlo il più chiaro possibile, per facilitare TE nella manutenzione e nel debug.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  8. #8
    grazie mille per il consiglio,ieri sera poi me ne ero accorto anche io...ho corretto e adesso gli oggetti li crea nel modo giusto..rimane ancora il problema che il jComboBox non visualizza il nome ma l indirizzo di memoria...non riesco proprio a capire il motivo...spero di riuscire a trovare una soluzione,anche perchè il difficile l ho fatto...

  9. #9
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Per capire questo problema è necessario vedere la parte relativa alla lettura del file e il metodo "lavoraStringa()", per capire cosa viene fatto realmente.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  10. #10
    Ho risolto!!!!! adesso funziona!! grazie mille per l interesse dimostrato

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.