少し前に、私は小さな画像ビューアー/処理プログラムを Java (ミニ Photoshop) で書きました。
開いた画像のどれを「テーブル上」に置くかを選択できるドロップダウンメニューが必要でした。示され、メソッドが適用されます。イメージの名前を、メニューに表示される JMenuItem の名前にしたかったのです。また、新しい画像を追加するときに新しいボタンを表示したいと考えていました。
私はしばらくこれを疑問に思っていましたが、最終的にこのソリューションを作成しました。これは、画像が追加されたときに新しいボタンの作成を処理する新しいクラスです。コードは次のとおりです。
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
public class ImageList{
private ArrayList<JMenuItem> list;
private ImageHandler main;
private ImageLevel img;
public ImageList() {}
public void setHandler(ImageHandler hand) {
main = hand;
img = main.getImg1();
}
public void add(Buffer addi) {
final String added = addi.getName();
JMenuItem uusi = new JMenuItem(added);
main.getMenu5().add(uusi);
uusi.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
img.setBuffer(added);
main.getScr().updateUI();
}
});
}
}
これは正常に機能します。このサイトでは、元のフィンランド語の名前を英語に翻訳しました。なぜ最初にフィンランド語で書いたのだろうか...名前を付けるのが苦手です。
メソッド add は、プログラムの実行中に複数回呼び出されることになっています。
私が実際に理解できないのは、インターフェイス ActionListener の内部クラスの実装、つまりそのコンパイルとその動作です。
インターフェースに 2 つのボタンがあり、それらに異なることをさせたい場合、それぞれに 1 つずつ、2 つの内部クラスが必要で、それぞれがインターフェース ActionListener の独自の内部実装を持っています。しかし、私のコードには、多くの作業を行うように見える1つのクラスがあり、1つのコンパイルされた .class-file がありますが、最終結果は多くの場合のように機能します。
誰かがこの問題について教えてくれますか? このコードは 1 つのクラスであり、新しいボタンはそのインスタンスですか? それらは新しいクラスですか?新しいボタンごとに新しい .class-file が必要ですか? 等...