public
class CampoHoras
extends JTextField
{
/**
* This method initializes
*
*/
private
class Pt
extends PlainDocument
{
public
void insertString
(
int offset,
String str,
AttributeSet as
)
throws BadLocationException
{
super.insertString(offset, textoValidado(str, offset), as);
}
private
String textoValidado
(
String str,
int cursor
)
{
String
texto = CampoHoras.this.getText();
//
// o novo texto depois de aplicada a inserção
//
String
novoTexto = (texto.substring(0, cursor) + str + texto.substring(cursor, texto.length()));
//
// no primeiro digito tem que ser 0,1 ou 2
//
if (
novoTexto.length() == 1
&&
novoTexto.matches("[012]")
)
{
return str;
}
//
// no 2º digito no caso de o 1º ser 2 o 2º
// tem que ser 0,1,2 ou 3
if (
novoTexto.length() == 2
&&
novoTexto.matches("[2][0123]")
)
{
//
// alem de inserir o que o o uilizador prupôs
// insere o caracter divisor de horas
return str + ":";
}
//
// ainda no 2º digito no caso de ser 1 ou 0
// o 2º digito pode ser qualquer um
if (
novoTexto.length() == 2
&&
novoTexto.matches("[01]\\d")
)
{
//
// alem de inserir o que o o uilizador prupôs
// insere o caracter divisor de horas
return str + ":";
}
//
// o 4º digito tem que ser entre 0 e 5
//
if (
novoTexto.length() == 4
&&
novoTexto.matches("[012]\\d:[012345]")
)
{
return str;
}
//
// o 5º digito tem que ser um numero quaquer
//
if (
novoTexto.length() == 5
&&
novoTexto.matches("[012]\\d:[012345]\\d")
)
{
return str;
}
return null;
}
}
public CampoHoras() {
super();
initialize();
}
private void initialize() {
Pt pt = new Pt();
this.setDocument(pt);
}