Mostra risultati da 1 a 7 di 7

problema "refresh" form in j2me

Questa discussione si intitola problema "refresh" form in j2me nella sezione Programmare, si grazie, appartenente alla categoria Area Tecnica; Ciao ragazzi, sto avendo un problema con una form dove visualizzo una lista e dei comandi. Questa lista contiene degli ...

  1. #1
    djdedo non è in linea Member CT
    Data registrazione
    7 January 2010
    Messaggi
    144
    vCash
    600
    Grazie
    63
    Ringraziato 49 volte in 32 post

    Predefinito problema "refresh" form in j2me

    Ciao ragazzi, sto avendo un problema con una form dove visualizzo una lista e dei comandi. Questa lista contiene degli indirizzi mail. In pratica io ho la mia funzione che mi crea la lista e la inserisce nel form e lo fa vedere, ogni funzione per gestire questa lista richiama alla fine la funzione per ricrearla. Con le funzioni per aggiungere e modificare un elemento nessun problema, mentre con la cancellazione di un elemento o tutti il form non viene "aggiornato" lasciandolo invariato. Non so se mi sono spiegato
    La funzione per creare il form è questa
    Codice:
    private void listaProfili() {
    		Form indirizzi = new Form("Lista indirizzi email");
    		final List listaIndirizzi = new List();
    		int numIndirizzi = config.numeroIndirizziSalvati();
    		if (numIndirizzi == 1) {
    			listaIndirizzi.addItem("Non ci sono indirizzi salvati");
    			indirizzi.addComponent(listaIndirizzi);
    			indirizzi.addCommand(new Command("Indietro"));
    			indirizzi.addCommand(new Command("Inserisci nuovo"));
    			indirizzi.addCommandListener(new ActionListener() {
    				
    				public void actionPerformed(ActionEvent arg0) {
    					// TODO Auto-generated method stub
    					if (arg0.getCommand().getCommandName().equals("Indietro")) {
    						mainForm.show();
    					}
    					if (arg0.getCommand().getCommandName().equals("Inserisci nuovo")) {
    						nuovoIndirizzo();
    					}
    				}
    			});
    		} else {
    			int defaultIndex = -1;
    			try {
    				
    				if (config.getDefault() == 1)
    					throw new Exception("mail di default non definita");
    
    				for (int i = 2; i <= config.numeroIndirizziSalvati(); i++) {
    					String indirizzoLetto = config.leggiIndirizzo(i);
    					if (indirizzoLetto != null) {
    						if (i == config.getDefault()) {
    							listaIndirizzi.addItem(indirizzoLetto);
    							defaultIndex = i;
    						} else {
    							listaIndirizzi.addItem(indirizzoLetto);
    						}
    					}
    				}
    			} catch (Exception e) {
    				e.printStackTrace();
    				
    				for (int i = 2; i <= config.numeroIndirizziSalvati(); i++) {
    					String indirizzoLetto = config.leggiIndirizzo(i);
    					if (indirizzoLetto != null) {
    						listaIndirizzi.addItem(indirizzoLetto);
    					}
    				}
    			}
    			
    			if (defaultIndex != -1)
    				listaIndirizzi.setSelectedIndex(defaultIndex);
    			
    			indirizzi.addComponent(new Label("Indirizzo di default"));
    			indirizzi.addComponent(listaIndirizzi);
    			
    			indirizzi.addCommand(new Command("Indietro"));
    			indirizzi.addCommand(new Command("Usa questo"));
    			indirizzi.addCommand(new Command("Inserisci nuovo"));
    			indirizzi.addCommand(new Command("Modifica indirizzo"));
    			indirizzi.addCommand(new Command("Cancella indirizzo"));
    			indirizzi.addCommand(new Command("Cancella tutto"));
    			
    			indirizzi.addCommandListener(new ActionListener() {
    				
    				public void actionPerformed(ActionEvent arg0) {
    					// TODO Auto-generated method stub
    					if (arg0.getCommand().getCommandName().equals("Usa questo")) {
    						impostaDefault(listaIndirizzi.getSelectedIndex());
    					}
    					if (arg0.getCommand().getCommandName().equals("Modifica indirizzo")) {
    						modificaIndirizzo(listaIndirizzi.getSelectedIndex());
    					}
    					if (arg0.getCommand().getCommandName().equals("Indietro")) {
    						mainForm.show();
    					}
    					if (arg0.getCommand().getCommandName().equals("Cancella tutto")) {
    						cancellaTutto();
    					}
    					if (arg0.getCommand().getCommandName().equals("Cancella indirizzo")) {
    						cancellaIndirizzo(listaIndirizzi.getSelectedIndex());
    					}
    					if (arg0.getCommand().getCommandName().equals("Inserisci nuovo")) {
    						nuovoIndirizzo();
    					}
    				}
    			});
    		}
    		indirizzi.show();
    	}
    Per le funzioni grafiche non uso quelle di sistema canoniche ma una libreria chiamata LWUIT. Se non è chiaro qualcosa chiedete pure

  2. # ADS
    Google Adsense Circuito Adsense
    Data registrazione
    da sempre
    Messaggi
    molti
     
  3. #2
    L'avatar di Andy86
    Andy86 è in linea Senior Member CT
    Data registrazione
    18 January 2010
    Sesso
    Uomo
    Messaggi
    4,593
    vCash
    0
    Grazie
    2,476
    Ringraziato 769 volte in 662 post

    Predefinito Riferimento: problema "refresh" form in j2me

    Sarò diventato cieco , ma non vedo i metodi che chiami nell'"action perfomed".
    Ricorda che più codice posti, più è facile capire dove sta il problema.

    Se ho capito bene, quando cancelli, le voci cancellate non sparisco finché non usi un altro comando, giusto?

    LWUIT non la conosco, ma, da come l'hai descritto, sembra un semplice problema di "repaint();".

    Prova a metterlo nelle azioni che non effettuano modifiche...

    Lo sport è anche saper perdere, sii sportivo: RIPUDIA LA VIOLENZA NEGLI STADI!!!
    Lo spam ti invade e non vuoi cambiare e-mail? Chiedi come configurare i filtri.
    Aspetta!! Non formattare!!
    C'è (quasi) sempre un'altra soluzione, chiedila. Il mio PC.

  4. #3
    djdedo non è in linea Member CT
    Data registrazione
    7 January 2010
    Messaggi
    144
    vCash
    600
    Grazie
    63
    Ringraziato 49 volte in 32 post

    Predefinito Riferimento: problema "refresh" form in j2me

    Ciao, i metodi non li ho messi in quanto si occupano solo di modificare un recordstore, non credo siano importanti. Comunque appena ho il codice davanti lo posto lo stesso, non si sa mai
    Si io pure credo sia un problema di repaint(), ho provato ad inserirlo prima di
    Codice:
    indirizzi.show()
    non ricordo se il metodo si chiamasse paint() o repaint().
    Non ho capito dove dovrei avresti intenzione di inserire il metodo repaint()

  5. #4
    L'avatar di Andy86
    Andy86 è in linea Senior Member CT
    Data registrazione
    18 January 2010
    Sesso
    Uomo
    Messaggi
    4,593
    vCash
    0
    Grazie
    2,476
    Ringraziato 769 volte in 662 post

    Predefinito Riferimento: problema "refresh" form in j2me

    non ricordo se il metodo si chiamasse paint() o repaint().
    paint(Graphics g) contiene le istruzioni per il disegno e può essere riscritto per personalizzare l'aspetto del componente, chiamando super.paint(g) per non perdere il disegno originale.

    repaint() chiama in automatico il metodo paint(Graphics g) dopo aver cancellato lo schermo.

    paint() senza parametri non l'ho mai sentito.


    si occupano solo di modificare un recordstore
    Quindi tu aggiorni un recordstore in base alle azioni eseguite dall'utente e poi lo "stampi" in una list con il metodo listaProfili(), giusto?

    In altre parole: il metodo che hai postato si occupa di creare un list con i dati contenuti nel recorstore, giusto?

    Scusa, ma nel codice che hai postato non ci sono //commenti e alcune variabili non vedo di che tipo sono, quindi è un po' difficile capire.

    Se è così, richiami il listaProfili() ogni volta che aggiorni il recordStore?


    Non ho capito dove dovrei avresti intenzione di inserire il metodo repaint()
    Solo ora ricordo che le sottoclassi di screen si ridisegnano automaticamente e non hanno il metodo repaint() ...

    Per la cronaca, dovresti metterlo ogni volta che modifichi ciò che vuoi disegnare, cosicché venga disegnato nel nuovo modo.

    Lo sport è anche saper perdere, sii sportivo: RIPUDIA LA VIOLENZA NEGLI STADI!!!
    Lo spam ti invade e non vuoi cambiare e-mail? Chiedi come configurare i filtri.
    Aspetta!! Non formattare!!
    C'è (quasi) sempre un'altra soluzione, chiedila. Il mio PC.

  6. #5
    djdedo non è in linea Member CT
    Data registrazione
    7 January 2010
    Messaggi
    144
    vCash
    600
    Grazie
    63
    Ringraziato 49 volte in 32 post

    Predefinito Riferimento: problema "refresh" form in j2me

    Hai ragione per i commenti, purtroppo ho questo viziaccio di non commentare, a volte mi perdo pure da solo
    Comunque in linea generale listaProfili() si occupa appunto di visualizzare a video il contenuto di recordstore come ti dicevo, e viene richiamato in ogni funzione che si occupa della modifica di questo recordstore (aggiunta, modifica, cancellazione di un record oppure cancellazione totale). Per questo non ho utilizzato il repaint(). Infatti sia con l'aggiunta che con la modifica tutto funziona a meraviglia, stranamente solo con le funzioni di cancellazione non va. Pensavo magari fosse un bug dell'emulatore invece provando su un cellulare non andava lo stesso. Appena rientro a casa posto il codice delle varie funzioni per completezza

  7. #6
    djdedo non è in linea Member CT
    Data registrazione
    7 January 2010
    Messaggi
    144
    vCash
    600
    Grazie
    63
    Ringraziato 49 volte in 32 post

    Predefinito Riferimento: problema "refresh" form in j2me

    Come promesso posto un pò di altro codice
    Questo è il metodo che si occupa di permettere all'utente di inserire un nuovo dato nel recordstore (un indirizzo email)
    Codice:
    private void nuovoIndirizzo() {
    		Label indirizzoLabel = new Label("Inserisci nuovo indirizzo");
    		final TextArea indirizzo = new TextArea(null, 1, 30, TextArea.EMAILADDR);
    		indirizzo.setMaxSize(30);
    		Form addressForm = new Form("Nuovo indirizzo");
    		addressForm.addComponent(indirizzoLabel);
    		addressForm.addComponent(indirizzo);
    		addressForm.addCommand(new Command("Salva"));
    		addressForm.addCommand(new Command("Annulla"));
    		addressForm.addCommandListener(new ActionListener() {
    			
    			public void actionPerformed(ActionEvent arg0) {
    				// TODO Auto-generated method stub
    				if (arg0.getCommand().getCommandName().equals("Salva")) {
    					String indirizzoDaInserire = indirizzo.getText().trim();
    					int checkFrom = indirizzoDaInserire.indexOf("@");
    					if (checkFrom == -1) {
    						Dialog errMail = new Dialog("Errore");
    						Label messaggio = new Label("Il formato dell'indirizzo non è corretto");
    						errMail.addComponent(messaggio);
    						errMail.setTimeout(2000);
    						errMail.setDialogType(Dialog.TYPE_WARNING);
    						errMail.show();
    					} else {
    						config.salvaIndirizzo(indirizzoDaInserire);
    						listaProfili();
    					}
    				}
    				if (arg0.getCommand().getCommandName().equals("Annulla")) {
    					listaProfili();
    				}
    			}
    		});
    		addressForm.setTransitionOutAnimator(CommonTransitions.createSlide(CommonTransitions.SLIDE_HORIZONTAL, false, 200));
    		addressForm.show();
    	}
    con questo metodo e quello della modifica tutto funziona bene, mi viene visualizzata la lista con le modifiche effettuate (quindi sia aggiunta che modifica di un indirizzo)

    Questo invece si occupa di eliminare un determinato indirizzo
    Codice:
    private void cancellaIndirizzo(int id) {
    		final int canc = id + 2;
    		Dialog cancDialog = new Dialog("Attenzione");
    		Label messaggio = new Label("Sei sicuro di voler cancellare questo indirizzo email?");
    		cancDialog.addComponent(messaggio);
    		cancDialog.setDialogType(Dialog.TYPE_WARNING);
    		cancDialog.addCommand(new Command("Ok"));
    		cancDialog.addCommand(new Command("Annulla"));
    		cancDialog.addCommandListener(new ActionListener() {
    			
    			public void actionPerformed(ActionEvent arg0) {
    				// TODO Auto-generated method stub
    				if (arg0.getCommand().getCommandName().equals("Ok")) {
    					config.cancellaIndirizzo(canc);
    					if (isDefault(canc)) {
    						impostaDefault(-1);
    						from.setText("");
    					}
    					listaProfili();
    				}
    				if (arg0.getCommand().getCommandName().equals("Annulla")) {
    					listaProfili();
    				}
    			}
    		});
    		cancDialog.show();
    	}
    e questo di eliminare tutti gli indirizzi presenti nel recordstore
    Codice:
    private void cancellaTutto() {
    		Dialog cancTutto = new Dialog("Attenzione");
    		Label messaggio = new Label("Sei sicuro di voler cancellare tutti gli indirizzi email?");
    		cancTutto.addComponent(messaggio);
    		cancTutto.setDialogType(Dialog.TYPE_WARNING);
    		cancTutto.addCommand(new Command("Ok"));
    		cancTutto.addCommand(new Command("Annulla"));
    		cancTutto.addCommandListener(new ActionListener() {
    			
    			public void actionPerformed(ActionEvent arg0) {
    				// TODO Auto-generated method stub
    				if (arg0.getCommand().getCommandName().equals("Ok")) {
    					config.cancellaTuttiGliIndirizzi();
    					from.setText("");
    					listaProfili();
    				}
    				if (arg0.getCommand().getCommandName().equals("Annulla")) {
    					listaProfili();
    				}
    			}
    		});
    		cancTutto.show();
    	}
    Io sinceramente non riesco a capire

  8. #7
    djdedo non è in linea Member CT
    Data registrazione
    7 January 2010
    Messaggi
    144
    vCash
    600
    Grazie
    63
    Ringraziato 49 volte in 32 post

    Predefinito Riferimento: problema "refresh" form in j2me

    Ragazzi ho capito cos'era che mi faceva andare in palla la grafica. Il tutto era dovuto ai dialog delle procedure di cancellazione sia totale che di un elemento. Era l'unica cosa che i metodi di inserimento e modifica non avevano, al contrario loro avevano dei form. Ho provato a togliere i dialog ed infatti tutto funzionava a meraviglia. Ora ho sostituito i dialog con dei form e visualizzo quelli e tutto funziona come dovrebbe

Segnalibri

Regole di scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •