自动在JTable中添加一些文本

时间:2012-09-11 08:33:10

标签: java swing jtable jtextfield tablecelleditor

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;
}

1 个答案:

答案 0 :(得分:3)

在TableCellEditor的文本字段中,将DocumentListener添加到Document的{​​{1}}。在DocumentListener中,添加应附加/修改文本字段文本的方法。

如果我没记错的话,你需要在JTextField内执行修改,因为我认为JTextField在事件触发期间阻止了文本修改(实际上,它是可以防止这种情况的文档)。