60

Java/SwingでGUIアプリケーションを構築しようとしています。私は主に、VBなどのツールを使用してWindows側でGUIを「ペイント」することに慣れています(より正確には、Gupta SQLWindows ...何人の人がそれが何であるかを知っているのだろうか;-))。

Swingでグループボックスに相当するものが見つかりません...

グループボックスを使用すると、関連するいくつかのウィジェットの周りに正方形のボックス(通常はタイトル付き)があります。1つの例は、いくつかのラジオボタンの周りのグループボックスです(ラジオボタンの内容を説明するタイトルが付いています。たとえば、「男性」と「女性」のラジオボタンが付いた「セックス」というタイトルのグループボックス)。

少し調べてみました...サブペインを追加し、サブペインに境界線を設定してから、「グループ」内のすべてのウィジェットをサブペインに追加するしかありませんでした。それを行うためのよりエレガントな方法はありますか?

4

7 に答える 7

119

JPanel を作成し、それにラジオボタンを追加します。JPanel のレイアウトを適切なものに設定することを忘れないでください。

それから電話するpanel.setBorder(BorderFactory.createTitledBorder(name));

于 2009-01-10T21:00:10.870 に答える
8

他の人はすでに JPanel と TitledBorder の使用についてコメントしていますが、それは問題ありません。

ただし、Swing LayoutManager をいじっていると、異なる JPanel 内のコンポーネントが正しく整列できないことに悩まされることがあります (各パネルには独自の LayoutManager があります)。

このため、Swing GUI では TitledBorders を使用せず、JLabel とそれに続く水平 JSeparator によって JPanel 内のコンポーネントのグループを分離することをお勧めします (詳細については、Web の「JGoodies」を確認してください)。

参考文献 「スイングの応急処置

于 2009-01-12T05:18:56.777 に答える
3

グループ ボックスは、「論理的にグループ化されたウィジェット」のセットです。スイングの世界でこれはJPanel.

ウィジェットを に追加しますJPanel

ボーダー タイプを「タイトル付きボーダー」に設定し、VB6 の「フレーム」の名前と同じタイトルを付けます。

出来上がり。グループボックスができました。

于 2009-01-10T21:02:56.340 に答える
2

これは、ラジオ ボタンを取り上げたときの JRadioButton javadoc からの引用です。

ラジオ ボタンの実装 -- 選択または選択解除でき、その状態をユーザーに表示するアイテム。一度に 1 つのボタンのみを選択できるボタンのグループを作成するために、ButtonGroup オブジェクトと共に使用します。(ButtonGroup オブジェクトを作成し、その add メソッドを使用して JRadioButton オブジェクトをグループに含めます。)

注: ButtonGroup オブジェクトは論理的なグループ化であり、物理的なグループ化ではありません。ボタン パネルを作成するには、JPanel または類似のコンテナー オブジェクトを作成し、それに Border を追加して、周囲のコンポーネントから引き離す必要があります。

于 2009-01-12T17:41:44.747 に答える
1

私の知る限り、少なくとも標準のスイングウィジェットではそうではありません。

VB にはグループ ウィジェットがあり、これは基本的にパネル + ボーダーです。

Swing には、コンテナー ウィジェットである JPanel があり、必要な場合にのみ境界オブジェクトを作成して設定します。使用しないもの (ボーダーなど) にお金を払わないので、よりエレガントな方法でそれを主張することができます。

于 2009-01-10T20:22:28.217 に答える
-1

OPの意味を説明したUriのコメントに基づいて回答していGroup Boxます:

Uri: 多くのダイアログ ボックスで見られるコントロール グループのことだと思います。たとえば、ラジオ ボタンなどの多数のウィジェットが四角で囲まれています。

私の知る限り、すべてJComponentがそれ自体に境界線を設定できるため、2 番目のパネルは必要ありません。

于 2009-01-10T20:25:42.687 に答える