2011-06-12 7 views
7

Tengo clase Probability. 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?Editor de células de probabilidad

* Diferencia de doble editor: se debería permitir sólo números en el rango 0..100

+1

Primero, ¿podría explicar qué es un "editor doble"? –

+1

@Hovercraft Full Of Eels, es 'TableCellEditor' que permite el ingreso de dobles en las celdas de jtable –

+0

lo obtuve. Interesante pregunta, gracias. –

Respuesta

5

¿Qué tal un JFormattedTextField con AbstractFormatter haciendo la conversión, y un DocumentFilter para rechazar cualquier cosa que no sea un valor porcentual válido?

Aquí es un ejemplo DocumentFilter (no probado, de la lectura de 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); 
    } 
} 

Usted quiere anular remove() y replace de manera similar.

(supongo que podría haber una implementación más eficiente, pero esto será lo suficientemente rápido para la velocidad de escritura de la mayoría de usuarios, supongo.)

Este filtro se devolvería a su método de aplicación AbstractFormatter getDocumentFilter.

+0

+1 ['DecEditor'] (http://stackoverflow.com/questions/2511270/advice-welcomed-on-creating-my-own-swing-component/2511415#2511415) es un ejemplo. – trashgod

+0

Muchas gracias. Funciona exactamente como deseo para editar valores válidos. Pero no tuve idea con 'DocumentFilter'. ¿Cómo podría permitir ingresar números grandes de esta manera? –

+0

@Stas: agregué un ejemplo a la respuesta. –

5

..numbers en el rango 0..100

Utilice un JSpinner como el TableCellEditor.

+0

Gracias. Pero desafortunadamente no creo que sea útil en mi caso. No son enteros y los usuarios ingresarán valores manualmente escribiendo números. –

+0

Estoy realmente confundido, ¿dónde está tu ojo de azul a púrpura, +1 para un buen consejo sin efectos secundarios – mKorbel

+0

@mKorbel: "¿dónde está tu ojo de azul a púrpura?" Me estaba cansando de esa imagen. Después de jugar con [recorte de texto] (http://stackoverflow.com/questions/6295084/cut-out-image-in-shape-of-text/6296381#6296381) el otro día, pensé en intentar y combinar algunas letras en una sola 'Forma'. Un par de 'Área's (y minutos) más tarde, y tuve la nueva imagen. (se inclina la cabeza) Aún no estoy seguro de si me gusta. ;) –

Cuestiones relacionadas