我使用帶有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