Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

Swingでのレイアウトで悩む...!

毎回すみませんが教えてください.

Swingを使って、ダイアログウィンドウを表示させようとしています.使いたいコンポーネントは以下のようなものです.

[項目Aのラベル] [項目Aのテキストフィールド]
[項目Bのラベル] [項目Bのテキストフィールド]
[項目Cのラベル] [項目Cのテキストフィールド][項目Cのボタン]
[項目Dのラベル] [項目Dのテキストフィールド][項目Dのボタン]
[OKボタン][キャンセルボタン]

[項目Cのボタン][項目Dのボタン]はJFileChooserを表示して対応するテキストフィールドにパスを表示するためのものです.

VBやDelphiだと、ちょいちょいとコントロールを貼り付けてレイアウトはそれでおしまいとなるんですが、Swingの場合、BorderLayout、FlowLayout、GridLayout、BoxLayoutなんかがあって、いろいろ制約(というかクセ)がありますね.

私の場合、標準のBorderLayoutのCenterだけ使って、上記のコンポーネントを配置してみたんですが、思うようになってくれません.例えば

1. [項目Cのラベル] [項目Cのテキストフィールド][項目Cのボタン]は、横一列に並んで欲しいのが人情です.
2. ラベル−テキストフィールドはペアで必ず横に一列に並んで欲しいものです.
3. 各ラベルやテキストフィールドは横の表示開始位置を揃わせたいものです.

以上のようにははなかなかなってくれません.下手をするとWindowのリサイズでテキストフィールドの右に次のラベルが来てしまう有様です.

このような場合、どのようなレイアウト方法が最適なのでしょうか?うまいテクニックがあるのでしょうか?教えていただければ幸いです.

以上

7

回答

4859

閲覧

7件の回答

評価

0

失礼しました.自己RESです.

JBuilderだとJPanelのlayoutをXYLayoutにすれば、VBとおんなじ感覚でデザインできますね.これでモックアップつくれそうです.

# ところがGUIではなんの問題もなく動いてくれるのに、生成した.jarを動かすと以下のエラーになってしまいます.

Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: com/borland/jbcl/layout/XYLayout
        at flipsoi.gui.ProjectFrame.<init>(ProjectFrame.java:28)
        at flipsoi.gui.FlipsoiFrame.jMenuNew_actionPerformed(FlipsoiFrame.java:196)
        at flipsoi.gui.FlipsoiFrame$1.actionPerformed(FlipsoiFrame.java:83)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel
.java:420)
...

どうも原因はC:\Borland\JBuilder2006\libの本来JDKに入っていないライブラリにあるようです.JBuilderを使用している方どのようにしておられますか?

以上

評価

0

>VBやDelphiだと、ちょいちょいとコントロールを貼り付けてレイアウトはそれでおしまいとなるんですが、

EclipseのVisualEditorやNetBeansを使ってみてはどうですか?

>Swingの場合、BorderLayout、FlowLayout、GridLayout、BoxLayoutなんかがあって、いろいろ制約(というかクセ)がありますね.

そのために各種LayoutManagerが用意されいます。

JAVA2標準で最も詳細なレイアウトを設定できるのがSpringLayoutで、つぎにGridBagLayoutです。
ただし、これらのLayoutManagerは使用方法が面倒で、
メンテナンスでレイアウト変更する場合等も煩雑です。

レイアウト変更しないのであれば、使用方法が面倒ですが、上記でレイアウトを整えるために頑張ってみる価値はあるかなと思います。

各種LayoutManagerの知識があれば、LayoutManagerを設定したjava.awt.Containerを入れ子にすれば大抵のレイアウトは実現できます。

たとえば、BorderLayoutのNorthにGridLayoutを設定したJPanelを配置して、そのJPanelにBorderLayoutを設定したJPanelを配置して、さらにそのJPanelに。。。
という具合に。

イメージとしては、CSSが普及していなかったころに、HTMLのレイアウトをTableタグで調整していた具合です。

JAVA2標準でなく、ライセンス等も問題にならなければ、
オープンソース等でいろいろLayoutManagerが出回っていますので、調べてみてください。

評価

0

こんにちわ。
JBuilder中で、XYLayout2はJDKに存在しないレイアウトです。
(で、すでに置き換えられています)

なのでJBuilderを利用されているのであれば、まずXY〜2でレイアウト配置を行い、のちにGridBag〜に変更するとその配置のままGridBagでの配置を生成してくれるはずです。
JBuilderはどのツールよりも優れたGUI部分作成ツールだとおもっています。

また、紹介事例にたいしたテクニックといえば
[ラベル][TextField][ボタン]をFlowかGridかBoxでならべたパネルを作成し(各種Getter・Setter・visibleなど追加しておく)、それをメインパネルにFlowかGridかBoxでならべる。

fooさんが提示されているものを、繰り返し部分でコンポーネント化する手法です。

評価

0

fooさん

詳細な解説をありがとうございました.

Javaは最初Eclipseにお世話になり、次にJBuilderを買ってもらってというあんばいですが、従来がXSLTから呼ぶNON-GUIのライブラリしか作ったことがなかったので、ちょっと戸惑った次第です.

解説、参考にさせていただきます.

以上

評価

0

すったか様

ポストが近接していたので見逃しておりました.アドバイスをいただきありがとうございます.

XYLayoutのままでとりあえず動くものが出来上がっております.初心者の初回作品(?)なので、まずまともに動くこと最優先にしようと考えております.
さて

> JBuilder中で、XYLayout2はJDKに存在しない
> レイアウトです。
>(で、すでに置き換えられています)

とのご指摘ですが、これはJBuilder 2006以降のバージョンのお話でしょうか?XYLayoutを使用すると何か問題が生じますでしょうか?御教示いただければ幸いです.

あと自己RESですが、

># ところがGUIではなんの問題もなく動いてくれる
>のに、生成した.jarを動かすと以下のエラーになっ
>てしまいます.

は、単純な.jarを生成する際のライブラリのincludeの問題でした.XYLayoutの入っているライブラリを含めるように指定すればなんの問題もなく動いてくれました.

以上

評価

0

こんにちわ。

>とのご指摘ですが、これはJBuilder 2006以降のバージョンのお話でしょうか?
>XYLayoutを使用すると何か問題が生じますでしょうか?

JBuilder2 からですね。
XYLayoutならJava標準ですので問題なく。
XYLayout2だと、成果物を配布する際に少々問題に
なるかと。
配布しなければ特に問題もないです。

評価

0

すったか様

了解しました.
どうもありがとうございました.XYLayoutでOKとのこと、安心しました.

以上

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。