JTableのtextFieldはテキストを自動的に追加できますか?(javaScriptなし)
ユーザーが2桁の数字を入力したとき、またはそのフィールドからフォーカスを失ったときに、「時間」にコロン(:)を自動追加するのと同じです。
いくつかのinvokeLater()、KeyListener()、editCellAt()を使用してみました。フィールドに入ったとき(ダブルクリックしてF2)にのみ機能しますが、クリックして入力しただけでは機能しません。
private JTable getTblMaster() {
if (tblMasterData == null) {
tblMasterData = new JTable() {
public boolean editCellAt(int row, int column, EventObject e){
boolean result = super.editCellAt(row, column, e);
final Component editor = getEditorComponent();
if (editor == null || !(editor instanceof JTextComponent)) {
return result;
}
/* if(column == 2){
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
if(((JTextComponent) editor).getText().length() == 2){
((JTextComponent) editor).setText(((JTextComponent) editor).getText() + ":");
}
}
});
}
*/
return result;
}
public TableCellEditor getCellEditor(int row, int column) {
TableColumn tableColumn = getColumnModel()
.getColumn(column);
TableCellEditor editor = tableColumn.getCellEditor();
try {
if (editor == null) {
final JTextField text = new JTextField();
/*
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
if(text.getText().length() == 2){
text.setText(text.getText() + ":");
}
}
});
text.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyPressed(KeyEvent e){
if(text.getText().length() == 2){
text.setText(text.getText() + ":");
}
}
public void keyReleased(KeyEvent e){
if(text.getText().length() == 2){
text.setText(text.getText() + ":");
}
}
});
*/
editor = new DefaultCellEditor(text);
;
return editor;
}
} catch (Exception e) {
LogWriter.error(e);
}
return editor;
}
};
}
return tblMasterData;
}