0

デフォルトのJPanelを保持するメインのJFrameがあります。この JPanel を使用して、さまざまな JPanel をアプリケーションにアタッチして、アプリケーションをブラウジングする効果をシミュレートしようとしています。CardLayout が機能するためには、通常、JFrame に JPanel に表示されるもの (ボタン、ドロップダウン ボックスなど) を制御する何らかの方法が必要であることに気付きました。 JPanel) を JFrame のデフォルトの JPanel にロードし、ユーザーがそのホーム JPanel で使用可能なクリック可能なボタン/アイコンを使用してナビゲートできるようにします。

JFrame とデフォルトの JPanel は残りの JPanel とは別のクラスにあるため、(プライベートであるため) デフォルトの JPanel にアクセスして、いずれかの JPanel のボタンをクリックして表示される内容を変更するのに問題があります。他のクラス。これを回避する方法はありますか?

また、アプリケーションに必要なすべてのボタンを JFrame に付けて、そこから表示される JPanel を制御すると機能しますか? 必要に応じてボタンを表示/非表示にすることができますが、これは理にかなっていますか?

これは、JFrame クラスで呼び出しているコードです。

 private void jButton45MouseClicked(java.awt.event.MouseEvent evt) {
    CardLayout card= (CardLayout) displayPanel.getLayout();
    card.show(displayPanel, "register");
}

displayPanel はすべてのカードを循環するデフォルトのパネルであり、jButton45 は JFrame の「登録」というタイトルのボタンです。「登録」は、表示しようとしている JPanel 変数の名前です。

4

2 に答える 2

2

これは設計上の問題のように聞こえます。いくつかのコードを見ないと、具体的な詳細を示すことはできません。そうは言っても、対処する必要がある主なことは、デフォルトの JPanel とその CardLayout への参照を使用してナビゲーションを制御するボタンを提供することです。そこからnext()、 、previous()、またはを呼び出すだけshow()です。

補遺:

isの 2 番目の引数show()は、 を呼び出すときに指定する名前ですadd()。NetBeans GUI ビルダーを使用している場合は、プロパティウィンドウでこれを設定できます。パネルを選択し、「レイアウト」までスクロールします。カード名を目的の文字列値に設定し、 を呼び出すときにこの同じ値を使用しますshow()

于 2012-11-01T00:01:03.680 に答える
1

ナビゲーション ペイン (ホーム) とビューの切り替えに使用される「既定」との間で対話できるモデルを使用しCardLayoutます。

基本的に、モデルには単純なセッターとゲッターがあり、アプリケーションの 2 つの部分で使用して、モデルの状態を変更および監視できます。モデルが変更されたことを関係者に通知するために、ある種のリスナーを提供する必要があります。最も単純なものはChangeListenerまたはPropertyChangeListenerです。

このようにして、モデルを使用しているコンポーネントに影響を与えることなく、時間の経過とともにモデルを変更できます。

于 2012-10-31T23:52:24.543 に答える