Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Tascabile e con Android: BOOX Go 6 Gen II è diverso da tutti gli altri e-reader
Tascabile e con Android: BOOX Go 6 Gen II è diverso da tutti gli altri e-reader
BOOX Go 6 Gen II porta per la prima volta il supporto allo stilo su un e-reader da 6 pollici, affiancando 3 GB di RAM al collaudato Snapdragon 665 e un design rivisto con scocca posteriore a costolature. Su carta la proposta è interessante, ma Android 11 fuori supporto, l'assenza di un alloggiamento per il pennino e un'autonomia ridotta rispetto agli e-reader tradizionali sono i compromessi da accettare
Recensione Lenovo Idea Tab Plus: il tablet da 12 pollici che costa meno di 300 euro
Recensione Lenovo Idea Tab Plus: il tablet da 12 pollici che costa meno di 300 euro
Lenovo Idea Tab Plus prova a portare un display da 12,1 pollici 2.5K, quattro speaker Dolby Atmos e una batteria da 10.200 mAh sotto la soglia psicologica dei 300 euro, penna inclusa. Lo abbiamo usato per oltre una settimana per capire dove l'azienda ha tagliato e dove invece ha tenuto il punto
Oltre il contante e le crypto: tutto sull'Euro Digitale e la nuova sovranità monetaria europea
Oltre il contante e le crypto: tutto sull'Euro Digitale e la nuova sovranità monetaria europea
L'euro digitale è una valuta fiat che entrerà in vigore nei prossimi anni. L'obiettivo principale è quello di ridurre la dipendenza dalle piattaforme di pagamento digitali statunitensi e offrire ai cittadini un modo semplice per trasferire denaro. Anche offline, anche in maniera (pseudo)anonima
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 12-02-2010, 11:39   #1
grifis78
Member
 
L'Avatar di grifis78
 
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:
JTable table = new JTable();
        
        
// Add some data...

int vColIndex 0;
        
TableColumn col table.getColumnModel().getColumn(vColIndex);
        
col.setCellEditor(new MyTableCellEditor());

public class 
MyTableCellEditor extends AbstractCellEditor implements TableCellEditor {
            
// This is the component that will handle the editing of the cell value
            
JComponent component = new JTextField();
            
// This method is called when a cell value is edited by the user.
            
public Component getTableCellEditorComponent(JTable tableObject valueboolean isSelectedint rowIndexint vColIndex) {
                
// 'value' is value contained in the cell located at (rowIndex, vColIndex)
                
if (isSelected) { // cell (and perhaps other cells) are selected
                    
                
}
                
// Configure the component with the specified value
                
((JTextField)component).setText((String)value);  
                
// Return the configured component return component;
               
return component;
            }
            
            
// This method is called when editing is completed.
            // It must return the new value to be stored in the cell.
            
public Object getCellEditorValue() {
                return ((
JTextField)component).getText();
            }
        } 
Ad esempio, se volessi validare un numero in ingresso che non debba contenere più di 3 cifre?

Grazie fin d'ora...
grifis78 è offline   Rispondi citando il messaggio o parte di esso
Old 12-02-2010, 14:27   #2
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
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!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 13-02-2010, 08:50   #3
grifis78
Member
 
L'Avatar di grifis78
 
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!
grifis78 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Tascabile e con Android: BOOX Go 6 Gen II è diverso da tutti gli altri e-reader Tascabile e con Android: BOOX Go 6 Gen II &egrav...
Recensione Lenovo Idea Tab Plus: il tablet da 12 pollici che costa meno di 300 euro Recensione Lenovo Idea Tab Plus: il tablet da 12...
Oltre il contante e le crypto: tutto sull'Euro Digitale e la nuova sovranità monetaria europea Oltre il contante e le crypto: tutto sull'Euro D...
Recensione HONOR Magic V6: spessore record e super batteria. È lui il fold da battere? Recensione HONOR Magic V6: spessore record e sup...
Redmi Pad 2 9.7: ampio display, economico e peso contenuto, ma qualche limite nelle prestazioni Redmi Pad 2 9.7: ampio display, economico e peso...
Piccolo è bello: Cisco presenta A...
Z.AI avvia un data center da 1 gigawatt....
Microsoft e Mistral annunciano un accord...
Grazie al Very Large Telescope potrebbe ...
Sony FX5: RAW interno X-OCN e Open Gate ...
AMD e Anthropic, affare fatto: 5 miliard...
Cyber Arena Tour 2026, WINDTRE BUSINESS ...
Wistron ha aperto il primo stabilimento ...
"Così è facile perder...
Peak Design ripensa la staffa a L: il tr...
Samsung: ufficiale la serie Galaxy Z Fol...
Galaxy Watch Ultra2 e Watch9 ufficiali: ...
Un razzo spaziale Falcon 9 ha lanciato l...
Microlino: dal rischio di fallimento all...
SpaceX, uno stadio di Falcon 9 si schian...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 05:23.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v