線やイメージなどのグラフィックス関係では、ウィンドウサイズを変更しても、paintメソッドで各グラフィックスを相対的に定義しておけば、サイズ変更などしてもその都度呼び出されるので問題ないのですが、それがボタンやラベル、コンボボックスなどのコンポーネントの場合ではどうすればよいのでしょうか?
レイアウトマネージャを使用すれば、サイズを変更したりしてもそれに対応できるのは分かっているのですが、レイアウトマネージャだと自由にコンポーネントを置けないので、レイアウトnullでやりたいのです。
レイアウトnullの場合でもそれは可能なのでしょうか?
よろしくお願いします。
No.1
- 回答日時:
レイアウトマネージャーに対する知識が間違っているようですね。
>レイアウトマネージャだと自由にコンポーネントを置けないので
そんなことはありません。
ウインドウサイズをコンポーネントに影響させないレイアウトマネージャーを使えばいいのです。
標準ではGridBagLayoutというのがあります。
これは使い方が多少難しいかもしれません。
よく使うような自分で作ってみてもいいかもしれません。
私は、位置を固定するレイアウトを自分で作って重宝しています。
ご返答ありがとございます。
自由に配置できるレイアウトマネージャとしてGridBagLayoutは知っています。知っているのですが、本やインターネットやらを見ても余り理解できなかったんです。
>>よく使うような自分で作ってみてもいいかもしれません。
これは自分で作ったということですよね。
位置を固定するレイアウトとはどのように作ったのでしょう?もしよろしければ教えて頂きませんでしょうか?
No.2ベストアンサー
- 回答日時:
あ、いわんとすることは理解できます。
私も、うざったいのでレイアウトマネージャを切ってしまうことはよくありますから。こういうときは、ComponentListenerを使うといいですよ。フレームなどにaddComponentListenerで組み込めます。ComponentListenerには、コンポーネントがリサイズされたときに発生するcomponentResizedというイベントが用意されています。これで、フレームがリサイズされたときにすべてのコンポーネントを再配置するような処理を用意しておけばいいわけです。
ただ、1番の方もおっしゃってますが、最終的には独自にレイアウトマネージャを定義して使ったほうが後々便利とは思いますが・・・・。
ご返答ありがとうございます。
独自に作成ですか...作成できたらいいなとは思うのですがどうやって作ればいいのかがちょっと今の知識では...。
ComponentListenerなるものがあったのですね。初めて知りました。早速試してみたいと思います。
ありがとうございました。
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.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);
}
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Delphiでビデオキャプチャー画...
-
java gui のイベント処理が重い
-
VB.NETでMSComm が追加できず?
-
ツールボックスのような折りたたみ
-
requestFocusについて
-
エクセルVBAで、条件に一致する...
-
C#でフォームのオブジェクト名...
-
JTextFieldの入力制限
-
VBA 同じ名前のオブジェクトを...
-
「天声人語」をインターネット...
-
成人式の後中3のクラスで集まろ...
-
河合塾のクラス分けについて
-
「タイプ初期化子が例外をスロ...
-
例外処理throws
-
YYYYMMDD書式の日付に対する適...
-
C# でメソッドに送られてきたOb...
-
Javaでブラウザ判定
-
Javaの問題なんですが、(this==...
-
tryの終了
-
エクセルのデータ振り分け方法...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB.NETでフォーム上にExcelのよ...
-
VB.NETでMSComm が追加できず?
-
requestFocusについて
-
Visual Basic 2010を使ってRS-2...
-
JScrollPane上のJTableの再描画
-
ファイル保存先のダイアログが...
-
delphi stringgrid
-
JButton配列でのイベント処理
-
VB6のツールボックスへのコンポ...
-
VBでCPUの使用率を取得できます...
-
アクティブなTextFiel...
-
[delphi] 変数を利用してコンポ...
-
ツールボックスのような折りたたみ
-
JOptionPaneのダイアログパネル...
-
C#で設定時刻到来時にイベント...
-
子パネルから親パネルのコント...
-
Buttonの色
-
コントロールの表示・非表示
-
GUI画面でsetBounds()で作成し...
-
java 電卓 平方根
おすすめ情報