|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Oct 2007
Messaggi: 69
|
[JAVA] JTable e format del testo in ingresso
Ciao ragazzi,
le ho davvero provate tutte, ma non capisco proprio come fare a validare l'input dell'utente su una cella di JTable. Sulla documentazione ufficiale (http://java.sun.com/docs/books/tuto...ents/table.html) c'è un esempio, ma si utilizza un array bidimensionale per caricare i dati che verrano visualizzati in seguito. Io invece utilizzo semplicemente un AbstractTableModel. In particolare, vorrei che in una colonna vengano inseriti soltanto dati numerici nell'intervallo 0-100, mentre in un'altra dati double con solo due cifre decimali. Ho trovato in rete questo codice: Codice PHP:
Grazie fin d'ora... |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
I metodi che ti interessano sono stopCellEditing e cancelCellEditing di TableCellEditor.
La faccenda è in verità piuttosto semplice. Faccio una sintesi. Quando l'editor entra in scena prendi il "value" di getTableCellEditorComponent, lo mostri nel componente per le modifiche e allo stesso tempo lo metti da parte. Quando l'utente ha finito di modificare la cella viene invocato il metodo stopCellEditing. Se il contenuto del componente usato dell'editor è valido, in stopCellEditing: 1. fai in modo che il valore restituito dal metodo getCellEditorValue corrisponda al contenuto del componente usato dall'editor 2. spari un "editing stopped" 3. restituisci true altrimenti restituisce false. Se la tabella rileva un evento - di solito la perdita del focus - che impone un'interruzione incondizionata delle modifiche, è invocato il metodo cancelCellEditing e qui: 1. fai in modo che il valore restituito dal metodo getCellEditorValue corrisponda al valore che la cella aveva prima delle modifiche 2. spari un "editing canceled" Ed è fatta. Se per le modifiche usi un JTextField puoi applicare in tutto o in parte le temibili espressioni regolari. L'editor che segue accetta al massimo 3 cifre. Codice:
class DoubleCellEditor extends AbstractCellEditor implements TableCellEditor {
private Object originalValue, editorValue;
private JTextField editorComponent = new JTextField();
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
originalValue = editorValue = value;
editorComponent.setText(originalValue == null ? "" : String.valueOf(originalValue));
return editorComponent;
}
public Object getCellEditorValue() {
return editorValue;
}
public boolean stopCellEditing() {
if(checkEditedValue()) {
editorValue = editorComponent.getText();
fireEditingStopped();
return true;
} else {
return false;
}
}
public void cancelCellEditing() {
editorValue = originalValue;
fireEditingCanceled();
}
private boolean checkEditedValue() {
String value = editorComponent.getText();
boolean answer = value.length() <= 3;
for(int i = 0; answer && i < value.length(); i++) {
int codePoint = Character.codePointAt(value, i);
answer = Character.isDigit(codePoint);
}
return answer;
}
}
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Oct 2007
Messaggi: 69
|
PGI, grazie! Come al solito sei un grande.... Adesso vedrò di costruirne uno che mi permetta di visualizzare un double con la seconda cifra decimale, in quanto se in una cella inserisco, ad esempio, 15, il valore che verrà visualizzato sarà soltanto 15.0, mentre io vorrei far comparire 15.00! Beh, sono certo che verrò a chiedere di nuovo aiuto... Grazie ancora!
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:49.



















