我有以下代码
DefaultListModel<String> modelPacientes = new DefaultListModel<>();
JList <String> listPacientes = new JList<>( modelPacientes );
listPacientes.setToolTipText("Lista de los pacientes del doctor");
GridBagConstraints gbc_listPacientes = new GridBagConstraints();
gbc_listPacientes.fill = GridBagConstraints.BOTH;
gbc_listPacientes.gridx = 0;
gbc_listPacientes.gridy = 0;
pPacientes.add(listPacientes, gbc_listPacientes);
modelPacientes.addElement(raul.getName() + " " + raul.getSurname());
modelPacientes.addElement(paula.getName() + " " + paula.getSurname());
modelPacientes.addElement(sara.getName() + " " + sara.getSurname());
我正在修改另一帧中对象(raul,paula和sara)的值,如何在关闭另一帧后在JList或其他任何地方(JLabel)更新它?
答案 0 :(得分:2)
您可以提供自己的ListModel(或DefaultListModel)子类,它在方法patient.getName() + " " + patient.getSurname())
中返回getElementAt
或者您可以将modelPacientes
的创建移动到新方法:
ListModel createModel() {
DefaultListModel<String> modelPacientes = new DefaultListModel<>();
modelPacientes.addElement(raul.getName() + " " + raul.getSurname());
modelPacientes.addElement(paula.getName() + " " + paula.getSurname());
modelPacientes.addElement(sara.getName() + " " + sara.getSurname());
return modelPacientes;
}
然后构建一个空的JList
,并在pacientes发生变化时运行listPacientes.setModel(createModel())
。
如果您有几十名患者,这种方法很好。 如果您有数百或数千名患者,您可能需要拥有自己的模型类,从您的患者数据映射到Swing组件需要的任何内容。
答案 1 :(得分:2)
我正在修改对象的值
然后ListModel
应该包含Objects而不是String。因此,假设您的对象类型为User
,您可以执行以下操作:
DefaultListModel<User> modelPacientes = new DefaultListModel<User>();
JList<User> listPacientes = new JList<User>( modelPacientes );
modelPacientes.addElement(raul);
modelPacientes.addElement(paula);
modelPacientes.addElement(sara);
然后在User类中,您可以覆盖toString()
方法以返回要在JList
中显示的值:
@Override
public String toString()
{
return getName() + " " + getSurname();
}
我正在修改另一个框架中的对象(raul,paula和sara)的值
然后从User
获取要修改的ListModel
对象,并将此对象传递给JDialog(注意,您应该使用JDialog,而不是弹出子窗口的JFrame)。
然后更新User对象中的数据,当对话框关闭时,您在repaint()
上调用JList
。
答案 2 :(得分:0)
将对象(raul
,paula
和sara
)添加到列表模式中。然后创建一个ListCellRenderer,它将返回一个字符串,即“显示名称”,例如:
raul.getName() + " " + raul.getSurname()
这样,当raul
,paula
和/或sara
的名称发生更改时,如果它与对象的实例相同,则会在列表中自动更改。