Слушатель действий JTables не будет работать после появления всплывающего окна

У меня есть JPanel, который содержит JTable и JButton. Желаемая функциональность: - для каждой строки таблицы, которую щелкает пользователь, на панели появляется вторая таблица - если нажимается кнопка, появляется всплывающая таблица.

Для таблицы я реализовал прослушиватель мыши следующим образом:

       table.addMouseListener(new MouseAdapter() {

        @Override
        public void mouseClicked(MouseEvent e) {
            int row = table.getSelectedRow();
            int col = table.getSelectedColumn();
            System.out.println("Table: " + row + "  " + col);

            // perform some table processing here
            // the new table to appear is data1

            // update the content of the panel dataP   
            dataP.removeAll();
            dataP.setLayout(new BorderLayout());
            dataP.add(new JScrollPane(data1), BorderLayout.NORTH);
            dataP.updateUI();
            }
        }
    });

Слушатель работает нормально, пока я не нажму кнопку и не появится всплывающая таблица. После этого, если я нажму на исходную JTable, я всегда получаю, что выбранная строка/столбец равна -1, -1. Почему это происходит? Поскольку таблица и кнопка — это два отдельных компонента (к тому же размещенных на разных панелях), как одно может влиять на другое? Заранее спасибо!


person ginou    schedule 19.01.2014    source источник
comment
Я думаю, что любому из нас будет трудно догадаться, что может быть не так, основываясь на опубликованном вами фрагменте кода, и вместо этого вы захотите создать и опубликовать файл минимальный пример запуска (подробности см. по ссылке). Кроме того, ваш код выглядит так, как будто вы действительно хотите либо использовать CardLayout для обмена представлениями, либо сохранить тот же второй JTable в поле зрения, но поменять на нем модели.   -  person Hovercraft Full Of Eels    schedule 19.01.2014
comment
Это может быть полезно!   -  person Sazzadur Rahaman    schedule 19.01.2014
comment
@Sazzadur Rahaman Я видел это, но это не сработало. Я создал простой пример, как предложил Hovercraft Full Of Eels, и все работало нормально. Поэтому я продолжал смотреть на свой код и, наконец, в действии кнопки я обновлял свою исходную таблицу, и это вызвало проблему. Спасибо всем за ваше время!   -  person ginou    schedule 19.01.2014
comment
Don't use the updateUI() method. Этот метод используется для изменения LAF. Когда вы добавляете/удаляете компоненты из видимого графического интерфейса, вы должны использовать revalidate() and repaint().   -  person camickr    schedule 19.01.2014
comment
Полезно знать @camickr, спасибо за совет!   -  person ginou    schedule 21.01.2014