собирался предложить 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 };
}
}
Где Компонент является java.awt.Component, или вы можете использовать JComponent из колебания.
Если бы вы сделали что-то подобное, я думаю, что каждый компонент имел бы смысл только по имени. Таким образом, вы можете использовать метод setName (показанный в конструкторе Window) на каждом компоненте и делать что-то в движке для доступа к ним по имени, где это необходимо - что, возможно, плохо. В любом случае, вы хотите ссылку на различные компоненты в двигателе. Вы можете использовать дополнительный класс или интерфейс для предоставления компонентов, если приведенный выше пример не подходит.
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;
}
}
Затем при создании Engine:
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 относительно передачи ссылки в Window. Этот вид идет вразрез с хорошими методами инкапсуляции дизайна класса.
Просто пища для размышлений