4

複数の JFrame を使用してプログラムを作成するにはどうすればよいか、いつも疑問に思っていました。つまり、1 つのクラスですべての GUI などを処理したいのですが、これを効果的に行うにはどうすればよいでしょうか? 多くのチュートリアルでは、JFrame を継承して JFrame を作成すると述べています。しかし、多くのフレームが必要な場合はどうすればよいでしょうか?

例: いくつかのオプションを含む 1 つのフレーム内のアプリケーションのタイトル メニューは 1 つのフレームであり、メインの作業アプリケーションは 1 つのフレームです。ゲームのように。

しかし、JPanel に関するものかどうかはわかりません。私は2に完全に困惑しています。動かないフレームが1つだけ欲しいのですが、基本的にフレームの内容が変化しています。例えばSTARTをクリックすると、フレームのゲームスタイルに変わります。

4

4 に答える 4

10

を探していJFrameますCardLayout。背景:

JFrameは物理ウィンドウです。タイトル バーと 3 つのボタン (最小化、最大化、閉じる) が付属しています。これを額縁と考えてください。

JPanelは、一種の「コンテンツ ホルダー」です。通常、他のコンポーネント (ボタン、アニメーションなど) を JPanel に配置し、その JPanel を JFrame に平手打ちします。額縁の例を使用すると、JPanel は額縁に入れる写真用紙になります。他のコンポーネントは、画像自体の実際のコンテンツになり、最後にあるのは素敵な画像です...またはあなたの場合はアプリケーションです。

基本的に JFrame を使用するように設定するCardLayoutと、同じ JFrame 内に複数の JPanel を一度に配置できますが、一度に 1 つしか表示されません。したがって、アプリケーションには、(少なくとも) 2 つの JPanel が必要です。1 つはメニュー用、もう 1 つはゲーム用です。アプリが起動したら、MenuPanel を表示します。ユーザーが「開始」をクリックすると、GamePanel に切り替わります。MenuPanel はバックグラウンドに配置され、再度フォアグラウンドで呼び出すまでアクセスできません。

一方、複数の JFrame を作成すると、個別に処理できる 2 つ以上の物理的に分離されたウィンドウが作成されます。これは、実際にはゲーム開発にとって一種のクールな場合があります。2 番目のウィンドウの GUI をビルドしてリンクするには時間がかかりますが、そのウィンドウをリアルタイムでゲームの設定 (発射速度、弾丸の強さ、プレイヤーの速度など) に影響させることができます。

于 2013-07-15T13:14:20.940 に答える
1

あなたが求めているのはCard Layoutだと思います:

CardLayout オブジェクトは、コンテナーのレイアウト マネージャーです。コンテナー内の各コンポーネントをカードとして扱います。一度に表示できるカードは 1 枚だけで、コンテナはカードのスタックとして機能します。CardLayout オブジェクトに最初に追加されたコンポーネントは、コンテナが最初に表示されたときに表示されるコンポーネントです。

ここで使用方法を確認できます。

このレイアウト マネージャーを使用すると、さまざまな機能間でフレームを共有する必要がある状況を管理できます。たとえば、あなたの場合、ゲームの設定セクションを処理する機能と、実際のゲーム自体を処理する別の機能を持つことができます。

次に、マネージャーを使用して、これらの特定のアイテムを切り替えることができます。

于 2013-07-15T13:13:17.937 に答える
0

複数のフレームに Desktopane() と InternalFrame() を使用することもできます。Internalframe は Jframe とよく似ていますが、毎回 setVisible(true) または show() が必要です。

于 2014-01-04T09:28:19.940 に答える
0

どの IDE を使用していても、同じパッケージに複数の JFrame を作成し、それぞれに個別のコードを含めることができます。

各フレームをリンクする場合は、各 JFrame からインスタンスを作成する必要があります。たとえば、ボタンが押されたときに、新しい Frame (作成済み) を呼び出す必要がある場合

NewJFrame1 frame1=new NewJFrame1();

frame1.setVisible(true);

次に、現在の JFrame をどうするかを決めることができます。例: (非表示、閉じる)

于 2015-05-18T11:35:37.533 に答える