Java 在JTable中自动添加一些文本
JTable中的textField能否自动添加一些文本?(不含javaScript) 就像当用户键入数字2或从该字段失去焦点时,自动为“时间”添加冒号(:) 我尝试使用一些invokeLater()、KeyListener()和editCellAt(),它只在我进入字段(双击并键入F2)时起作用,但如果我只单击并键入,则不起作用Java 在JTable中自动添加一些文本,java,swing,jtable,jtextfield,tablecelleditor,Java,Swing,Jtable,Jtextfield,Tablecelleditor,JTable中的textField能否自动添加一些文本?(不含javaScript) 就像当用户键入数字2或从该字段失去焦点时,自动为“时间”添加冒号(:) 我尝试使用一些invokeLater()、KeyListener()和editCellAt(),它只在我进入字段(双击并键入F2)时起作用,但如果我只单击并键入,则不起作用 private JTable getTblMaster() { if (tblMasterData == null) { tblMasterData = new
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;
}
在TableCellEditor的文本字段中,将
DocumentListener
添加到JTextField
的文档中。在DocumentListener中,添加应该追加/修改textfield文本的方法
如果我没记错的话,您将需要在SwingUtilities.invokeLater
中执行修改,因为我认为JTextField会在触发事件期间阻止文本修改(实际上,是文档会阻止这种情况)。在TableCellEditor的textfield上,将DocumentListener
添加到JTextField
的文档中。在DocumentListener中,添加应该追加/修改textfield文本的方法
如果我没记错的话,您将需要在SwingUtilities.invokeLater
中执行修改,因为我认为JTextField会在触发事件期间阻止文本修改(实际上,正是文档会阻止这种情况)。这是有效的!我将setText()包装在invokeLater()中。谢谢,这是工作!我将setText()包装在invokeLater()中。非常感谢。