Pessoal, na minha JTable tenho a coluna “Duração” (em que o usuário vai inserir a duração em mm:ss de um evento) com o seguinte cell editor:
public class ColunaDuracao extends AbstractCellEditor implements TableCellEditor {
JComponent component;
@Override
public Component getTableCellEditorComponent(JTable table, Object value,
boolean isSelected, int rowIndex, int vColIndex) {
MaskFormatter duracaoFormat = null;
try {
duracaoFormat = new MaskFormatter("##:##");
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
((JFormattedTextField)component).setText("0"); //quando for digitar na célula, aparece um "0"
((JFormattedTextField)component).setCaretPosition(1); //começa a digitar depois do "0"
}
});
} catch (ParseException ex) {
Logger.getLogger(ColunaDuracao.class.getName()).log(Level.SEVERE, null, ex);
}
component = new JFormattedTextField(duracaoFormat);
((JFormattedTextField)component).setText((String)value);
return component;
}
@Override
public Object getCellEditorValue() {
return ((JFormattedTextField)component).getText();
}
}
Minha dúvida é a seguinte:
Com o código das linhas 12 a 18, se o usuário for até a coluna “Duração” usando as teclas direcionais ou TAB e começar a digitar nela, o zero é inserido normalmente, porém, o número que ele teclou não é; é como se inserir o primeiro zero desse um evt.consume() na tecla. Depois disso, se pressionar qualquer tecla numérica novamente, o valor é inserido na frente do primeiro zero.
Se eu clicar diretamente na célula da coluna “Duração”, aí sim, o primeiro zero aparece, o cursor piscando depois do zero e recebe qualquer valor numérico.
Esse primeiro zero é pra que o usuário não precise digitá-lo, mas há ocasiões em que ele deverá ser apagado, por isso não posso colocálo na máscara.
Quero que quando for digitar na célula (sem clicar nela antes), o zero seja inserido e o valor digitado na frente do zero, sem ter que teclar 2 vezes. Tentei até agora de várias maneiras que não deram o resultado desejado. Tentei fazer com que o “cursor aparecesse” quando pressionasse alguma tecla numa célula da coluna “Duração” mas também não consegui.
Se alguém tiver uma ideia que possa me ajudar, me diga por favor. Vlw!