Java 如何更新显示对象详细信息的面板
我有一个面板,我们称之为Java 如何更新显示对象详细信息的面板,java,swing,user-interface,Java,Swing,User Interface,我有一个面板,我们称之为detailsPanel,它包含一个Person引用,并以以下方式显示其字段值: Name: person.getName (); Surname: person.getSurname (); Emain: person.getEmail (); .... ....... .... ....... 等等。我将使用JLabels(使用GridBagLayout正确对齐)来显示每个(fieldName,fieldVal
detailsPanel
,它包含一个Person
引用,并以以下方式显示其字段值:
Name: person.getName ();
Surname: person.getSurname ();
Emain: person.getEmail ();
.... .......
.... .......
等等。我将使用JLabels
(使用GridBagLayout
正确对齐)来显示每个(fieldName
,fieldValue
)。我有很多字段要显示
问题是,显示详细信息的面板必须始终可见,即它不会显示在模式JDialog
中,因此我可以通过在面板创建时读取我的Person
对象字段来创建面板
面板必须始终可见,当用户在Person
列表中选择不同的行时,其Person
引用将发生变化。这意味着我将调用一个方法来更新其状态,类似于:
detailsPanel.setPerson (aPerson);
现在,我想知道如何更新所有字段。我是否应该保留对所有显示值的jlabel
的引用,并在更新面板时在每个标签上使用setText(value)
,还是最好覆盖每个标签的getText()
方法,返回正确的字段值,以便在更新方法中我只重新绘制面板,当getter方法用于不同的Person
对象时,文本会自动更改吗
任何建议都将不胜感激 因为这是通常从不调用的UI内容(相对于在其他计算中调用的频率),所以您根本不需要担心效率。只要做你认为最优雅的解决方案。我很快想到了三个选择。从快速、静态到优雅、可重复使用:
init()
方法,每次实体更改时,只需调用removeAll()然后再次执行init()
setPerson()
方法更新所有面板。然后在构造函数中调用此方法(这可能是最常见的解决方案)
JLabel
扩展。这个新类应该有一个update()
方法,当事情发生变化时调用该方法,或者让它设置自己的侦听器,以确保收到任何相关变化的通知
如果您计划创建一个面板来显示所有类型的对象,您可以让这些对象实现一个名为displaybable
的接口,该接口为您提供对其所有值的通用访问,甚至可能是对每个值的侦听器。可显示
界面的另一种选择是使用反射和注释,以允许面板获取其显示值
请注意,与一些人可能告诉你的相反,最优雅的解决方案并不总是最适合任何情况。您预计未来会进行多少维护?应用程序有多大?你会把代码交给别人吗?所有这些以及更多需要考虑,以决定您希望您的解决方案有多“好”。感谢您的详细回答,可能对于我当前的需求,解决方案2已经足够了,但您指出了一些非常有趣的细节!