example - setmodel java
Editor de celda de probabilidad (2)
Tengo Probability
clase. Quiero usar un renderizador personalizado para eso (ya hecho) y el editor como doble. Pero ni siquiera puedo encontrar el editor doble (solo el Número), así que realmente no tengo idea de cómo debo implementarlo. La pregunta es: ¿cómo debería implementarlo?
* diferencia del editor doble: debería permitir solo números en el rango 0..100
..numera el rango 0..100
Use un JSpinner
como TableCellEditor
.
¿Qué pasa con un JFormattedTextField
con AbstractFormatter haciendo la conversión, y un DocumentFilter para rechazar cualquier cosa que no sea un valor porcentual válido?
Aquí hay un ejemplo de DocumentFilter (no probado, de leer la documentación):
class PercentageFilter extends DocumentFilter {
insertString(FilterBypass bp, int offset, String adding, AttributeSet attrs) {
Document doc = bp.getDocument();
String text = doc.getText(0, offset) + adding + doc.getText(offset, doc.getLength()-offset);
try {
double d = Double.parseDouble(text);
if(d < 0 || 100 < d) {
// to big or too small number
return;
}
}
catch(NumberFormatException ex) {
// invalid number, do nothing.
return;
}
// if we come to this point, the entered number
// is a valid value => really insert it into the document.
bp.insertString(offset, adding, attrs);
}
}
Desearía anular remove()
y replace
manera similar.
(Supongo que podría haber una implementación más eficiente, pero supongo que será lo suficientemente rápida para la velocidad de tipeo de la mayoría de los usuarios).
Este filtro sería devuelto por el método getDocumentFilter
de su implementación AbstractFormatter.