例如,我有一个类ImageViewer,它在面板中显示图片。然后我有另一个类ImageChooser,它允许您从目录中选择一个图像,然后在文本字段中显示文件路径字符串。在那个类中,我有一个私有内部类,当单击一个名为displayButton的按钮时,它会调用ImageViewer中的方法来显示图像。
private class displayButtonListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
displayImage(imageTextField.getText());
}
}
我的问题是方法displayImage在ImageViewer类中,不能由ImageChooser类访问。
public void displayImage(String imageFile) {
ImageIcon picture = new ImageIcon(imageFile);
imageLabel.setIcon(picture);
}
两个类都扩展了JPanel(我有一个使用BorderLayout管理器在框架中使用每个面板的主类),因此我无法通过继承访问ImageViewer中的方法。
我知道我可以组合这两个类或使用不同的布局管理器,但我想知道他们是否是另一种方法,以防我再遇到这样的事情。
答案 0 :(得分:0)
如果我理解您的问题,您可以保留ImageViewer
引用,请遵循Java命名约定。等等,
private class DisplayButtonListener implements ActionListener {
public DisplayButtonListener(ImageViewer viewer) {
this.iv = viewer;
}
private ImageViewer iv;
public void actionPerformed(ActionEvent e) {
if (iv == null) return;
iv.displayImage(imageTextField.getText());
}
}
答案 1 :(得分:0)
因为您正尝试将A类方法与B类一起使用。
让我们说A类有a1(),a2(),a3()等方法 B类有方法b1(),b2(),b3()
你不能在B类的一种方法中做这样的事情。 a1() - >这将引用this.a1() - > B.a1()
B类没有名为a1()的方法。
在你的情况下,我认为你应该在ImageChooser的构造函数中实例化一个ImageViewer类,然后调用它,例如:
//ctor of ImageChooser
ImageViewer a = new ImageViewer();
然后将displayImage称为
a.displayImage();
答案 2 :(得分:0)
将import packagename.classname;
(请注意:您不必将导入(如果他们在同一个包中)放在要访问该方法的类的顶部)并创建一个参考。
例:
methodClass.java:
package net.snugglesstuff.methods;
public class methodClass() {
public void sayHi() {
System.out.println("Hi");
}
}
useMethodClass.java:
package net.snugglesstuff.run;
import net.snugglesstuff.methods.methodClass;
public class useMethodClass() {
private static methodClass mc = new methodClass();
public static void main(String[] args) {
mc.sayHi();
}
}
主要班级应为net.snugglesstuff.run.useMethodClass
。结果应该(更新,确实有效)" Hi
"。
答案 3 :(得分:0)
假设您有以下类:
public class Foo {
//...
public void fooMethod() {
Bar bar = new Bar();
bar.barMethod();
}
//...
}
public class Bar {
//...
private class LoremIpsum {
public void loremIpsumMethod() {/*...*/}
}
//...
public void barMethod() {
LoremIpsum loremIpsum = new LoremIpsum();
loremIpsum.loremIpsumMethod();
}
}
在这种情况下,您可以通过实例化LoremIpsum
对象并调用其loremIpsumMethod
来Foo
来自Bar
barMethod
,LoremIpsum
依次实例化一个loremIpsumMethod
对象并调用其{{1}}。