2

私はMVCをコーディングしています。私のコントローラーでは、アクションをリッスンしており、ユーザーが「SHOW-LIST」ボタンをクリックすると、JFrame から拡張されたビュー クラスのインスタンスを作成し、そのビュー クラスで新しい JFrame を作成します。私の問題は、SHOW-LISTボタンを複数回クリックすると、フレームが複数回開かれることです。新しいフレームが開かれようとすると、古いフレームが閉じるようにする方法を教えてください..

コントローラ

public void actionPerformed(ActionEvent event) {
  String viewAction = event.getActionCommand();
  ...
    if (viewAction.equals("SHOW-LIST")) {
      showListUI = new ShowListDialogUI(displayedCustomerList);
    }
}

意見

class ShowListDialogUI extends JFrame{
  public ShowListDialogUI (List<Customer> customerList) {
    ..
    // I am drawing it here
    ..
  }
}
4

2 に答える 2

3

新しいフレームが開こうとすると古いフレームが閉じるように、どうすればよいか教えてもらえますか。

  • を使用するCardLayoutと、sで遊ぶ理由はなく、Top-Level Container必要な数を入力しJPanelsて、JPanelビューを切り替えるだけです。

  • 通知されたよう@trashgodに、本当に良い考えではありません、方法

  • そうしないと、最上位のコンテナがGCされることはないため、役に立たないコンテナをクリーンアップ(すべてのコンテンツを削除)する必要があります。

于 2012-10-25T16:28:54.127 に答える
1

ユースケースにもよりますが、古いものを閉じて新しいものを作成する代わりに、既存のものに焦点を当てることができます (そしておそらくデータを更新しますか?)。

コントローラーはフレームを管理し、追跡できます。最も簡単な (そして推奨されない) 方法では、ブール値の "isFrameOpen" があります。フレームを開く場合は true に設定し、閉じる場合は false に設定します (フレームがコントローラーと通信する必要があるか、コントローラーが少なくともフレームのステータスを認識している必要があります)。ブール値が true の場合、フォーカス/再作成します。false の場合、新しいものを作成します。

より高度なソリューションでは、マップを使用してすべてのフレームを追跡でき、同時アクセスを慎重に処理する必要があります。

--tb

于 2012-10-25T16:12:38.110 に答える