このコンストラクターがあります。
public UmlDiagramEntity(ReportElement reportElement, int pageIndex, Controller controller) {
super(reportElement.getX1(), reportElement.getY1(), reportElement.getX2(), reportElement.getY2());
setLayout(null);
this.pageIndex = pageIndex;
this.controller = controller;
reportElements = reportElement.getInternalReportElements();
components = new ArrayList<AbstractEntity>();
changedComponentIndex = -1;
PageListener p = new PageListener();
this.addMouseMotionListener(p);
this.addMouseListener(p);
setPage();
}
そして、同じクラスに update メソッドがあります。
@Override
public void update(ReportElement reportElement) {
if (changedComponentIndex == -1) {
super.update(reportElement);
} else {
reportElements = reportElement.getInternalReportElements();
if (components.size() == reportElements.size()) {
if (!isCommitted) {
if (reportElement.getType() == ReportElementType.UmlRelation) {
if (checkInvolvementAndSet(changedComponentIndex)) {
anchorEntity(changedComponentIndex);
} else {
resistChanges(changedComponentIndex);
}
return;
}
}
..................goes on
デバッガーからの流れをたどると、メソッドのどこかで update が呼び出されると、プログラムがコンストラクターに入り、それを最初からやり直します (super、pageIndex など)。なぜコンストラクターに行くのですか:DIはそこに行くように指示しませんでした。
必要に応じて、より深い分析を行い、コンストラクターのどこに行くかを確認できます。ちなみに、changedComponentIndex
は静的変数です。