1

targetMainFraim にメインの JPanelと、パネルcurrentViewに追加された別の JPanel があります。パネルには、リスナー付きのボタンが含まれています。これらのリスナーは、以下に示すように、パネルのコンテンツを変更すると想定されます。targettargetcurretView

private JPanel currentPanel;

public void setView(String type) {

    if (type.equals("overall")) {
        this.currentPanel = getOverallView();
        frame.setTitle("BookingCalendar - Overall View");
        frame.validate();
    } else if (type.equals("guest")) {
        this.currentPanel = getGuestView();
        frame.setTitle("BookingCalendar - Room View");
        frame.validate();
    } else if (type.equals("room")) {
        currentPanel.removeAll();
        this.currentPanel = getRoomView();
        frame.setTitle("BookingCalendar - Guest View");
        frame.validate();
    }
}

私が呼び出すすべてのメソッドは、呼び出されるたびに新しい JPanel を返します。

JPanel currentPanel = new JPanel(new MigLayout("","20 [grow, fill] 10 [grow, fill] 20", "20 [] 10 [] 20"))

問題は、これらのメソッドを呼び出すたびに、パネルが変更されないことです。常に同じままです (デフォルト: getOverallView())

フレームとパネルの両方で無効化、検証、再描画を試みましたが、変更はありません。パネルの内容を完全に変更するために私が何をする必要があるかについて、誰かが詳しく教えてください。currentView

4

3 に答える 3

5

毎回新しい JPanel() を作成するべきではありません。代わりに、ビューの種類ごとに 1 つ作成し、CardLayoutを使用してそれらを切り替えます。CardLayout を使用すると、カードのように切り替える JPanel を使用できます。

于 2012-05-21T14:32:13.543 に答える
1

currentView別のパネルを指すように、ポインターを移動しようとしているようです。実際に行う必要があるのは、 から を削除してcurrentViewからtarget、新しいパネルを追加することです。

これがあなたの2枚のパネルなら...

JPanel target = new JPanel();
JPanel currentView = new JPanel();

currentViewそして、あなたはそのtargetようなものを追加します...

target.add(currentView);

次に、パネルを変更するには、既存のパネルを から削除し、新しいパネルtargetを追加する必要があります...

target.remove(currentPanel);
currentPanel = new JPanel();
target.add(currentPanel);
于 2012-05-21T14:33:29.713 に答える
1

また、CardLayout を使用したくない場合は、JPanel を新しい JPanel にして、revalidate() を呼び出すだけです。

于 2012-05-21T16:35:51.217 に答える