刷新JPanel的组件

时间:2019-01-14 15:56:54

标签: java swing

我正在尝试刷新主JPanel的某些组件(例如,子JPanels中包含的JLabels / JTextFields),但似乎无法执行。组件数据(例如JLabels文本)是基于我的JFrame类的实例变量对象填充的,并且当此对象数据更改时,我想刷新这些组件:

enter image description here

我尝试使用:

    jPanel.revalidate();
    jPanel.repaint();
在主JPanel和每个组件的子JPanel上均

,但这似乎不起作用。 关于应该如何做的任何建议?

[编辑] 下面是我尝试刷新JPanel的代码。在填充一些字段并按下“保存”按钮触发以下actionPerformed代码后,将由弹出的JDialog触发该操作。

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 :(得分:1)

似乎您假设默认情况下UI组件和应用程序数据之间存在某些绑定。不幸的是,默认情况下没有此类功能。如果要进行这种绑定,则必须使用数据绑定框架。

本文讨论了一些这样的数据绑定框架: Swing data binding frameworks

如果您希望自己不使用框架进行绑定,那么可以使用java.beans.PropertyChangeListener和Java中的相关类。

答案 1 :(得分:-2)

您是否尝试过使用jPanel.removeAll(),然后在重新绘制和重新验证之前重新添加文本/图像/按钮组件?

或者尝试删除您的revalidate和repaint并仅调用removeAll,在最坏的情况下,它将显示该代码段是否被命中(假设您出于某些原因不在/无法在此处断点)。