
線やイメージなどのグラフィックス関係では、ウィンドウサイズを変更しても、paintメソッドで各グラフィックスを相対的に定義しておけば、サイズ変更などしてもその都度呼び出されるので問題ないのですが、それがボタンやラベル、コンボボックスなどのコンポーネントの場合ではどうすればよいのでしょうか?
レイアウトマネージャを使用すれば、サイズを変更したりしてもそれに対応できるのは分かっているのですが、レイアウトマネージャだと自由にコンポーネントを置けないので、レイアウトnullでやりたいのです。
レイアウトnullの場合でもそれは可能なのでしょうか?
よろしくお願いします。

No.2ベストアンサー
- 回答日時:
あ、いわんとすることは理解できます。
私も、うざったいのでレイアウトマネージャを切ってしまうことはよくありますから。こういうときは、ComponentListenerを使うといいですよ。フレームなどにaddComponentListenerで組み込めます。ComponentListenerには、コンポーネントがリサイズされたときに発生するcomponentResizedというイベントが用意されています。これで、フレームがリサイズされたときにすべてのコンポーネントを再配置するような処理を用意しておけばいいわけです。
ただ、1番の方もおっしゃってますが、最終的には独自にレイアウトマネージャを定義して使ったほうが後々便利とは思いますが・・・・。
ご返答ありがとうございます。
独自に作成ですか...作成できたらいいなとは思うのですがどうやって作ればいいのかがちょっと今の知識では...。
ComponentListenerなるものがあったのですね。初めて知りました。早速試してみたいと思います。
ありがとうございました。
No.4
- 回答日時:
もちろんレイアウトマネージャを自分で作ったほうが
再利用できて便利ですが、
レイアウトマネージャを使わずに
レイアウトをカスタマイズしたいなら、
Container クラスの doLayout() をオーバーライドするとよいでしょう。
たとえば、常にボタンを中央に配置するパネルは、
下のように書きます。
class LayoutDemo extends Panel {
Button b = new Button("Press Me");
public LayoutDemo() {
add(b);
setLayout(null);
}
public void doLayout() {
Dimension size = this.getSize();
Dimension bsize = b.getPreferredSize();
b.setBounds((size.width - bsize.width) / 2,
(size.height - bsize.height) / 2,
bsize.width, bsize.height);
}
}
No.3
- 回答日時:
#1です。
>位置を固定するレイアウトとはどのように作ったのでしょう?
インターフェースのjava.awt.LayoutManager2を実装すれば、レイアウトマネージャーとして機能します。
配置の処理はlayoutContainer(Container parent) で行います。
これは、再配置が必要な場合にコンテナから呼ばれます。
また、コンテナに追加したときは、addLayoutComponent(Component comp, Object constraints) が呼ばれるので、
compとconstraintsをペアにしてArrayListなどに保存しておけばいいでしょう。
詳細は、BorderLayoutのソースが参考になると思います。
ちなみに、私は
panel.add(comp, "x=5; y=10; w=100; h=25");
のようにして使えるようなものを作りました。
指定したx、y、width、heightに従って作成できるなんで便利ですね!!私も挑戦してみます。
丁寧なご返答ありがとうございました。
No.1
- 回答日時:
レイアウトマネージャーに対する知識が間違っているようですね。
>レイアウトマネージャだと自由にコンポーネントを置けないので
そんなことはありません。
ウインドウサイズをコンポーネントに影響させないレイアウトマネージャーを使えばいいのです。
標準ではGridBagLayoutというのがあります。
これは使い方が多少難しいかもしれません。
よく使うような自分で作ってみてもいいかもしれません。
私は、位置を固定するレイアウトを自分で作って重宝しています。
ご返答ありがとございます。
自由に配置できるレイアウトマネージャとしてGridBagLayoutは知っています。知っているのですが、本やインターネットやらを見ても余り理解できなかったんです。
>>よく使うような自分で作ってみてもいいかもしれません。
これは自分で作ったということですよね。
位置を固定するレイアウトとはどのように作ったのでしょう?もしよろしければ教えて頂きませんでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C++ Builder でVisibleとshow
-
SWTで動的にコントロールを追加...
-
中学のクラス数
-
「タイプ初期化子が例外をスロ...
-
ヒグマを撃退
-
【sendkeysメソッドが動かずに...
-
エクセルVBAで、条件に一致する...
-
javascriptのイベント処理につ...
-
オブジェクト参照がオブジェク...
-
0歳児の指しゃぶりに関して
-
javascriptからjavaを呼び出したい
-
サーブレットコンテキストの意...
-
単体テスト仕様書[正常系/異常...
-
インスタンスを同じ名前で作成...
-
Excel VBA 定数にオブジェクト...
-
どこからも呼ばれていない無意...
-
JavaScriptからJAVAクラスを呼...
-
河合塾
-
「IOException は対応する try ...
-
Tomcat高負荷時の設定について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB.NETでフォーム上にExcelのよ...
-
VB.NETでMSComm が追加できず?
-
ファイル保存先のダイアログが...
-
VB6のツールボックスへのコンポ...
-
C#で設定時刻到来時にイベント...
-
JScrollPane上のJTableの再描画
-
Visual Basic 2010を使ってRS-2...
-
TableModelListener 通知出し方
-
JButton配列でのイベント処理
-
フレーム上のコンポーネントの...
-
VBのAxtiveXコントロール製品を...
-
requestFocusについて
-
java gui のイベント処理が重い
-
[delphi] 変数を利用してコンポ...
-
C++Builder でPanel上にフォー...
-
C#で参照したCOMコンポーネント...
-
delphi stringgrid
-
VBSでCDトレイのオープン/ク...
-
文字の色の変更
-
文字装飾可能なテキストエディ...
おすすめ情報