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;
}
答案 0 :(得分:3)
在TableCellEditor的文本字段中,将DocumentListener
添加到Document
的{{1}}。在DocumentListener中,添加应附加/修改文本字段文本的方法。
如果我没记错的话,你需要在JTextField
内执行修改,因为我认为JTextField在事件触发期间阻止了文本修改(实际上,它是可以防止这种情况的文档)。