FaqMatisseCustomLayoutStyleJa
独自のコンポーネント間のスペーススキーマを定義することができますか?
GUI ビルダーで直接は行うことはできません。通常はギャップサイズを個々に指定するか、コンテキストメニューから "コンポーネント周囲のスペース" を開いて設定します。
しかし、ソースコードでは LayoutStyle クラスを登録することができ、デフォルトのギャップを自由に提供できます。 Swing Layout Extension ライブラリが必要です。
LayoutStyle クラスは2つのメソッドを含んでいます : getPreferredGap と getContainerGap です。getPreferredGap は二つの隣接するコンポーネント間の距離を決定します。getContainerGap はコンポーネントとコンテナのボーダとの距離を決定します。コンポーネントのインスタンスをこれらのメソッドの引数として指定します。
実際のコンポーネントがどれくらいの間隔になるのかを自由にカスタマイズすることができます。特別なことをする必要がない場合にはデフォルトの実装を使うことができます。デフォルトではルック&フィールのガイドラインに従います。
カスタマイズした LayoutStyle クラスの実装は次のようになります :
import java.awt.Container;
import javax.swing.JComponent;
import org.jdesktop.layout.LayoutStyle;
public class MyLayoutStyle extends LayoutStyle {
private static LayoutStyle instance;
private static LayoutStyle originalStyle;
public static void register() {
if (instance == null) {
instance = new MyLayoutStyle();
originalStyle = LayoutStyle.getSharedInstance();
LayoutStyle.setSharedInstance(instance);
}
}
public int getPreferredGap(JComponent component1, JComponent component2,
int type, int position, Container parent) {
// put your own condition here
if (component1 instanceof MyComponent && component2 instanceof MyComponent) {
switch (type) {
case RELATED: return 6;
case UNRELATED: return 16;
case INDENT: return 12;
}
}
return originalStyle.getPreferredGap(component1, component2, type, position, parent);
}
public int getContainerGap(JComponent component, int position, Container parent) {
if (parent instanceof MyContainer) // put your own condition here
return 20;
return originalStyle.getContainerGap(component, position, parent);
}
}
クラスを登録するにはレイアウトの前に MyLayoutStyle.register() を呼び出します。
注意:
- 登録解除はできません
- デフォルトの実装を気にしなければ(デレゲーションが必要ないので)簡単にクラスを定義できます
- カスタマイズしたスペーシングは実際にアプリケーションを実行したときに確認できます。GUI ビルダー上では確認できません。
- 詳細や javadoc は NetBeans の swing-layout ライブラリを参照するか、http://swing-layout.dev.java.net を参照してください。
バージョン: NetBeans 5.0, 5.5
プラットフォーム: すべて
- 日本語訳 : Masaki Katakai
- 英文 (翻訳したバージョン: 2)
- 日本語 NetBeans ユーザー FAQ へ戻る
