Los valores booleanos de JTable no se actualizan cuando se utiliza JOptionPane

Estoy tratando de escribir un poco de código que permita al usuario completar campos de texto haciendo clic en celdas booleanas en a JTable.

imagen

Puedo hacer que el programa ingrese los datos de la tabla en un campo de texto, pero mi método actual de hacerlo implica un JOptionPane que, por alguna extraña razón, impide que la tabla cambie los valores de la casilla de verificación (es decir, la casilla de verificación no t cambiar de negro a marcado). No solo esto, sino que la selección no se actualiza, por lo que el valor en la última columna sigue siendo falso, aunque la selección debería cambiarlo a verdadero.

Creo que podría tener algo que ver con JOptionPaneanular de alguna manera el evento de selección, pero no sé lo suficiente sobre el JOptionPaneobjeto para decir cómo. Mi código es:

table.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
ListSelectionModel selectionModel = table.getSelectionModel();
selectionModel.addListSelectionListener(new ListSelectionListener() {

    public void valueChanged(ListSelectionEvent e) {
        ListSelectionModel lsm = (ListSelectionModel) e.getSource();
        if (lsm.isSelectionEmpty()) {
            //no rows are selected do nothing
        } else {
            //First find the row clicked
            int selectedRow = lsm.getLeadSelectionIndex();
            /*
                * put a popup here to ask the user which peak to associate
                * the energy with.
                */
            System.out.println(selectedRow);
            //Get user to associate with a peak
            availablePeaks = getAvailablePeaks();
            String returnVal = (String) JOptionPane.showInputDialog(
                null,
                "Select the peak:",
                "Peak Matching",
                JOptionPane.QUESTION_MESSAGE,
                null,
                availablePeaks, null);
            System.out.println(returnVal);
            //Determine the selection
            int index = 0;
            for (int i = 0; i < availablePeaks.length; i++) {
                if (availablePeaks[i] == returnVal) {
                    index = i;
                } else {
                }
            }
            //Set the peak value in the peak specifier to the energy in the row
            double energy = (Double) table.getValueAt(selectedRow, 0);
            System.out.println(energy);
            frame.getPeakSetter().getPeakSpecifiers()[index].setEnergy(energy);
            frame.getPeakSetter().getPeakSpecifiers()[index].getTextField().setText("" + energy);
        }
    }
});

¿Alguien sabe por qué un JOptionPaneen el ListSelectionListenerdetener la tabla de actualizar las casillas de verificación?

¡Gracias!

Respuesta 1

Aquí está mi código. Traté de convertir el binario en una matriz de caracteres, luego multipliqué cada carácter en la matriz por 2 a la potencia de su número correspondiente en la matriz, luego resumí todos los valores de los caracteres ...

¿Alguien alguna vez usó una buena biblioteca Java de código abierto que permitiera la conversión NAL> H264? He visto muchas bibliotecas, pero la mayoría de ellas están incompletas o son muy difíciles de usar (sin documentación, etc.). Lo que quiero ...

Estoy leyendo el PDF de convenciones de código Java y me di cuenta de esto: evite las declaraciones locales que ocultan las declaraciones en los niveles superiores. Por ejemplo, no declare el mismo nombre de variable en un interno ...

Entorno: Java EE 6 ¿Cómo determinar en Interceptor si el bean invocado es administrado por contenedor (CMT) o administrado por bean (BMT)?