dポイントプレゼントキャンペーン実施中!

こんにちは、jdk1.4でswingアプリケーションを作っています。
JPanal2つをBorderLayoutで配置し、WEST側JPanelにJComboBoxその他のコンポーネントを入れて、CENTER側では、コンポーネントは置かずにJPanelに絵を描いています。
全体のサイズを600×400としている時、JComboBoxが400近い横幅をとるので、右の画像表示スペースがかなり狭くなってしまいました。
そこで、それぞれのJPanelをJScrollPaneに埋め込むことにして、なんとか、右の画像表示枠を大きくすることには成功したのですが、JComboBoxのために、いつも左パネルが横スクロール状態になるのが不満です。
JComboBoxに登録している文字列は最大でも半角25文字で、JComboBox内での
半分しか占めていないのに、なぜこんなに大きな幅になるのでしょう?
JComboBoxに対して以下の設定も試してみましたが、大きさは変化しませんでした。
setPreferredSize(new Dimension(200,20));
setMaximumSize(new Dimension(200,20));
JComboBox横幅の変更方法に妙案が有れば教えて頂けませんでしょうか。

A 回答 (2件)

 こんにちは、#1です。



>実はメモ書き用にJTextAreaも同じパネルに入っていて、
>実行開始時に文字列が入っていたのですけど、これを改行して
>短くしたら、他のコンポーネントサイズも狭くなりました。

 原因がわかって何よりです。
 JTextAreaはJScrollPaneとセットで使ったほうがよいです。
 JTextArea単独で使うことってめったにないと思います。

>しかし、swingってここまで柔軟に実行中のデータ変更で
>コンポーネントサイズが変わるとは思いませんでした。

 たしかにLayoutManagerは便利なんだか不便なんだかわからないところがありますね。
 コンポーネントの推奨サイズが変わるたびにサイドのパネルの幅が大きくなったり、小さくなったりしてうざったい場合は、対策をされているようにパネルをJScrollPaneにいれて、さらにメインのパネルとサイドのパネルをJSplitPaneで分けたほうが、よりかっこいいのではないでしょうか。

 こうすれば、ユーザーが自由にサイドパネルの幅を変えられますしね。

 さらにJSplitPaneの連続再描画を有効にしておき、ツールバーにサイドパネルボタンみたいなのを作って、それが押されたら、javax.swing.TimerでJSplitPaneのディバイダの位置を広げていけば、まるでサイドパネルが「にゅー」とアニメーションして出てきたみたいに見えて、すごく凝った事している気分になれそうです。
 もっとも、ユーザーからは「いらん事せずに、パッと出せ」と言われそうですが・・・。

>追加質問になりますが、コンポーネントサイズの調整に際して、
>Look & Feel変更の留意点などありましたら教えて頂けませんか。

 Look & Feelとバージョンについて聞いたのは、今現在私がちょっと困ってまして、jdk1.5からどうやらバグがあるようで、Windows風Look&FeelのJComboBoxの推奨サイズが、小さめになってしまっていて、登録しているItemが全部表示してくれないのです。
 1.5.0_02でもまだ、なおっていません。
 03で直ってくれてるといいのですが。
 まあ、そういうわけで、1.4でも、そういうバグがあるのかも、思ったしだいです。

 Look & Feel変更の留意点といえば、ひとえに「ちゃんとLayoutManagerを使いましょう」ということではないでしょうか。
 LayoutManagerにnullを指定して、コンポーネントの位置とサイズを手動で指定することもできますが、これだと、Look & Feelを変えたときにレイアウトが崩れてしまいますから、使い勝手が悪くてめんどくさくても、ちゃんとLayoutManagerを使ったほうがよいようです。
 どうしても既存のLayoutManagerでは、痒いところに手が届かないという場合は、LayoutManagerを自作してもいいかもしれませんね。

 では、がんばってください。
    • good
    • 0
この回答へのお礼

さらなる、質問にご回答頂き有り難うございます。

> JTextAreaはJScrollPaneとセットで使ったほうがよいです。
> JTextArea単独で使うことってめったにないと思います。

これまでawtでいくつかプログラムしていて、今回swingを始めて使ったので、TextAreaの場合とほとんど同じにパネルに載っけてしまいました。
以後気を付けます。

>さらにメインのパネルとサイドのパネルをJSplitPaneで分けたほうが、よりかっこいいのではないでしょうか。
> こうすれば、ユーザーが自由にサイドパネルの幅を変えられますしね。

そんなことも出来るのですね。使ってみます。

> Look & Feel変更の留意点といえば、ひとえに「ちゃんとLayoutManagerを使いましょう」ということではないでしょうか。

有り難うございます。まだ、LayoutManager自作には遠いですけど、さらにいろいろなLayoutManagerを試してみようと思います。

お礼日時:2005/06/15 22:12

 こんばんは。



 いくつか補足をお願いします。

 WESTのパネルのLayoutManagerはなんですか?

 Swing の Look & Feel は、なんですか?ディフォルトでしょうか?

 また、jdk1.4とありますが、細かいバージョンはわかりますか?

この回答への補足

素早いお返事有り難うございます。
まだ情報が足りなかったですね、済みません。1週間いろいろ試したのだけど
いろいろやりすぎて、どれが必要な情報か解らなくなってきておりました。

>WESTのパネルのLayoutManagerはなんですか?
最初 GridBagLayoutを使用したのですが、幅調整がうまくいかなくて
BoxLayout.Y_AXISのパネル内にGridLayout(3, 2) を組み合わせました。
しかし、やはり幅広の横スクロール状態は同じでした。

他にも多重パネルで、いろいろコンポーネントが入っているので、さっきJComboBoxを除いて実行してみたら、やっぱり、同じ幅の横スクロールになってしまいました。
せっせと入れ込むことばかり考えていたので、取り除いて試す方は、ご回答を読んでから気づきました。
JComboBoxが悪さをしていたわけではないようです。早とちりの質問をして済みません。

でもJLabelとかJButtonとかも、表示文字列よりかなり幅が大きいので、狭まるはずだと思っての質問でした。
で、さらに、実はメモ書き用にJTextAreaも同じパネルに入っていて、実行開始時に文字列が入っていたのですけど、これを改行して短くしたら、他のコンポーネントサイズも狭くなりました。
JTextAreaがdefaultでは自動改行でないことを認識しておりませんでした。
しかし、swingってここまで柔軟に実行中のデータ変更でコンポーネントサイズが変わるとは思いませんでした。

> Swing の Look & Feel は、なんですか?ディフォルトでしょうか?
デフォルトです。ここの変更がどう違うのかは、まだよく解っていないので。
追加質問になりますが、コンポーネントサイズの調整に際して、Look & Feel変更の留意点などありましたら教えて頂けませんか。

> また、jdk1.4とありますが、細かいバージョンはわかりますか?
Version 1.4.1 でした。

解決のきっかけを頂きどうも有り難うございました。

補足日時:2005/06/15 00:55
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!