После применения MaskFormatter к JFormattedTextField, а затем установки этого текстового поля в столбец в моем JTable, курсор начал появляться везде, где я нажимаю. Однако я хочу, чтобы каретка отображалась в самой левой позиции ячейки, независимо от того, где в ячейке щелкает пользователь. Я попробовал метод setCaretPositionMethod, но ничего не сделал. Я предполагаю, что есть какой-то прослушиватель таблицы, который заставляет курсор перемещаться туда, где пользователь щелкает, если бы я знал, что это за прослушиватель, я мог бы переопределить эту функцию.
SSCCE:
public class TableExample extends JFrame {
public TableExample() {
add(makeTable());
}
private JTable makeTable() {
Object[][] tableData = {{"","a","b",""}, {"","c","d",""}};
String[] columns = {"column1", "column2", "column3", "dobColumn"};
JTable table = new JTable(tableData, columns);
////DOB column formats to dd/mm/yy
TableColumn dobColumn = table.getColumnModel().getColumn(3);
DateFormat df = new SimpleDateFormat("dd/mm/yy");
JFormattedTextField tf = new JFormattedTextField(df);
tf.setColumns(8);
try {
MaskFormatter dobMask = new MaskFormatter("##/##/##");
dobMask.setPlaceholderCharacter('0');
dobMask.install(tf);
} catch (ParseException ex) {
Logger.getLogger(TableExample.class.getName()).log(Level.SEVERE, null, ex);
}
////Does nothing
tf.setCaretPoisition(0);
dobColumn.setCellEditor(new DefaultCellEditor(tf));
return table;
}
public static void main(String[] args) {
JFrame frame = new TableExample();
frame.setSize( 300, 300 );
frame.setVisible(true);
}
}