好的,这有点乱:
我正在使用Netbeans,我有一个名为ParameterUI的主类。 (这是一个GUI) 这个类在它的GUI上有一些滑块,因为它们是私有的,我有一个叫做getBounds()的方法。我不想弄乱我的GUI,所以基本上所有计算东西的重要方法都在另一个名为Structure的类中。因此,ParameterUI调用Structure中的一个方法,该方法在其自身内部调用另外几个方法,其中一个方法调用getBounds。
问题是getBounds不能是静态的,但如果不是,我就不能调用它。
在ParameterUI.class中:
public int[] getBounds () {
int[] bounds = new int[2];
bounds[0] = jSlider2.getMinimum();
bounds[1] = jSlider2.getMaximum();
return bounds;
}
在Structure.class中:
private static void myMethod (Graphics g, double[] planet, long mass) {
int[] bounds = ParameterUI.getBounds(); //<-- doesn't work
}
使myMethod非静态似乎也没有帮助。 我担心虽然我知道静态与非静态的基础知识,但我还没有用类等编程。
编辑:基本上,我知道问题是什么,我正在寻找一种更好的解决方法。
答案 0 :(得分:2)
将ParameterUI实例传递给静态方法
private static void myMethod (ParameterUI param, Graphics g, double[] planet, long mass) {
int[] bounds = param.getBounds(); //<-- doesn't work
}
但是,您可能需要重新考虑一个设计,在该设计中,您要调用其他类的静态方法,以便计算有关第一个类的内容。这表明您的UI类所需的所有逻辑都不包含在其中,并且公共静态方法导致难以测试代码。
答案 1 :(得分:2)
静态与非静态
静态意味着您可以访问方法而无需实例化该类的对象。
非静态意味着您只能从该类的实例访问方法。
您需要做的是确定您是否希望ParameterUI类中的方法是静态的。
如果您将get bounds更改为Static,那么它将起作用。
public static int[] getBounds () {
int[] bounds = new int[2];
bounds[0] = jSlider2.getMinimum();
bounds[1] = jSlider2.getMaximum();
return bounds;
}
你可能想先考虑一下。
答案 2 :(得分:1)
基础知识:您无法从静态方法访问非静态成员。
您需要在静态方法
中创建实例或将ParameterUI的实例传递给/