JClientでマスター/ディテール・フォームを使用する際、ディテール・フォームの複数のインスタンスを同時に表示できるようにする場合があります。 または、同じディテール・フォームを複数回開いたり閉じたりできるようにする場合があります。 最初の場合、一意のパネル・バインディング・インスタンスを作成し、それらをアプリケーションのバインディング・コンテナで設定する必要があります。 2番目の場合、同じパネル・バインディングを再利用できますが、再バインドできるようにビュー・コンポーネントを解放する必要があります。
同じフォームの複数のインスタンスを開く
同じフォームの複数のインスタンスを開けるようにする場合、一意のパネル・バインディング名を指定し、すでに使用中の名前を持つパネル・バインディングの新しいインスタンスが再作成されないようにする必要があります。 たとえば、メイン・フレームで、一意のパネル・バインディング名を指定するメソッドを定義できます。
int count = 0; private DCBindingContainer createDetailBinding() { String detail2BCName = "DetailFormUIModel"+count; if (panelBinding.getBindingContext().get(detail2BCName) == null) { DCBindingContainerDef bcdef = DCBindingContainerDef.findDefObject("adf.pm.testcase.view.DetailFormUIModel"); DCBindingContainer bc = bcdef.createBindingContainer(panelBinding.getBindingContext()); bc.setName(detail2BCName); panelBinding.getBindingContext().put(detail2BCName, bc); ++count; //make sure the next name is unused thus far. return bc; } return null; }
「ウィンドウを開く」ボタンのイベント・ハンドラは、バインディング・コンテキストに対して新しいパネル・バインディングを設定する必要があります。
private void jButtonOpen_actionPerformed(ActionEvent e) { DetailForm df = new DetailForm(); df.setBindingContainer(createDetailBinding()); df.setVisible(true); }
最後に、複数回表示するフォームで、新しいパネル・バインディング・インスタンスが含まれているバインディング・コンテキストを取得します。
public void setBindingContainer(DCBindingContainer ctr) { panelBinding = (JUPanelBinding)ctr; setBindingContext(ctr.getBindingContext()); }
同じフォームを複数回開く
フォームを表示し、閉じた後複数回開きなおせるようにする場合は、一意のパネル・バインディング名を指定する必要がないため、前述のcreateDetailBinding()
メソッドは前述の場合よりも単純です。
private void createDetailBinding() { String detail2BCName = "Detail2FormUIModel"; if (panelBinding.getBindingContext().get(detail2BCName) == null) { DCBindingContainerDef bcdef = DCBindingContainerDef.findDefObject("adf.pm.testcase.view.Detail2FormUIModel"); //NOTE THE NAME. DCBindingContainer bc = bcdef.createBindingContainer(panelBinding.getBindingContext()); bc.setName(detail2BCName); panelBinding.getBindingContext().put(detail2BCName, bc); } }
ディテール・フォームで、「閉じる」ボタンのイベント・ハンドラはビュー・コンポーネントを解放する必要があります。 これにより、次のフォームがパネル・バインディングを再利用し、再バインドが可能になります。
private void jButtonClose_actionPerformed(ActionEvent e) { panelToReuse1.getPanelBinding().release(DCDataControl.REL_VIEW_REFS); panelBinding.release(); panelBinding.getBindingContext().remove(panelBinding.getName()); this.dispose(); }
生成されるJClientコードについて
JClientのデータ・バインディングについて
Copyright © 1997, 2004, Oracle. All rights reserved.