【问题标题】:Auto add some text in JTable在 JTable 中自动添加一些文本
【发布时间】:2012-09-11 08:33:10
【问题描述】:

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

【问题讨论】:

    标签: java swing jtable jtextfield tablecelleditor


    【解决方案1】:

    在 TableCellEditor 的文本字段中,将 DocumentListener 添加到 JTextFieldDocument。在 DocumentListener 中,添加应该附加/修改文本字段文本的方法。

    如果我没记错的话,您需要在 SwingUtilities.invokeLater 中执行修改,因为我认为 JTextField 会在事件触发期间阻止文本修改(实际上,是 Document 会阻止)。

    【讨论】:

    • 成功了!我将 setText() 包装在 invokeLater() 中。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2012-03-12
    • 2012-08-13
    • 1970-01-01
    • 2020-04-18
    • 2020-08-07
    • 2020-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多