web-dev-qa-db-ja.com

JFrameに複数のコンポーネントを追加するにはどうすればよいですか?

JFrameがあります。

Componentを拡張するBoxクラスもあります。このボックスクラスには、塗りつぶされた長方形を作成するPaintメソッドがあります。

これらのBoxコンポーネントを複数JFrameに追加すると、JFrameでrepaintを呼び出すと、最後に追加されたコンポーネントのみが表示されます。

レイアウトマネージャーを調べましたが、それが欲しいのかわかりません。私が欲しいのは、画面上のどこにでも長方形の束全体のアニメーションを作成できるようにすることです。

(また、パネルを作成し、パネルをJFrameに追加してから、すべてのBoxコンポーネントをパネルに追加しようとしました。これも機能しませんでした)。

前もって感謝します!

10
klyngbaek

2つの選択肢があります。

フレームのレイアウトを変更できます。

_JFrame frame;
frame.setLayout(new FlowLayout());
_

これで、複数のボックスを追加すると、フレームに表示されます。

他のオプションは、あなたが試したと言ったことをすることです。 (フレームへのパネルの追加)

_JPanel pane = new JPanel();
frame.add(pane);
(add the boxes to 'pane')
_

また、Boxのサイズにも注意する必要があります。おそらく、Boxの作成のどこかでsetPreferredSize()を呼び出す必要があります。これにより、Javaレイアウトに追加されたときに、ボックスを作成するサイズがわかります。

Java Layout Managerチュートリアル もご覧ください。そこにはたくさんの素晴らしい情報があります。

後もう一つ。フレームに一度に1つのボックスしか表示されなかったのは、JFrameのレイアウトマネージャーがBorderLayoutであるためです。また、BorderLayoutを持つコンポーネントでaddを呼び出すと、そのコンポーネントはコンポーネントの中央に自動的に追加されます。後続のaddの呼び出しは、中央のコンポーネントを上書きし、中央に1つのコンポーネントのみを残します。

10
jjnguy

ご回答ありがとうございます。

独自のカスタムクラスBoxを使用しているので、Paintメソッドを使用して長方形の位置を設定することができます。

Boxクラスが間違ったことを拡張していることに気づきました。 javax.swing.Jcomponentを拡張しているはずです。

OverlayLayoutでパネルを使用し、そのパネルにコンポーネントを追加すると、すべて正しく表示されます。

0
klyngbaek

最初に紙でレイアウトを行い、次にSwingレイアウトマネージャーを読んでください。

一部のSwingコンポーネントでは、1つのコンポーネントしか追加できないことに注意してください。タブ付きペインを使用しているときに、これに遭遇しました。各タブは1つのコントロール(JPane?)しか受け入れることができないため、関連するコントロールを配置するためのレイアウトを備えた個別のパネルを作成してから、ユニットとしてペインをタブに追加する必要があります。 Swingライブラリにも同様の配置があります。

0
Kelly S. French

フレームレイアウトをnullに設定してから、setBounds()を使用して、ボックスを目的の場所に正確に配置できます。

0
Bogdan

他のレイアウトマネージャーをチェックする必要があります。 JFrameはデフォルトでBorderLayoutを使用し、コンポーネントが追加される「場所」を指定せずに、CENTERに追加されます。 UIをどのように表示するかは、使用するレイアウトマネージャーによって異なります。 NetbeansGUIビルダーを使用することをお勧めします。

編集:追加したい部分についての部分を見逃しましたが、概念は同じです。これらのコンポーネントをデフォルトのレイアウトマネージャーに追加するだけで、上書きされます。 Boxコンポーネントの1つだけの内部でペイントを行うか、JPanelを作成してレイアウトをnullに設定する必要があるようですが、明示的に配置する必要があります。本当にあなたがそれで何をしたいかに正確に依存します。

0
Merky