Vor einiger Zeit schrieb ich ein kleines Bildbetrachter/Verarbeitungsprogramm mit Java, ein Mini-Photoshop, wenn Sie so wollen.Java innere Klasse Verwendung und Instanziierung
Ich wollte dort ein Drop-Down-Menü, wo ich wählen könnte, welches der Bilder, die ich geöffnet habe, wäre "auf dem Tisch", dh. gezeigt und Methoden angewendet auf. Ich wollte, dass der Name des Bildes der Name des JMenuItem ist, das im Menü angezeigt wird. Ich wollte auch eine neue Schaltfläche, wenn ich ein neues Bild anlege.
Ich fragte mich seit einiger Zeit und schließlich diese Lösung, eine neue Klasse, die die Erstellung der neuen Schaltfläche behandelt, wenn ein Bild hinzugefügt wird. Der Code lautet wie folgt:
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();
}
});
}
}
Dies funktioniert, wie es sollte. Für diese Seite übersetzte ich die ursprünglichen finnischen Namen ins Englische, wundere mich, warum ich sie ursprünglich auf Finnisch geschrieben habe ... Ich sauge an der Namensgebung.
Methode hinzufügen soll während des laufenden Programms mehrfach aufgerufen werden.
Was ich nicht wirklich verstehen kann, ist die innere Klassenimplementierung der Schnittstelle ActionListener, nämlich seine Kompilierung und wie es funktioniert.
Wenn ich zwei Tasten auf meiner Schnittstelle habe und ich möchte, dass sie verschiedene Dinge tun, brauche ich zwei innere Klassen, eine für jede, jede hat seine eigene innere Implementierung der Schnittstelle ActionListener. Aber in meinem Code gibt es eine Klasse, die die Arbeit von vielen zu erledigen scheint, eine kompilierte .class-Datei dafür, aber das Endergebnis funktioniert, als ob es viele wären.
Kann mich jemand zu diesem Thema unterrichten? Ist dieser Code hier eine Klasse und neue Schaltflächen sind Instanzen davon? Sind sie neue Klassen? Sollte es für jede neue Schaltfläche eine neue .class-Datei geben? etc ...
Re. naming: 'new' ist ein reserviertes Wort, daher sollten Sie für diese Variable JMenuItem etwas anderes verwenden. – assylias
@peter Wird das beheben. – Valtteri
Betrachten Sie auch "Action", wie in diesem ['FileMenu'] (http:// Stackoverflow.com/a/4039359/230513) – trashgod