Problemas en JTable con CellEditor

Iniciado por alfrosende, 4 Agosto 2016, 17:48 PM

0 Miembros y 1 Visitante están viendo este tema.

alfrosende

Hola a toda la comunidad, les comento mi problema (trabajo en NetBeans con Swing y estoy aprendiendo).

Tengo creada en un JForm una JTable con 2 columnas, una que recibe un "Titulo" de la fila, y la segunda que carga el valor de ese dato (que puede ser numerico o string) y esa segunda columna aparte es editable.

Ej de estructura:
Dato      Valor
Marca    Mercedes
Modelo   Benz
Año        2005
Valor      30.000,50

Tengo creado mi TableModel, un renderer propio que determina si el valor es String o Numerico y lo muestra segun el caso alineado a la derecha o a la izquierda, y en caso de los numericos formateado como lo muestro en la columna valor (los datos se visualizan bien ese no es mi problema).
Mi problema es a la hora de la edición y setear el editor de la columna.
Yo dependiendo al igual que en el renderer del tipo de dato (String o numerico), quiero devolver un componente propio que uso en varios proyectos que es un JTDecimal o JTText que ambos tienen una propiedad SetMaxCharacters para indicarle el maximo largo, y en el caso del JTDecimal tambien setea el numero de decimales que acepta y controla no se ingresen letras, ni mas de un punto, etc.

Problema 1: En mi formulario de prueba cuando cambio el dato, queda grabado bien en memoria pero en la grilla no visualizo el cambio, osea, si cambio el valor de año a 2016, cuando apreto enter me sigue mostrando 2005, pero si con un boton levanto en JOptionPane los datos de la grilla me dice 2016.

Problema 2: A pesar de estar devolviendo los componentes que menciono, no logro que se comporten como lo hacen en los programas cuando los agrego al formulario, osea no controla el ingreso de letras en el caso del JTDecimal, no los largos seteados en la propiedad MaxCharacters.

Les dejo el codigo de mi editor por si alguien puede iluminarme, desde ya muchas gracias.

P.D.: Aclaro que en el codigo estoy probando solo con el JTDecimal, despues de resuelto veo que devolver en cada caso.

class MyEditor extends DefaultCellEditor implements CellEditor, TableCellEditor {

        private ArrayList<DatoDinamico> datosDina;
        private DatoDinamico dina;
        private JTDecimal editor;
        private JTDecimal renderer;

        public MyEditor(ArrayList<DatoDinamico> datosDina) {
            super(new JTDecimal());
            this.datosDina = datosDina;
        }

        @Override
        public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
super.getTableCellEditorComponent(table, value, isSelected,  row, column);

            editor = (JTDecimal) super.getTableCellEditorComponent(table, value, isSelected,
                    row, column);
            editor.setMaxCharacters(14);
            editor.setMaxDecim(3);
            String strFormat = "#,##0." + StrUtils.dupeString("0", 3);
            editor.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter(new java.text.DecimalFormat(strFormat))));

            if (isSelected) {
                editor.setForeground(table.getSelectionForeground());
                editor.setBackground(table.getSelectionBackground());
            } else {
                editor.setForeground(table.getForeground());
                editor.setBackground(table.getBackground());
            }

            dina = getDatoDina(row);

            return editor;
        }

        private DatoDinamico getDatoDina(int row) {
            for (int i = 0; i < datosDina.size(); i++) {
                if (i == row) {
                    return datosDina.get(i);
                }
            }
            return null;
        }

       
    }



nelmaster_vc

hola amigo solo te puedo decir que pases por este sitio

http://dis.um.es/~bmoros/Tutorial/parte14/cap14-13.html

aclare mis dudas ahi


Espero que sea de ayuda