0

JPanel を拡張するクラス TaskPane にメソッドがあります。

void updateGui(TaskList tl) { 
    removeAll();
    for (int x = 0; x <= tl.getTaskCount(); x++){
        add(new JCheckBox(tl.getTask(x).getName()));
    }
    setVisible(true);
}

removeAll(); などの非静的メソッド。静的メソッドから呼び出すことはできないので、TaskPane.updateGui(); のような他のクラスからこのメソッドにアクセスできるようにするにはどうすればよいですか?

4

3 に答える 3

0

このメソッドを静的コンテキストから使用可能にすることはできません。必要なことは、クラスのインスタンスをメソッドにプッシュする方法を見つけることですTaskPane.test()

于 2013-07-27T15:14:07.063 に答える
0

ボトルに水を入れたり、車を運転したりするには、ボトルに水を入れるか、車を運転する必要があります。

Java オブジェクトと同じです。オブジェクトのメソッドを呼び出せるようにするには、オブジェクトへの参照が必要です。したがって、何らかの方法で、メソッドには更新するTaskPane.test()への参照が必要です。TaskPane投稿したコードでは、より具体的な答えを出すのは困難です。新しい TaskPane インスタンスを作成するのは の責任TaskPane.test()かもしれませんし、引数として TaskPane インスタンスを受け取る必要があるかもしれません。

于 2013-07-27T15:14:33.810 に答える
0

私が正しければ、updateGui方法はvoid static updateGuiです。ここで、updateGui メソッドをそのまま作成するとstatic、クラスによって所有されます。つまり、すべてのオブジェクトがメソッドの同じコピーを共有しますupdateGui。そのようなメソッドは、それがオブジェクト固有の動作ではなくユーティリティ メソッドである場合に作成されます。したがって、私の意見では、次のように方法を変更する必要があります。

public static void updateGui(TaskPane tp, TaskList tl) { 
    tp.removeAll();
    for (int x = 0; x <= tl.getTaskCount(); x++){
        tp.add(new JCheckBox(tl.getTask(x).getName()));
    }
    tp.setVisible(true); 
}

そして、次の方法でこのメソッドを呼び出すことができます:

TaskPane.updateGui(object of TeskPane, object of TaskList);

TaskPaneまたは、クラス内でこのメソッドを具体的に呼び出す場合は、次のように呼び出すことができます。

updateGui(this,object of TaskList);
于 2013-07-27T15:22:47.773 に答える