は、なぜない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 e = new Engine(new MyParams(Window.this.btnDownload, Window.this.btnUpload));
エンジンコンストラクタ:
this.myParams.getUpload().setText("Engine class has changed me");
は完全にウィンドウを渡しについてCUGAに同意:エンジンにおけるそれら
public Engine(MyParams myParams) {
this.myParams = myParams;
}
アクセス参照。この種のものは、優れたクラスのカプセル化技術に反するものです。
思考のための食べ物
OOPの基本に戻る必要があります。投票を終了する。 – mre