Menu w javie

0

Mam takie proste pytanie czy tworząc aplikację w javie np. budując menu tworzyć osobne klasy dla poszczególnych elementów menu? Np. zamiast:

JMenuItem item = new JMenuItem("Jakis item");

tworzyć własne klasy w stylu:

NewFileItem newFileItem = new NewFileItem("Nowy plik");

 
class NewFileItem extends JMenuItem {
    NewFileItem() {
        super();

        this.addActionListener(...);
        ...
    }
}

Skłaniam się ku drugiej opcji.

1

według mnie to zależy
jeśli chcesz dodać jakąś funkcjonalność (rozszerzyć jak sama czynność mówi) klase JMenuItem to owszem - twórz własne opakowanie, ale jeśli potrzebujesz po prostu zrobić menu to: KISS (googluj) :)

0

W zasadzie to na razie nie mam potrzeby tworzenia nowych funkcjonalności tworzenie własnych klas elementów menu po prostu wydaje mi się nieco wygodniejsze i bardziej przejrzyste. Bo jeśli tworzę rozbudowane menu nie muszę przeglądać kodu w poszukiwaniu konkretnego przycisku, kiedy chcę zmienić w nim np. action listenera, tylko otwieram plik z klasą odpowiedniego itemu i tam zmieniam. Ale wolę poradzić się profesjonalistów ;)

0

@cannabis profesjonalistą to bym siebie, jeszcze, nie nazwał :D
pomysł masz dobry, jesli chcesz implementować własną klasę to można i tak. dawno nie pisalem w swingu, ale cos tam pamietam. zeby te klasy GUI nie byly takie gigantyczne, to na pewno actionlistenera robiłem własnego, a tworzenie kolejnych kontrolek itp. to byly osobne metody w klasie ramki ktore "formowały" mi jakis Component a potem tylko w konstruktorze dodawałem to co zwróciła poszczególna metoda.
Teraz sobie tak myśle, że stworzenie klasy/klas (trzebaby to jakoś ustrukturyzować) która byłaby czymś w rodzaju "modelarza" też mogłoby być czymś dobrym
troche podchodzące pod wzorzec fabryki

0

@cannabiis

Jeśli zamierzasz tworzyć własne klasy, żeby tylko napisać konkretną implementację ActionListenera to robisz błąd. Jeśli już, to po prostu napisz klasy, które będą konkretnymi implementacjami handlerów, np:

	class Button1ItemHandler implements ActionListener {
		// handle logic
	}

Jeśli nie zamierzasz rozszerzać funkcjonalności JMenuItem, to takie podejście powinno wystarczyć. Skomplikowaną logikę, która powinna się dziać po akcji użytkownika będziesz mógł trzymać właśnie w handlerach.

0

Ok dzięki za odpowiedzi. Czyli rozumiem, że jeśli tworzę np. okienko w nim menu, w nim kilka podmenu a w każdym podmenu ileś tam opcji to tworzę to wszystko w klasie głównego okienka?
Bo jeżeli menu jest skomplikowane to robi się ta klasa trochę duża.

1 użytkowników online, w tym zalogowanych: 0, gości: 1