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

    Problema matrice di JTextField

    ho un problema con questo pezzo di codice:
    Codice PHP:
            if(e.getSource() == risolvi){                                                                           
                for(
    int i 09i++)
                    for(
    int j 09j++)
                        if(
    matrix[i][j].getText() != ""){
                            
    sceltaSoluzioni.setSelectedIndex(0);
                        }
            } 
    fa parte del metodo actionPerformed di una mia interfaccia; matrix è una matrice di text field che visualizzo sulla gui e questo pezzo di codice dovrebbe fare in modo che se la matrice viene modificata, una comboBox deve essere impostata allo stato iniziale. Naturalmente un text field non modificato ritorna una stringa vuota, quindi controllando che la stringa sia diversa da "" dovrei sapere se è stato modificato. Il problema è: anche se non modifico niente(quindi non dovrebbe entrare nell'if), la combo box si reimposta alla prima selezione... perchè??

    EDIT: il tutto alla pressione del bottone risolvi naturalmente

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    stai verificando String, conviene usare equals... oppure nel tuo caso, puoi trimmare e verificare che la lunghezza non sia 0 (eviti eventuali spazi).
    codice:
    if(!matrix[i][j].getText().equasl("")){
    oppure
    codice:
    if(matrix[i][j].getText().trim().length() != 0){
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    347
    grazie! ho provato la seconda che è più completa e funziona... però strano che la mia soluzione non funzioni...
    EDIT: dato che ci sono chiedo direttamente qui un'altra cosa: io ho questa matrice di text field e dovrei eseguire una certa azione non appena viene scritto qualcosa in uno di questi. Come posso fare? Non posso catturare l'azione eseguita dall'actionPerformed vero?

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Potresti registrare un ascoltatore sui tuoi JTextField. In verità si passa dal raccattare il documento associato (getDocument()) e su questo si ci appiccica un DocumentListener
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    347
    potresti spiegarti meglio? non ho mai fatto niente del genere... e di solito attacco il listener direttamente al text field e non al suo document

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    codice:
    import javax.swing.event.*;
    
    
    public class tuaClasse extends tuaAltraClasse implements unaOpiùInterfacce {
      ...
      ...
      private class MyDocumentListener implements DocumentListener {
            
            public void insertUpdate (DocumentEvent de) {
                System.out.println("E' cambiato"); 
            }
            
            public void changedUpdate (DocumentEvent de) {                        
            }        
            
            public void removeUpdate (DocumentEvent de) {}
            
        } 
    
       ...
       ...
       tuoTextField.getDocument().addDocumentListener(new MyDocumentListener());
       ...
    }
    ovviamente implementerai in maniera degna gli eventi di tuo interesse.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    347
    ah grazie, comincio a capire ho un paio di domande: qual'è la differenza tra insertUpdate e change? e removeUpdate a che azione corrisponde?(cioè cosa potrebbe essere rimosso?) e infine: come ho detto i text field li ho in una matrice(sono parecchi), quindi basta solo che con un ciclo agganci un DocumentListener al documento di ogni text field della matrice?

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Originariamente inviato da John360
    però strano che la mia soluzione non funzioni...
    Non è affatto strano. Gli oggetti non si confrontano usando i normali operatori di confronto, ma usando il metodo equals().

    Il confronto fra due oggetti usando l'operatore == (o, per il diverso, l'operatore != ) viene effettuato sugli indirizzi dei due oggetti, non sul loro contenuto. Due oggetti con lo stesso contenuto possono avere (e, in generale, hanno) indirizzi differenti:

    codice:
    String s1 = new String("Pippo");
    String s2 = new String("Pippo");
    Questi due oggetti rappresentano la stessa stringa (hanno lo stesso contenuto), ma sono due oggetti distinti e, di conseguena, hanno due indirizzi distinti. Il confronto usando l'operatore == restituirà false.

    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

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Originariamente inviato da John360
    ah grazie, comincio a capire ho un paio di domande: qual'è la differenza tra insertUpdate e change? e removeUpdate a che azione corrisponde?(cioè cosa potrebbe essere rimosso?) e infine: come ho detto i text field li ho in una matrice(sono parecchi), quindi basta solo che con un ciclo agganci un DocumentListener al documento di ogni text field della matrice?
    Ti preannuncio già che changedUpdate a te non serve (non viene sollevato dai componenti di testo di base, tipo JTextField), comunque visto che il forum non è un corso di programmazione, ti rimando alla documentazione ufficiale.

    http://docs.oracle.com/javase/tutori...tlistener.html

    Per quanto riguarda dove inserire il listener: dove crei i tuoi jtextfield: mi pare di capire che comunque devi catturare l'evento di modifica su qualsiasi ed ognuno dei tuoi JTextField e che l'azione che ne consegue sia indipendente dal JTextField che è stato modificato (anche se anche in questo caso puoi sempre risalire al componente originale e verificare solo la parte che ti interessa - per esempio il quadrato 3 x 3 o la riga, o la colonna contenente il JTextField modificato).
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

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.