Обновление JTable после того, как другой класс изменяет данные - PullRequest
0 голосов
/ 27 мая 2018

Я борюсь с обновлением содержимого таблицы.

Собственно, код выполняет следующие действия: он открывает JDialog (без внутреннего класса) с некоторым JTextField.

После отправки новых данных они непосредственно доступны классу, который содержит вкладку tab2 JTable.Таблица будет обновлена ​​правильно, когда я снова открою JDialog для той же строки таблицы, но я хочу, чтобы она обновлялась сразу после того, как данные были отправлены EditData.

Я понимаю, почему этого не происходит в данный момент, но сейчас я застрял.

Как узнать, были ли закрыты EditData, или даже лучше, была ли кнопка отправкинажата или, что еще лучше, если я определю логическое значение success () в EditData, которое сообщит мне, правильно ли введено значение;как получить к нему доступ из основного класса?

    tab2.addMouseListener(new MouseListener() {
        public void mouseClicked(MouseEvent e) {
            if(e.getClickCount()==2) {
                new EditData(params);
                tab2.setValueAt(newData, location, location);
            } 
        }
    });

1 Ответ

0 голосов
/ 27 мая 2018

Как узнать, были ли закрыты EditData,

  • Сделать его диалогом модальным , модальным для текущего вызывающего родительского окна.Таким образом, текущий поток кода остановится там, где это диалоговое окно станет видимым, и не возобновится, пока диалог больше не будет виден - строка чуть ниже того места, где вы его делаете видимым .
  • Поэтому EditData не делает саму 1013 * видимой, т. Е. Не имеет setVisible(true) в своем конструкторе.Вместо этого позвольте вызывающему коду создать экземпляр, где и когда необходимо, а затем установить его видимым, где и когда нужно.

или даже лучше, независимо от того, была ли нажата кнопка отправки или - дажееще лучше - если я определю некоторый логический success () в EditData, который скажет мне, если ввод правильный,

  • Один из способов создать модальный диалог - это JOptionPane, и если выиспользуйте JOptionPane.showConfirmDialog(mainJFrame, editData, "Title", JOptionPane.OK_CANCEL), этот диалог вернет int, который сообщит вам, какая кнопка была нажата.
  • Чтобы это работало, EditData должен быть JPanel, тот, который вы поместили в JOptionPane (или в свой JDialog какниже, если это ваше желание).
  • Или, если вы предпочитаете свернуть свой собственный JDialog, снова сделайте его модальным.Дайте JButtons для отправки или отмены.Сделав диалог видимым, установите для логического поля объекта диалога значение false, а затем при отправке нажмите, измените это поле на true.При нажатии любой кнопки диалоговое окно становится невидимым.Таким образом, вызывающий код может запросить у диалогового окна его состояние, когда оно больше не отображается.

как получить к нему доступ из основного класса?

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...