Освежающие компоненты JPanel - PullRequest
0 голосов
/ 14 января 2019

Я пытаюсь обновить некоторые компоненты моего основного JPanel (например, JLabels / JTextFields, содержащиеся в суб-JPanel), но, похоже, не могу. Данные компонентов (например, текст JLabels) заполняются на основе объекта переменной экземпляра моего класса JFrame, и я хочу обновить эти компоненты при изменении данных этого объекта:

enter image description here

Я пытался использовать:

    jPanel.revalidate();
    jPanel.repaint();

как на основной JPanel, так и на sub-JPanel каждого компонента, но, похоже, это не сработало .. Любое предложение о том, как это должно быть сделано?

[EDIT] Ниже приведен код, откуда я пытаюсь обновить JPanel. Это запускается всплывающим JDialog, после заполнения некоторых полей и нажатия кнопки «Сохранить», запускающей приведенный ниже код actionPerformed

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        myObject.setOwner(jTextField1.getText());
        myObject.setPurpose(jTextField2.getText());
        myObject.setProject(jTextField3.getText());
        myObject.setUntil(jTextField4.getText());
        jDialog1.dispose();
        jPanel1.revalidate();
        jPanel1.repaint();
}     

Ответы [ 2 ]

0 голосов
/ 14 января 2019

Похоже, вы предполагаете, что по умолчанию между компонентами пользовательского интерфейса и данными приложения существует некоторая привязка. К сожалению, по умолчанию такой функции нет. Если вам нужна такая привязка, вы должны использовать структуру привязки данных.

В этом посте обсуждается несколько таких структур связывания данных: Рамки привязки данных Swing

Если вы хотите сделать это связывание самостоятельно, не используя каркас, то вы можете использовать java.beans.PropertyChangeListener и связанные классы в Java.

0 голосов
/ 14 января 2019

Вы пытались использовать jPanel.removeAll (), а затем повторно добавлять компоненты текста / изображения / кнопки перед перерисовкой и повторной проверкой?

Или попробуйте удалить ваш revalidate и repaint и просто вызовите removeAll, в худшем случае он покажет вам, будет ли достигнут этот сегмент кода (при условии, что вы не можете / не можете установить точку останова по какой-то причине).

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