Я использую JPanel со свойством propertyChangeListener и хочу, чтобы он перерисовывал себя в зависимости от того, какая конкретная переменная model
изменяется. Мой код для того же выглядит следующим образом -
public class LabelMacroEditor extends JPanel implements PropertyChangeListener {
private static final long serialVersionUID = 1L;
private LabelMacroModel model;
public LabelMacroEditor(LabelMacroModel bean) {
this.model = bean;
model.addPropertyChangeListener(this);
setupComponents();
validate();
setVisible(true);
}
public void setupComponents()
{
Box allButtons = Box.createVerticalBox();
JScrollPane macroModelScroller = new JScrollPane(allButtons);
macroModelScroller.setPreferredSize(new Dimension(300, 200));
for(MacroModel macroModel : model.getMacroModelList())
{
LabelMacroEditorEditableEntity macroEditorEntity = new LabelMacroEditorEditableEntity(macroModel);
Box entityBox = Box.createHorizontalBox();
entityBox.add(macroEditorEntity.getUpButton());
entityBox.add(Box.createHorizontalStrut(15));
entityBox.add(macroEditorEntity.getMacroDetailsButton());
entityBox.add(Box.createHorizontalStrut(15));
entityBox.add(macroEditorEntity.getDownButton());
allButtons.add(entityBox);
}
add(macroModelScroller);
}
@Override
public void propertyChange(PropertyChangeEvent arg0) {
revalidate();
repaint();
}
}
Когда я использую режим отладки в Eclipse, я вижу, что всякий раз, когда есть изменение в model
, оно запускает вызов propertyChange
, и оно также переходит на revalidate
и repaint
, но только JPanel
дисплей остается прежним. Похоже, он не рендерится сам.
Что-нибудь фундаментальное, что мне здесь не хватает?
РЕДАКТИРОВАТЬ:
Пример фрагмента свойства, которое я изменяю, выглядит следующим образом -
labelMacroModel.addMacroModel(addedMacroModel);
где labelMacroModel
относится к типу LabelMacroModel
, а addedMacroModel
относится к типу Macro
Теперь соответствующая часть класса LabelMacroModel
, которая запускает изменение свойства, выглядит следующим образом -
private List<MacroModel> macroModelList;// this is the list of all MacroModels
public void addMacroModel(MacroModel macroModel) {
macroModelList.add(macroModel);
pcs.fireIndexedPropertyChange("LabelMacroModel", macroModelList.size(), null, macroModel);
}