AlanRS
Novembro 8, 2012, 6:14pm
#1
Boa tarde galera…
tenho um JDateChooser dentro de uma célula na minha JTable… porém ao editar a celula o foco é passado para o componente JDateChooser fazendo o mesmo aparecer na tabela…
Como eu posso fazer para que ao inves de passar o foco para o componente em si eu poder passar o foco para o field do JDateChooser fazendo com que o usuário ao teclar um numero ele consiga ja ir escrevendo a data ???
desde ja grato pela ajuda
AlanRS
Novembro 8, 2012, 6:37pm
#2
Esta é minha classe Editor para a tabela
public class ParcelaEditarCelula extends AbstractCellEditor implements TableCellEditor{
private JTextField componente = new JTextField();
private JTextField componenteMoeda = new JTextField();
private JDateChooser dateChooser = new JDateChooser("dd/MM/yyyy", "##/##/#####", '_');
private int coluna;
String retorno;
public Component getTableCellEditorComponent(JTable table, Object value,
boolean isSelected, int row, int column ) {
coluna = column;
if (value == null){
componente.setText("");
if (column == 5){
componenteMoeda.setDocument(new LimitadorMoeda());
componenteMoeda.setText("");
}
} else {
componente.setText(value.toString());
if (column == 5){
componenteMoeda.setDocument(new LimitadorMoeda());
componenteMoeda.setText(value.toString().replaceAll("\\.", "").replaceAll(",", "."));
}
}
if (column == 0 || column == 1 || column == 2 || column == 4) {
// somente para centralizar
componente.setHorizontalAlignment(JLabel.CENTER);
} else if (column == 3) {
componente.setHorizontalAlignment(JLabel.LEFT);
} else if (column == 5) {
componenteMoeda.setHorizontalAlignment(JLabel.RIGHT);
}
if (column == 2){
DateTime dt = new DateTime(value.toString().substring(0, 10));
dateChooser.setDate(dt.toDate());
dateChooser.transferFocus();
((JTextField)dateChooser.getDateEditor()).selectAll();
return dateChooser;
} else if (column == 5){
componenteMoeda.selectAll();
return componenteMoeda;
} else {
componente.selectAll();
// System.out.println("Componente: "+componente.getParent().getParent().getParent().getParent());
return componente;
}
}
public Object getCellEditorValue() {
if (coluna == 2){
Date data = dateChooser.getDate();
return new SimpleDateFormat("yyyy-MM-dd").format(data);
} else {
if (!"".equals(componenteMoeda.getText())){
retorno = componenteMoeda.getText().replaceAll("\\.", "").replaceAll(",", ".");
componenteMoeda = new JTextField();
componenteMoeda.setDocument(new LimitadorMoeda());
} else {
retorno = componente.getText();
componente = new JTextField();
}
return retorno;
}
}
@Override
public boolean isCellEditable(EventObject e) {
if (e instanceof MouseEvent)
return false;
return super.isCellEditable(e);
}
}
e são essas linhas que estou tentando passar o foco para o jdatechooser:
dateChooser.transferFocus();
((JTextField)dateChooser.getDateEditor()).selectAll();
é esse mesmo o caminho??
tem alguma outra forma de fazer isso?
grato
Amigo, você conseguiu resolver o problema?
Em caso afirmativo, peço que poste aqui a solução
Abraço!