JPanelをpropertyChangeListenerとともに使用し、特定の変数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();
}
}
私は日食でデバッグモードを使用するとき、私はmodel
に変更があるたびに、それはコールpropertyChange
をオフにトリガし、それがまたrevalidate
上で実行されていることがわかりますrepaint
ですが、ディスプレイはJPanel
のままです。それは自分自身を再レンダリングしているようではありません。 私がここで欠けている基本的なことは何ですか?
EDIT:
次のようにプロパティIM交換の一例の抜粋である -
labelMacroModel
タイプ
LabelMacroModel
と
addedMacroModel
である
labelMacroModel.addMacroModel(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