После применения MaskFormatter на JFormattedTextField, затем, установив это текстовое поле в столбец в JTable, карет начал появляться везде, где я нажимаю , Однако я хочу, чтобы каретка отображалась в левой части ячейки, независимо от того, где в ячейке пользователь нажимает. Я попробовал setCaretPositionMethod, но ничего не сделал. Я предполагаю, что есть какой-то прослушиватель таблицы, который заставляет каретку перемещаться туда, где пользователь нажимает, если бы я знал, что это за слушатель, я мог бы переопределить эту функцию.Как заставить Caret в JTable-ячейке появиться слева после того, как к нему был применен MaskFormatter
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);
}
}
Спасибо, добавив фокус слушателя сделал именно то, что я хотел. Также по какой-то причине применение маски к столбцу в JTable будет применяться только к первой ячейке, которую я нажимаю в столбце. После этого маска уничтожается, я исправил эту проблему, воссоздав маску и прослушиватель фокуса внутри метода tableChanged(). Я задал вопрос о проблеме [здесь] (http://stackoverflow.com/questions/39926784/applying-a-maskformatter-to-a-column-in-my-jtable-but-the-mask-is-only -подержанные-на? noredirect = 1 # comment67139496_39926784) – user217339