0

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

1 に答える 1

3

TableCellEditor のテキストフィールドで、 の に a を追加しDocumentListenerます。DocumentListener 内で、テキスト フィールドのテキストを追加/変更するメソッドを追加します。DocumentJTextField

私の記憶が正しければ、変更を a 内で実行する必要があります。SwingUtilities.invokeLaterこれは、JTextField がイベントの発生中のテキスト変更を防止していると思うためです (実際には、それを防止するのは Document です)。

于 2012-09-11T09:02:44.667 に答える