• ベストアンサー

レイアウトnullの環境で、ウィンドウサイズの変更に対応して各コンポーネントが適切に表示されるには?

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

質問者が選んだベストアンサー

  • ベストアンサー
noname#49664
noname#49664
回答No.2

あ、いわんとすることは理解できます。私も、うざったいのでレイアウトマネージャを切ってしまうことはよくありますから。  こういうときは、ComponentListenerを使うといいですよ。フレームなどにaddComponentListenerで組み込めます。ComponentListenerには、コンポーネントがリサイズされたときに発生するcomponentResizedというイベントが用意されています。これで、フレームがリサイズされたときにすべてのコンポーネントを再配置するような処理を用意しておけばいいわけです。 ただ、1番の方もおっしゃってますが、最終的には独自にレイアウトマネージャを定義して使ったほうが後々便利とは思いますが・・・・。

kamakuragengorou
質問者

お礼

ご返答ありがとうございます。 独自に作成ですか...作成できたらいいなとは思うのですがどうやって作ればいいのかがちょっと今の知識では...。 ComponentListenerなるものがあったのですね。初めて知りました。早速試してみたいと思います。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • Gishi
  • ベストアンサー率57% (11/19)
回答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); } }

kamakuragengorou
質問者

お礼

ご返答ありがとうございます。 dolayout()などというメソッドもあるのですね!知りませんでした。勉強になります。

全文を見る
すると、全ての回答が全文表示されます。
  • ngsvx
  • ベストアンサー率49% (157/315)
回答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"); のようにして使えるようなものを作りました。

kamakuragengorou
質問者

お礼

指定したx、y、width、heightに従って作成できるなんで便利ですね!!私も挑戦してみます。 丁寧なご返答ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • ngsvx
  • ベストアンサー率49% (157/315)
回答No.1

レイアウトマネージャーに対する知識が間違っているようですね。 >レイアウトマネージャだと自由にコンポーネントを置けないので そんなことはありません。 ウインドウサイズをコンポーネントに影響させないレイアウトマネージャーを使えばいいのです。 標準ではGridBagLayoutというのがあります。 これは使い方が多少難しいかもしれません。 よく使うような自分で作ってみてもいいかもしれません。 私は、位置を固定するレイアウトを自分で作って重宝しています。

kamakuragengorou
質問者

お礼

ご返答ありがとございます。 自由に配置できるレイアウトマネージャとしてGridBagLayoutは知っています。知っているのですが、本やインターネットやらを見ても余り理解できなかったんです。 >>よく使うような自分で作ってみてもいいかもしれません。 これは自分で作ったということですよね。 位置を固定するレイアウトとはどのように作ったのでしょう?もしよろしければ教えて頂きませんでしょうか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Javaアプリケーションで、実行後ウィンドウのサイズを変更するとコンポーネントも変わる?

    Java、Swingを勉強しているのですが、Javaアプリケーションでウィンドウのサイズを右下の角(名前がわからなくてすみません)をドラッグドロップして変更すると、置いてあるコンポーネントのサイズも変更されるように実装は出来るでしょうか? 具体的にはJTextAreaコンポーネントの位置と大きさをウィンドウの大きさの比率で設定したい(例えば、大きさは幅、高さ共ウィンドウのサイズの3/4で、JTextAreaの左上のスタート地点は左から幅*1/4、上は高さ*1/5、説明が分かりにくくすみません…)のですが、どうやればいいかわかりません。 とりあえずレイアウトをnullにして座標と幅高さを数字で設定すれば、希望の感じにはなるのですが、ウィンドウの大きさを変更してしまうと、その幅高さなどは変わらないので不自然な感じになってしまって…。 よろしくお願いします。

    • ベストアンサー
    • Java
  • 文字サイズを変更してもくずれないレイアウト

    お世話になります。 CSSで文字サイズを「小・中・大」と変更できるサイトはよく見かけるのですが、文字サイズを変更した際に、レイアウト(背景の画像や枠の幅)は同じなので、1行だったものが2行になってしまったりします。 それを回避したサイトを制作するにはどのようにしたら良いでしょうか? 現状の策としましては、 ・CSSを3つ用意し、さらにそのCSSに合わせたレイアウトのHTMLをそれぞれ用意しておく。 ※この場合、ページの進退でそのCSSをそのまま引き継ぐ方法が未解決です。 どなたかご教授いただければと思います。 以上、宜しくお願い致します。

  • SwingのpaintComponent()メソッドについて

     JAVA初心者です、宜しくお願いします。  参考書で、Swingについて以下のようなコメントを見つけました、ただ何故そうなのかの理由を書いていません。  以下の内容はどのような理由からそうなるのでしょうか。  「Swing コンポーネントでは、メソッドpaintは推奨されていません。  paintComponentをプログラムから呼び出してはいけません。描画をしたい場合は、 paintComponent をオーバー ライドしたクラスの repaint() メソッドを呼び出します。  Swing コンポーネント上に描画するには、 描画したいコンポーネントのクラスを継承したクラスで、 メソッド paintComponent(Graphics g) をオーバーライドし、 パラメータで渡された g に対して Graphics クラスのメソッドで描画をします。  オーバーライドした paintComponent の先頭で、このコンポーネントの土台を描画するために、 super.paintComponent(g) を呼び出しておきます。」  宜しくお願いします。

    • ベストアンサー
    • Java
  • 写真のサイズ変更について

    デジカメで5M(2592×1944ピクセル)のサイズで撮った写真を、 (測ってみたところ)8.9×12.7cmのフォト用紙に、 撮った画像まるまるどこも欠ける事無く印刷したいのですが、 Microsoft Office Picture Managerでサイズ変更するやり方を教えてください。 Microsoft Office Picture Managerのサイズ変更のところにユーザー設定のサイズというのがあるんですが、 これはピクセルで○○×○○ピクセルというふうに表示してあるので、 フォト用紙8.9×12.7cmのサイズにするには、なにピクセルで表したらいいのでしょうか? あとMicrosoft Office Picture Managerでなく マイピクチャからそのまま、「この画像を印刷する」というところをクリックしてやっていくと、レイアウトの選択というのになって、そこにフルページFAXプリントとフルページ写真プリントと二通り出るんですが、この二つの違いはなんでしょうか? 用紙サイズはフチ無し写真L判89×127mm設定でやるとプレビューには、 フルページFAXプリントの場合、両端に白い線が出て、 フルページ写真プリントの場合、プレビューには用紙ぴったりに出るんですが、印刷すると後から出てくる用紙の方が必ず欠けて出てきてしまいます。どうしてでしょうか? 分かる方がいましたら、教えて下さい。よろしくお願いします。

  • エクセル フォントサイズ変更

    エクセルでインデックスラベルを作成しています。 1シート目に罫線等でラベルの様式を作り、それに文字データを入れ、 2シート目に参照して文字のみ印刷するようにしています。 そこで、文字数が3~8文字ぐらいなのですが、 文字数によってフォントサイズを自動で変更できないかと思っています。 1行に入れる文字数は5文字で、それ以上はAlt改行で2行にしており、 セル内には収まっているので「折り返して全体を表示」や「縮小して全体を表示」ではなく、フォントサイズを変更したいです。 例えば、3文字は11、4文字は10、5文字は9、それ以上の2行になるものは8という風に、 入力すると自動でそのサイズになってほしいです。 その都度サイズ変更するのはかなり手間ですし、参照しているところには、 サイズ変更はされないのでとても時間がかかります。 もし、不可能なのであれば、ショートカットキー(Ctrl+△)などで、 サイズ変更するという方法もあるようなのですが、やり方がわかりません。 素人ですので、あまり難しいことはわかりませんが、ご指導よろしくお願いします。

  • JTextAreaのサイズを文字に合わせて変更

    レイアウトマネージャを無効にした状態で、 JPanel上にJTextAreaを張り付けた際に、 setSize()を使ってピクセル単位でサイズを指定しないとうまく表示できないと思います。 入力された文字列に合わせてJTextAreaのサイズを変えたい場合は、 どういう風に設定すればよいのでしょうか?

    • ベストアンサー
    • Java
  •  superについて教えて下さい

     superについて教えて下さい  JAVAの初心者です、宜しくお願いします。  「super」についてよくわかりません。 ある本には、「親クラスのコンストラクタを呼び出す」、またある本には、「親クラスのオブジェクトを呼 び出す」、と書かれていました。  ・コンストラクタとオブジェクトとは同じ意味なのでしょうか。  ・また、ある本には、「コンストラクタの継承はされない」とかかれていますが、どのように違うのでしょうか。  ・JAVAのApIには、次のように書かれています。   「paint     public void paint(Graphics g)コンテナをペイントします。このコンテナの子コンポーネントで    あるすべての軽量コンポーネントへペイント要求を転送します。このメソッドが再実装される場合、軽量    コンポーネントが正しく描画されるように super.paint(g) を呼び出さなければなりません。    (以下略)」   super.paint(g)と各意味は、親クラスのメソッドを呼びだすことで、親クラスのメソッドを呼びだす時に  も、superが必要ということでしょうか。  コンストラクタ自体についてよく理解出来ていないのですが  ・そもそもクラス(オブジェクトの生成)にとってどのような役割、意味があるのでしょうか。   オブジェクトの生成すると、デフォルトで自動的に引数なしのコンストラクタが作成されると書かれています  が、  ・作成されること自体にどのような意味があるのでしょうか。  変数の初期化とかをコンストラクタ内で設定するのは意味があるとは思うのですが、、、、

    • ベストアンサー
    • Java
  • エクセルのプログラムでイメージコントロールで表示した画像のサイズを変更したり移動する方法

    エクセルでまずユーザーフォーム、イメージコントロール、コンボボックス(サイズ変更)、スクロールバー(表示位置)を作り、 Set イメージ.Picture = Load Picture("C\xxx.xxx") というようにイメージコンロールに画像を表示させ、イメージコントロールのサイズや位置を変えることなくその中にある画像の部分のみサイズや表示位置を変えたいのですがどのようにすればよいのでしょうか? MoveメソッドやPictureSizeModeを使うとイメージコントロール自体が変わってしまいます。 回答よろしくお願いします。

  • フォントサイズ変更に合わせテーブルの高さを変えたい

    フォントサイズ変更に合わせテーブルの高さを変えたい フォントサイズ変更に合わせテーブルのセルの高さを変えたいのですが、 どうすればよいでしょうか? <現状> ・HTML <td class="fontsizechange"> ・CSS .fontsizechange { font-size: 500%; } ・この状態だと、テーブルセルから、フォントが飛び出してしまいます ・フォントサイズの大きさに合わせ、セル高さを連動させるにはどうすればよいでしょうか? ・もし難しい場合は、テーブルセルの高さを、(固定値ではなく)相対的に大きくするにはどうすればよいでしょうか? ・height:500%;? ・height:500em;? ・libe-height:1.4;?

    • ベストアンサー
    • CSS
  • ファイル作成後の用紙サイズ変更

    ワードで作成したファイルを作成後にレイアウトを崩さず用紙サイズ変更することはできるのでしょうか? 例えば、B4で作成した書類をB5に変更するとレイアウトが崩れて使い物になりません。 プリントアウトの場合はプリンターのユーティリティで拡大縮小できることは知っているのですが、ファイル自体のページ設定を変更したいのです。 ファックスソフトなど限られたサイズでしか送信できない物もあるのでそのような時にも困っています。 ご存知の方がいらっしゃいましたらご指導お願いいたします。