MFormFormatter를 JFormattedTextField에 적용한 다음 해당 텍스트 필드를 JTable의 열로 설정하면 어디서나 나타납니다. . 그러나 셀에서 사용자가 클릭하는 위치에 관계없이 셀의 왼쪽 가장 자리에 캐럿을 표시하려고합니다. 나는 setCaretPositionMethod를 시도했지만 아무것도하지 않았다. 내 생각 엔 사용자가 클릭하는 곳으로 이동하도록 캐럿을 강제하는 일종의 테이블 수신기가있을 것입니다.이 수신기가 무엇인지 알았다면 기능을 무시할 수 있습니다.MaskFormatter가 적용된 후 왼쪽에 JTable 셀이 나타나게하는 방법
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 -used-on? noredirect = 1 # comment67139496_39926784) – user217339