Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di cutoff
    Registrato dal
    Jan 2006
    Messaggi
    22

    [JAVA -SWING]- JTable - Problema clik e Doppio click

    Ciao,

    ho una JTable con celle editabili.Ora però se faccio "doppio click" su una cella,in questa mi compare giustamente il cursore (|)e posso
    inserire tranquillamente un valore;se invece faccio solo il "click",
    la cella selezionata diviene ovviamente editabile e ci posso inserire il valore, solo che non mi compare il cursore(|).Questo fatto mi comporta che il valore inserito da me,non viene "preso" dalla tabella,infatti se controllo con il metodo getValueAT(..),o con il metodo getDataVector(..), il valore non è presente!!, anche se a video mi viene mostrato.E' come se cliccando una sola volta su una cella, "perdessi" il riferimento ad essa, pur rimanendo il focus
    attivo sulla stessa!!Spero di essermi spiegato.

    Cosa ne pensate?

    Grazie

    Nicola

  2. #2

    Re: [JAVA -SWING]- JTable - Problema clik e Doppio click

    Originariamente inviato da cutoff
    Ciao,

    ho una JTable con celle editabili.Ora però se faccio "doppio click" su una cella,in questa mi compare giustamente il cursore (|)e posso
    inserire tranquillamente un valore;se invece faccio solo il "click",
    la cella selezionata diviene ovviamente editabile e ci posso inserire il valore, solo che non mi compare il cursore(|).Questo fatto mi comporta che il valore inserito da me,non viene "preso" dalla tabella,infatti se controllo con il metodo getValueAT(..),o con il metodo getDataVector(..), il valore non è presente!!, anche se a video mi viene mostrato.E' come se cliccando una sola volta su una cella, "perdessi" il riferimento ad essa, pur rimanendo il focus
    attivo sulla stessa!!Spero di essermi spiegato.

    Cosa ne pensate?

    Grazie

    Nicola
    Non ti spieghi la cosa perchè non sai come funziona la JTable. Ad ogni cella dell JTable (in realtà ad ogni colonna di celle) è associato un Renderer ed un Editor. Sono entrambi normal componenti swing,il renderer è responsabile della visualizzazione della cella "a riposo". l'editor della visualizzazione in fase di editing di un valore. Ora l'editor per default è un JTextField e si attiva al doppio click sulla cella, quando fai doppio click la JTable disegna la JtextField sopra la cella dandoti l'impressione di editarla ma non è così, quello su cui stai agendo è l'editor. Quando premi invio o l'editor perde il focus effettua una opzioanle validazione del tipo di dto inserito e poi lo passa al Model della JTable in modo che essa lo visulaizzi nella cella corrispondente.Questo comportamneto implica che finchè la cella non perde il focus o non premi invio, i dati non sono di fatto stati "presi" come dici tu, dalla Jtable.Ciao
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  3. #3
    Utente di HTML.it L'avatar di cutoff
    Registrato dal
    Jan 2006
    Messaggi
    22
    Ti ringrazio per la tua spiegazione molto chiara e precisa
    Alla luce di ciò, come pensi potrei risolvere il problema?

    Grazie ancora

    Nicola

  4. #4
    Originariamente inviato da cutoff
    Ti ringrazio per la tua spiegazione molto chiara e precisa
    Alla luce di ciò, come pensi potrei risolvere il problema?

    Grazie ancora

    Nicola
    Ma ciò che ti disturba è il fatto che finchè la cella non perde il focus il dato non è memorizzato o il fatto che per renderla editabile ci vuole il doppio click e non il clik? Soprattutto nel primo caso, cambiare la sistuazione non è semplice, probabilmente si può fare sovrascrivendo i metodi del celleditor e facendo in modo che il committ del dato avvenga per ogni carattere inserito.Tuttavia non è banale, non è detto che sia fattibile e soprattutto io non ho il tempo di trovare una soluzione, ci devi sbattere un po la testa tu, la strada te l'ho indicata. Ciao ciao
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  5. #5
    Utente di HTML.it L'avatar di cutoff
    Registrato dal
    Jan 2006
    Messaggi
    22
    Si, a me dava fastidio il il fatto che finchè la cella non perdeva il focus il dato non era memorizzato ed ho scoperto che in realtà era un bug :
    http://bugs.sun.com/bugdatabase/view...bug_id=6242668


    In pratica basta mettere questa riga di codice :

    table.putClientProperty("terminateEditOnFocusLost" , Boolean.TRUE);

    per fare in modo che, quando la cella editata perde il focus, la tabella "cattura" il valore.

    Grazie cmq per l'attenzione e buon lavoro anche a te.

    Nicola

  6. #6
    Originariamente inviato da cutoff
    Si, a me dava fastidio il il fatto che finchè la cella non perdeva il focus il dato non era memorizzato ed ho scoperto che in realtà era un bug :
    http://bugs.sun.com/bugdatabase/view...bug_id=6242668


    In pratica basta mettere questa riga di codice :

    table.putClientProperty("terminateEditOnFocusLost" , Boolean.TRUE);

    per fare in modo che, quando la cella editata perde il focus, la tabella "cattura" il valore.

    Grazie cmq per l'attenzione e buon lavoro anche a te.

    Nicola
    Emmmh...perdonami ma non ho capito. Qual'è il vantaggio di usare questa riga di codice? Sia che la usi sia che non la usi la JTable memorizza il dato solo DOPO la perdita del focus da parte dell'editor.
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  7. #7
    Utente di HTML.it L'avatar di cutoff
    Registrato dal
    Jan 2006
    Messaggi
    22
    Probabilmente,ma forse mi sbaglio,il problema è relativo solo alla
    JSDK 1.4.1_02 su XP o 2000 in cui probabilmente bisogna "forzare" questo comportamento.In fondo all'articolo c'è scritto:

    By default, JTable does not commit changes when it loses focus. To change this behavior, use:

    table.putClientProperty("terminateEditOnFocusLost" , Boolean.TRUE);


    Di più non sò dirti, sta' di fatto che con questa riga di codice,
    sono riuscito a risolvere il problema.

    Nicola

  8. #8
    Originariamente inviato da cutoff
    Probabilmente,ma forse mi sbaglio,il problema è relativo solo alla
    JSDK 1.4.1_02 su XP o 2000 in cui probabilmente bisogna "forzare" questo comportamento.In fondo all'articolo c'è scritto:

    By default, JTable does not commit changes when it loses focus. To change this behavior, use:

    table.putClientProperty("terminateEditOnFocusLost" , Boolean.TRUE);


    Di più non sò dirti, sta' di fatto che con questa riga di codice,
    sono riuscito a risolvere il problema.

    Nicola
    Capisco.In effetti io uso la 1.5 e non ho rilevato comportamenti anomali. Ciao
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

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 © 2024 vBulletin Solutions, Inc. All rights reserved.