• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jak skrócić kod?

Object Storage Arubacloud
+1 głos
548 wizyt
pytanie zadane 5 kwietnia 2016 w Java przez Aisekai Nałogowiec (42,190 p.)
Jak w temacie. Od niedawna, zacząłem się bawić w programowanie GUI. Na razie wszystko idzie (mam na myśli naukę) w miarę sprawnie. Ale nie o to chodzi. Jak skrócić ten kod? (Ostrzegam: Widok kodu może wywołać u niektórych padaczkę/epilepsję albo zapowietrzenie się czy też nieustanny śmiech - nie polecam oglądać w szkole/pracy) https://dpaste.de/3VNr

Tworząc każdy kolejny obiekt z ActionListenerem miałbym dodawać kolejnego else-if w ActionPermormed? Jakbym stworzył powiedzmy plansze (przycisków które można tylko raz nacisnąć [tak jak w statkach]) 9x9 ponumerowaną od 1-9 pionowo i od A-I poziomo, tak żeby po naciśnięciu przycisku sprawdzało coś dla np. A1, to musiałbym stworzyć 81 przycisków? Głównie chodzi mi o rozmieszczenie ich i o akcję po naciśnięciu przycisku. Wiem, że od tego służą Layouty, ale nie wiem czy da się zrobić tak, żeby te przyciski automatycznie rozmieszczały się na połowie okna.

Edit: Wiem, też, że można byłoby zrobić klasę i podawać wszystkie potrzebne parametry (jak setBounds) w konstruktorze - zaoszczędziłbym parę(naście) linii, ale kod by stracił na czytelności

PS: Patrząc na mój kod - dobrym wyborem byłby http://helion.pl/ksiazki/czysty-kod-podrecznik-dobrego-programisty-robert-c-martin,czykod.htm ?

3 odpowiedzi

+1 głos
odpowiedź 5 kwietnia 2016 przez Grzyboo Nałogowiec (28,860 p.)
wybrane 10 kwietnia 2016 przez Aisekai
 
Najlepsza

Ty stosujesz bardzo nieporęczną metodę, w której Twoja główna klasa implementuje ActionListener. Prawie zawsze lepszym rozwiązaniem jest stworzenie prywatnych klas:

public class okno extends JFrame {
    // ...
    
    private class DzialaniaListener implements ActionListener {
        private String dzialanie;
        DzialaniaListener(String dzialanie) {
            this.dzialanie = dzialanie;
        }

        public void actionPerformed(ActionEvent e) {
             // ...
        }
    }
}

I dla bDodaj, bOdejmij, bPomnoz, bPodziel dodajesz takie listenery:

bDodaj.addActionListener(new DzialaniaListener("+"));

 

I już masz uproszczony kod dla działań. W przypadku 9x9 przycisków po prostu robisz prywatną klasę wewnętrzną, która będzie przechowywać od A do I oraz od 1 do 9 i w zależności od tych wartości będzie wykonywać wszystko w jednej funkcji.

 

A Clean code jest absolutnym must-have dla każdego, kto chce na serio coś programować.

komentarz 6 kwietnia 2016 przez Aisekai Nałogowiec (42,190 p.)
Dzięki za poświęcenie czasu. Teraz już rozumiem ten sposób.
komentarz 6 kwietnia 2016 przez Grzyboo Nałogowiec (28,860 p.)
Raczej lepsze niż, żeby okno implementowało ActionListener ;p
komentarz 6 kwietnia 2016 przez Aisekai Nałogowiec (42,190 p.)
Ja dopiero co w GUI wchodzę, FXML - cokolwiek to jest - przyjdzie na to czas. Najpierw jeszcze dowiem się po co ta lambda
komentarz 6 kwietnia 2016 przez efiku Szeryf (75,160 p.)

FXML - cokolwiek to jest - przyjdzie na to czas

https://www.youtube.com/watch?v=K7BOH-Ll8_g Też GUI ;)

komentarz 10 kwietnia 2016 przez Aisekai Nałogowiec (42,190 p.)
elfik, czy JavaFX rzeczywiście jest lepsza od Swinga? Czy muszę instalować jakiś inny kompilator czy starczy mi eclipse? Opłaca mi się rzucić teraz swinga i uczyć się FX i FXML?
0 głosów
odpowiedź 5 kwietnia 2016 przez niezalogowany
Na pierwszy rzut oka nasuwają się tablice i pętle (te wszystkie identyczne buttony, labele, ...
0 głosów
odpowiedź 10 kwietnia 2016 przez bumpMind Gaduła (4,260 p.)

Hah co prawda bez epilepsji oraz nie okiełznanego śmiechu ale to prawda warto zapoznać się z podaną przez Ciebie książką. Jest nie tylko dobrym wyznacznikiem jeśli chodzi o porządek w kodzie ale również jako zwykła książka czyta się ją lekko i przyjemnie, jest napisana prostym językiem. 

Wracając do pytania jak skrócić kod po pierwsze warto zrobić funkcję do wstawiania i ustawiania przycisków czy też pól tekstowych i w pętli z odpowiednimi warunkami je dodawać. Kolejnym krokiem o którym wspomniał jeden z poprzednich postów jest dodanie klasy która będzie odpowiadać za ActionListner elementów również wpłynie to na ogólną czytelność kodu.

Zgodnie z wspomnianą wcześniej książką warto robić mniejsze funkcje które odpowiadają tylko za jedną rzecz tz. mając funkcję wstawPrzyciski() powinna ona tylko być odpowiedzialna za wstawianie przycisków do Twojego okna, natomiast wewnątrz niej nie powinieneś ich tworzyć, zamiast tego mógł byś wywoływać metodę generujPrzycisk() która stworzy element z odpowiednimi parametrami. Takie rozbicie kodu skróci go (może się okazać że nie znacznie chociaż to rzadkość) ale przede wszystkim sprawi że będzie bardziej czytelny, po samych nazwach metod będzie można określić kolejność czynności które Twój program wykonuje.

Nawiązując również do FXML jest on praktycznie nie odzownym elementem tworzenia aplikacji opartych na JavaFX, jest to następca Swinga którym warto się zainteresować gdyż zdecydowanie w nim aktualnie leży przyszłość Java GUI. Może to "lekkostronnicza(:P)" myśl ale uważam że można zacząć się go uczyć z pominięciem początkowego etapu jakim jest nauka Swinga gdyż wbrew pozorom jest to dość prosty sposób na tworzenie GUI, warto zapoznać się z kursem: JavaFX TheNewBoston (wystarczy dość skromna znajomość języka angielskiego, większość można zrozumieć na zasadzie efektów tego co zostało napisane) 

Ps. polecam ten kanał z powodu wielkiej ilości tutoriali na dość obszernym polu różnych języków programowania i nie tylko

Podobne pytania

0 głosów
4 odpowiedzi 1,295 wizyt
pytanie zadane 1 października 2020 w Java przez Nickowy3456 Użytkownik (610 p.)
0 głosów
1 odpowiedź 298 wizyt
pytanie zadane 12 maja 2018 w Java przez Paweł Celuch Początkujący (420 p.)
0 głosów
1 odpowiedź 532 wizyt
pytanie zadane 8 października 2017 w Java przez Hiskiel Pasjonat (22,830 p.)

92,579 zapytań

141,432 odpowiedzi

319,664 komentarzy

61,964 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...