2009-07-13 18 views
3

GridBagLayoutManagerがこれを行う唯一のレイアウトマネージャであるかどうかはわかりませんが、ここに私の問題があります。 GridBagLayoutに水平にレイアウトされた4つのコントロールがあります。この例では単純にするために、各コントロールはフォームの1/4に等しくなり、各コントロールは他のコントロールと同じ比率でサイズが変更されます。 4つのコントロールはJTextFieldのもので、各テキストフィールドはResultSetのレコードの列に対応します。フォーム上の追加のコントロールを使用すると、レコードをナビゲートできます。GridBagLayoutマネージャとサイズ変更コントロール

1つのレコードから次のレコードまでナビゲートすると、テキストフィールドはテキストを更新して新しいデータを表示します。しかし、テキストフィールドは、表示されるテキストの量に比例して自動的にリサイズされます。大量のデータを含むテキストフィールドはサイズが拡大し、データ量の少ないテキストフィールドはスムーズになります。 ResultSetで10個のレコードを実行すると、コントロールは常にサイズが変更され、最小限に抑えるためにはかなり奇妙に見えます。

基本的なコンテナのサイズが変更されない限り、これらのコントロールのサイズが変更されないようにしたいと思います。したがって、ウィンドウのサイズを変更すると、コントロールのサイズを変更したい(Layoutの "weight x"変数による)が、コントロールのサイズを変更したくないのは、表示されているテキストの量が多くなるからです以下。

誰もがここにアイデアはありますか?

+0

このサイズ変更の動作はJTextFieldの「問題」だけではなく、JComboBoxなどの他のコントロールでも発生します。 – user85116

+0

JTextFieldの「列」の値を次のような数値に設定すると問題が解決します。 10程度である。これを指摘するSunのフォーラムの "camickr"に感謝します。 – user85116

答えて

2

JTextField(内容に記載されているとおり)は、テキストに好ましいサイズを設定するためにsetColumns(int)を呼び出します。 JComboBoxについて

、その値がレンダリングされるとJComboBoxの好ましいサイズは、その値に基づいて設定される原因となるsetPrototypeDisplayValue(Object)を呼び出します。

一般的に、どのコンポーネントでもsetPreferredSize(Dimension)を呼び出して同じ動作をさせることができます。一般設定されていない場合、値はコンポーネントのいくつかのデフォルト値に基づいて計算されます。 JTextFieldJComboBox、および大部分はJTextComponent派生で何が起こっているのですか?これらのコンポーネントの推奨サイズは、ユーザーが変更できる値(テキスト値、コンボボックス選択)によって決まるということです。他のほとんどのコンポーネント(JButtonJCheckBoxなど)では、コンテンツサイズは実際にユーザーが操作しても変更されません。列と行とプロトタイプの表示値を設定すると、優先サイズの計算に使用される値が固定されます。

関連する問題