나는 propertyChangeListener와 함께 JPanel을 사용하고 특정 변수 model
이 변경 될 때마다 다시 렌더링하려고합니다. 내가 model
에 변경이있을 때마다 통화 propertyChange
을 트리거 것을 볼 수 있습니다 이클립스 디버그 모드를 사용하면
자바 스윙 - 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();
}
}
을하고도 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);
}
* "내가 누락 된 근본 사항은 무엇입니까?"* SSCCE가 나를 관심있게 만드나요? –
변경 한 예제 속성을 제공 할 수 있습니까? –
@PerryMonschau - 메신저가 변경되는 속성의 코드 스 니펫을 제공하도록 편집했습니다. – ping