Обновлять Jframe при изменении данных

Я сделал класс, который расширяет jframe. У меня есть макет границы для jframe и некоторых компонентов, а также jpanel с абсолютным макетом для хранения некоторых кнопок и jcombobox. Поле со списком содержит некоторые значения из таблицы. И таблица берет значения из запроса mysql. Я удаляю или добавляю какие-то записи через кнопки и потом обновляю таблицу.

Все отлично работает, кроме поля со списком, которое не обновляет значения. Чтобы работать, мне нужно закрыть jframe и снова открыть его. Я прочитал много статей и руководств о перекраске и т. д., но в моем случае ничего не работает. Слушатель действий также является тем же классом, который расширяет jframe.

Любой способ сделать это? Пожалуйста, будьте проще, так как я новичок в программировании на Java. Спасибо!


person Vagelism    schedule 09.03.2012    source источник
comment
Вставьте код, чтобы увидеть, что происходит. SSCCE был бы идеальным (sscce.org)   -  person Guillaume Polet    schedule 09.03.2012
comment
Вы перезагружаете значения в поле со списком после вашей операции?   -  person prajeesh kumar    schedule 09.03.2012
comment
Вы пробовали revalidate() на JComboBox после того, как изменили его модель?   -  person Guillaume Polet    schedule 09.03.2012
comment
@Vagelism: см. CellEditorListener . Я мало что знаю о JTables, но похоже, что это можно использовать для обновления значений вашего JComboBox по мере обновления содержимого JTable. Или другой подход может заключаться в том, что, когда вы получаете значения из своего Database и помещаете их в свой JTable, вы можете добавить их в List, который вы можете использовать для обновления содержимого вашего JComboBox после того, как вы закончите обновление JTable.   -  person nIcE cOw    schedule 09.03.2012


Ответы (1)


Вы слышали о SwingUtilities.invokeLater(new Runnable()) или java.awt.EventQueue.invokeLater(new Runnable()) ?

Может быть полезно прочитать эту тему: Параллелизм в Swing

Пример фрагмента кода, который вы можете добавить к основному методу:

java.awt.EventQueue.invokeLater(new Runnable() {
    public void run() {
        JFrame frame = new JFrame();
        frame.setVisible(true);
                ...
    }
});
person Juvanis    schedule 09.03.2012
comment
Хорошо... Я прочитал это и, честно говоря, многого не понял. Любой пример того, как использовать этот код? - person Vagelism; 09.03.2012
comment
@GagandeepBali, я думаю, ваш материал лучше, я просто хотел дать идею ОП. - person Juvanis; 09.03.2012
comment
@Vagelism: вам также нужно прочитать о SwingWorker, как использовать SwingWorker для доступа к данным из базы данных и отображения их в вашем графическом интерфейсе. Любые изменения, которые вы когда-либо вносили в свой графический интерфейс во время выполнения, должны быть выполнены в потоке диспетчера событий. - person nIcE cOw; 09.03.2012
comment
Да, это то, чем я сейчас занимаюсь, но многого не понимаю :( - person Vagelism; 09.03.2012