要建议的Window.this,但如果你只是在组件感兴趣,那么为什么不:
public class Engine {
Component[] components;
public Engine(Component[] components){
this.components = components;
}
}
public class Window() {
JButton btnDownload;
JButton btnUpload;
public Window() {
btnDownload = new JButton("Download");
btnDownload.setName("Download");
btnUpload = new JButton("Upload");
btnUpload.setName("Upload");
btnDownload.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
// create engine passing reference to only the components...
Engine en = new Engine(Window.this.getComponents());
// rest of your code
}
}
public Component[] getComponents() {
return new Component[] { btnDownload, btnUpload };
}
}
其中component是java.awt.Component中,或者你可以从摆动使用的JComponent。
如果你做了这样的事情,然后我猜每个组件将只通过名字意义。所以你可以在每个组件上使用setName方法(在Window构造函数中显示),并在引擎中执行某些操作以便在需要时通过名称访问它们 - 这可能很糟糕。无论哪种方式,您都需要引用引擎中的不同组件。如果上述示例不适合,您可以使用其他类或接口来公开组件。
Engine e = new Engine(new MyParams(Window.this.btnDownload, Window.this.btnUpload));
引擎构造:
public Engine(MyParams myParams) {
this.myParams = myParams;
}
访问这些引擎:
this.myParams.getUpload().setText("Engine class has changed me");
完全符合CUGA同意关于通过在窗口
public class MyParams {
private Component download;
private Component upload;
public MyParams(Component download, Component upload) {
this.upload = upload;
this.download = download;
}
public Component getUpload() {
return this.upload;
}
public Component getDownload() {
return this.download;
}
}
创建引擎时
然后参考。这种违背良好的类设计封装技术。
只是想到的食物
你需要回到OOP的基础知识。投票结束。 – mre