我使用带有propertyChangeListener的JPanel,并希望它根据每当特定变量model
发生更改时自行重新渲染。我为同一代码如下 -
Java swing - Jpanel不会自我渲染/重新绘制
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
显示保持不变。它似乎没有让自己放弃。 我在这里失踪的任何基本的东西?
编辑:
属性IM变化的一个例子代码段如下 -
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);
}
*“我在这里错过的任何基本的东西?”*一个SSCCE让我感兴趣? – 2012-03-18 18:42:01
你能举一个你改变的例子属性吗? – 2012-03-18 18:44:23
@PerryMonschau - 我编辑过,以提供改变属性的代码片段。 – ping 2012-03-18 18:53:15