9

カスタム ファイル選択コンポーネントを作成しています。私の UI では、最初にユーザーがボタンをクリックすると、JFileChooser;が表示されます。閉じると、選択したファイルの絶対パスが に書き込まれますJTextField

問題は、絶対パスは通常長いため、テキスト フィールドが拡大し、コンテナが広すぎることです。

私はこれを試しましたが、何もしませんでした.テキストフィールドはまだ広すぎます:

fileNameTextField.setMaximumSize(new java.awt.Dimension(450, 2147483647));

現在、空の場合、GridBagConstraints添付されているため、すでに 400px の長さです。

HTML ページのテキスト フィールドのように、サイズが固定されていて、入力が長すぎても拡大されないようにしたいと考えています。

では、の最大サイズを設定するにはどうすればよいJTextFieldですか?

4

3 に答える 3

13

テキスト フィールドが含まれているレイアウト マネージャーによって異なる場合があります。一部のレイアウト マネージャーは展開し、一部は展開しません。場合によってのみ拡張するものもあれば、常に拡張するものもあります。

私はあなたがやっていると仮定しています

filedNameTextField = new JTextField(80); // 80 == columns

その場合、ほとんどの合理的なレイアウトでは、フィールドのサイズは変更されるべきではありません (少なくとも、大きくなるべきではありません)。多くの場合、レイアウト マネージャーはJScrollPanes に配置されると動作がおかしくなります。

setMaximumSize私の経験では、ビアなどのサイズを制御しようとすることはsetPreferredWidth、せいぜい不安定です。Swing はレイアウト マネージャーによって独自に決定され、それについてできることはほとんどありません。

そうは言っても、私はあなたが経験している問題を抱えていないので、レイアウトマネージャーを賢明に使用することで問題が解決すると信じています.

于 2008-09-24T16:00:00.840 に答える
3

を使用して、テキストフィールドのコンテナに最大幅を設定することでこれを解決しましたsetMaximumSize

davetronの回答によると、これは壊れやすいソリューションです。レイアウトマネージャーがそのプロパティを無視する可能性があるためです。私の場合、コンテナが一番上にあり、最初のテストで機能しました。

于 2008-09-24T16:23:00.377 に答える
3

テキスト フィールドにサイズを設定しないでください。代わりに、setColumns を介して、またはコンストラクターと列引数を使用して、列サイズをゼロ以外の値に設定します。

何が起こっているかというと、columns がゼロのときに JTextComponent によって報告される推奨サイズは、テキストをレンダリングするために必要なスペースの全量です。列がゼロ以外の値に設定されている場合、優先サイズは、多くの標準的な列幅を表示するために必要なサイズです。(可変ピッチ フォントの場合、通常は小文字の 'm' のサイズに近くなります)。列をゼロに設定すると、テキスト フィールドは可能な限り多くのスペースを要求し、コンテナ全体を拡張します。

すでに塗りつぶしのある GridBagLayout にあるため、おそらく列を 1 に設定し、他のコンポーネントまたは他の適切に低い数値に基づいて塗りつぶしを引き延ばすことができます。

于 2008-09-24T20:01:20.400 に答える