Jakiś czas temu napisałem mały program do przeglądania/przetwarzania obrazów z Javą, mini-Photoshopem, jeśli zechcesz.Używanie Java klasy wewnętrznej i tworzenie instancji
Chciałem mieć rozwijane menu, w którym mógłbym wybrać, które z obrazów, które otworzyłem, będą "na stole", tj. pokazano i zastosowane metody. Chciałem, aby nazwa obrazu była nazwą elementu JMenuItem wyświetlanego w menu. Chciałem też, aby pojawił się nowy przycisk, gdy dodam nowy obraz.
Zastanowiłem się przez pewien czas i ostatecznie opracowałem to rozwiązanie, nową klasę, która obsługuje tworzenie nowego przycisku po dodaniu obrazu. Kod jest następujący:
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();
}
});
}
}
Działa to tak, jak powinno. Dla tej strony przetłumaczyłem oryginalne fińskie nazwy na angielski, zastanawiam się, dlaczego napisałem je po portugalsku ... Ssałem nazywanie rzeczy.
Metoda add ma być wielokrotnie wywoływana, gdy program jest uruchomiony.
To, czego nie rozumiem, to klasyczna implementacja interfejsu ActionListener, a mianowicie jego kompilacja i sposób działania.
Jeśli mam dwa przyciski na moim interfejsie i chcę, żeby robili różne rzeczy, potrzebuję dwóch klas wewnętrznych, po jednej dla każdego, z których każda ma własną wewnętrzną implementację interfejsu ActionListener. Ale w moim kodzie jest jedna klasa, która wydaje się wykonywać pracę wielu, jeden posłużył się do tego plikiem klasy, ale końcowy rezultat działa tak, jakby było ich wiele.
Czy ktoś może mnie uczyć w tej sprawie? Czy ten kod to jedna klasa, a nowe przyciski są jego instancjami? Czy to są nowe zajęcia? Czy powinien istnieć nowy plik .class dla każdego nowego przycisku? etc ...
Re. nazywanie: 'new' jest zastrzeżonym słowem, więc powinieneś użyć czegoś innego dla tej zmiennej JMenuItem. – assylias
@peter Naprawi to. – Valtteri
Należy również rozważyć "Akcja", jak pokazano w tym ['FileMenu'] (http://stackoverflow.com/a/4039359/230513) – trashgod