線やイメージなどのグラフィックス関係では、ウィンドウサイズを変更しても、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で質問しましょう!
似たような質問が見つかりました
- PHP 書籍よりも より良い htmlspecialchars の変更を 1 2022/04/18 02:28
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 3 2022/10/27 17:44
- Windows 10 Windows Updateの更新ができない場合に初期化 3 2023/01/18 20:00
- PostgreSQL PostgressからMySQL(MariaDB)へ構造を変更する際のTimestamp等について 2 2023/04/04 12:09
- Wi-Fi・無線LAN Windows10でWi-Fi6Eが使えない!?そもそもWi-Fi6Eってなんでしたっけ?教えて! 1 2023/01/27 20:48
- その他(コンピューター・テクノロジー) 【Tableau Desktop】文字列から8桁の数字を日付型(yyyyMMdd)として取得 1 2023/07/31 10:17
- PostgreSQL DBFluteについて質問です。 環境:PostgreSQL java8 前提:webアプリケーショ 1 2022/07/07 00:49
- ノートパソコン HPの保証について 1 2023/08/26 10:17
- Word(ワード) Wordでの印刷サイズについて A4の原稿をB5サイズで出力したいとき、 印刷から用紙サイズの指定か 4 2022/04/30 09:51
- Firefox(ファイヤーフォックス) Firefoxでグーグルの検索画面が変です 2 2022/09/20 19:25
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB.NETでフォーム上にExcelのよ...
-
C++Builder でPanel上にフォー...
-
同じコンポーネントを複数の場...
-
パネルを切替ると、リサイズす...
-
VB.NETでMSComm が追加できず?
-
イベントが発生したボタンを特...
-
上下ボタンで数字を変化させる
-
requestFocusについて
-
Visual Basic 2010を使ってRS-2...
-
同一パッケージにあるクラスが...
-
レコード件数の表示
-
「タイプ初期化子が例外をスロ...
-
インスタンス参照でアクセスで...
-
Java初級 引数に適用できません
-
VB.NET getとsetの概念がわかり...
-
変数名の付け方
-
パワーポイントのVBAでテキスト...
-
Excelで =EMBED("Acrobat Docu...
-
「天声人語」をインターネット...
-
javaのコンパイルができません...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB.NETでフォーム上にExcelのよ...
-
VB.NETでMSComm が追加できず?
-
VB6のツールボックスへのコンポ...
-
Visual Basic 2010を使ってRS-2...
-
requestFocusについて
-
ファイル保存先のダイアログが...
-
JButton配列でのイベント処理
-
C#で設定時刻到来時にイベント...
-
ツールボックスのような折りたたみ
-
パネルのフォーカス移動
-
JScrollPane上のJTableの再描画
-
VBSでCDトレイのオープン/ク...
-
文字の色の変更
-
C++Builder でPanel上にフォー...
-
Delphiでの画像の表示について...
-
Unity、コントローラーによるボ...
-
画像を一瞬だけ表示する。
-
[delphi] 変数を利用してコンポ...
-
VBでCPUの使用率を取得できます...
-
ダイアログでタイトルバーを非表示
おすすめ情報