Developer'sWorks
Tips

レイアウト対応画面の生成はできないか?

Javaのレイアウトクラスを使用すると、画面の大きさ変更に伴い、表示コンポーネントの大きさも動的に変わるような 画面が生成可能です。VisualFrameにて標準で提供しているものはレイアウト=nullのものになり、前記のような動きはできませんが ビジネスルールにてレイアウトを指定することにより実現が可能です。
Ver1.0.3からはレイアウト関連ルールを作成しやすいメソッドがある、抽象クラスが提供されています。そのクラスを使用し 実現している例を上げて説明いたします。

レイアウトルールの抽象クラスは
jp.ne.mki.wedge.rule.client.component.layout.AbstractLayoutRule
になります。
実装が必要なメソッドは以下の3つです。
  1. public void setLayoutToFramePanel() throws Throwable
    フレームのメインパネルにレイアウトを設定
  2. public void addComponent(JComponent component,String physicalName) throws Throwable
    コンポーネントをフレームに追加
  3. public void exit()
    終了処理。オブジェクトの開放などをおこなう

GridLayoutを実装した場合、以下のようになります。
public class SetGridLayout extends AbstractLayoutRule {
/**
* フレームのメインパネルにレイアウトを設定
*/
public void setLayoutToFramePanel() throws Throwable{
  int widthCelCount = Integer.parseInt(getRuleParameter());
  GridLayout layout = new GridLayout(0,widthCelCount);
  getFrame().removeScrollPane();        //スクロールペイン無効化
  getFramePanel().setLayout(layout);    //レイアウト設定
}

/**
* コンポーネントをフレームに追加
* {@link #setLayoutToFramePanel() setLayoutToFramePanel} の後にに実行されます。
* ツールにて設定されたコンポーネントが順次呼び出されます。(コンポーネントタブの設定順)
* @param JComponent ツールにて登録されたコンポーネント
* @param String コンポーネントの物理名
*/
public void addComponent(JComponent component,String physicalName) throws Throwable{
  getFramePanel().add(component);   //各コンポーネント追加
}

/**
* 終了処理。保持していた変数などを開放する処理を記述します。
* 処理の最後に実行されます。
正常終了・異常終了などに関わらず必ず実行されます。 */ public void exit() { } }
setLayoutToFramePanel()のメソッド内にて、画面自体のレイアウトを設定します。 ver1.1.3からは FrameInterface#removeScrollPane(); が実装されています。このメソッドを実行することにより スクロールペインを取り除くことが可能です。
使用するレイアウトはJavaにて提供されているレイアウトを使用可能です。
GridLayout, FlowLayout, BorderLayout, GridBagLayout など。
詳しい使用方法はJDKのドキュメントを参照して下さい。

addComponent(JComponent component,String physicalName)では、CAMCのコンポーネントタブの情報分だけ繰り返し Callされます。第一引数は「コンポーネントの参照」、第二引数は「コンポーネントの物理名称」が引き渡されます。 コンポーネントは、属性の設定など設定済みものものが渡されますのでレイアウトのみ考慮するだけでOKです。

作成したレイアウトルールは、画面の起動時(onLoad)のタイミングにて設定してください。