Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在JTable中自动添加一些文本_Java_Swing_Jtable_Jtextfield_Tablecelleditor - Fatal编程技术网

Java 在JTable中自动添加一些文本

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

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

在TableCellEditor的文本字段中,将
DocumentListener
添加到
JTextField
文档中。在DocumentListener中,添加应该追加/修改textfield文本的方法


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

在TableCellEditor的textfield上,将
DocumentListener
添加到
JTextField
文档中。在DocumentListener中,添加应该追加/修改textfield文本的方法


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

这是有效的!我将setText()包装在invokeLater()中。谢谢,这是工作!我将setText()包装在invokeLater()中。非常感谢。