こんにちは、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横幅の変更方法に妙案が有れば教えて頂けませんでしょうか。
No.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を自作してもいいかもしれませんね。
では、がんばってください。
さらなる、質問にご回答頂き有り難うございます。
> JTextAreaはJScrollPaneとセットで使ったほうがよいです。
> JTextArea単独で使うことってめったにないと思います。
これまでawtでいくつかプログラムしていて、今回swingを始めて使ったので、TextAreaの場合とほとんど同じにパネルに載っけてしまいました。
以後気を付けます。
>さらにメインのパネルとサイドのパネルをJSplitPaneで分けたほうが、よりかっこいいのではないでしょうか。
> こうすれば、ユーザーが自由にサイドパネルの幅を変えられますしね。
そんなことも出来るのですね。使ってみます。
> Look & Feel変更の留意点といえば、ひとえに「ちゃんとLayoutManagerを使いましょう」ということではないでしょうか。
有り難うございます。まだ、LayoutManager自作には遠いですけど、さらにいろいろなLayoutManagerを試してみようと思います。
No.1
- 回答日時:
こんばんは。
いくつか補足をお願いします。
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 でした。
解決のきっかけを頂きどうも有り難うございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS トリミングで表示した画像をクリックで元どおりにしたい 3 2022/12/16 18:49
- 政治 私の発明した「二階建て漢字」は使えるでしょうか? 3 2023/02/08 16:40
- JavaScript ブラウザの横幅に応じてとある画像(e.jpg)を画面いっぱいに表示できるようにしたいです。(写真の横 1 2022/10/06 21:17
- HTML・CSS スクロールすると追従する画像のコードを書いているのですが、追従する画像の大きさの調節が上手くいきませ 2 2022/04/18 12:52
- Windows 10 Windowsのアイコンの整列が変になりました 2 2022/06/24 00:02
- ホームページ作成・プログラミング グリッドレイアウトHTMLとCSS 1 2023/02/22 02:36
- その他(ソフトウェア) Figma 1 2023/06/23 14:22
- iPad iPadでoutlookのビューの幅を広げたいのですが、やり方が分かりません。 iPadでoutlo 2 2022/12/29 10:56
- その他(Microsoft Office) 複数の写真を1枚に印刷 5 2023/05/05 22:41
- 引越し・部屋探し 【冷蔵庫搬入の幅について】 引っ越しをします。 冷蔵庫をかおうと思っています。 急ぎです。 価格は安 2 2023/06/15 19:12
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB.NETでフォーム上にExcelのよ...
-
C#で設定時刻到来時にイベント...
-
コンポーネントの再利用技術とは
-
ソフトウェアコンポーネントの...
-
VBSでCDトレイのオープン/ク...
-
ファイル保存先のダイアログが...
-
[delphi] 変数を利用してコンポ...
-
delphi stringgrid
-
JScrollPane上のJTableの再描画
-
java applet 上段に2×3、下段に...
-
ツールボックスのような折りたたみ
-
SwingでのGroup作成
-
DELPHI2005 検索結果の複数の項...
-
VS2010デザイナーの読込エラー...
-
C++Builder
-
アクティブなTextFiel...
-
エクセルVBAで、条件に一致する...
-
変数名の付け方
-
「タイプ初期化子が例外をスロ...
-
インスタンス参照でアクセスで...
マンスリーランキングこのカテゴリの人気マンスリー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の使用率を取得できます...
おすすめ情報