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.test()创建一个新的 TaskPane 实例的责任,或者它应该接收一个 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 回答