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

question-closed Java GUI ActionListener

Object Storage Arubacloud
0 głosów
218 wizyt
pytanie zadane 8 stycznia 2017 w Java przez Przemyslaw Użytkownik (610 p.)
zamknięte 10 stycznia 2017 przez Przemyslaw

Witajcie, mam następujący problem. Tworzę symulator salonu kosmetycznego. Chciałbym aby cechy klientów takie jak imię, wzrost, kolor włosów były losowe. Chcę aby taki klient mówił o swoich danych w ActionListenerze. Stworzyłem metodę:

public static void losowanieklienta(){

        Random r1 = new Random();
        int e1 = r1.nextInt(12);
        Random r2 = new Random();
        int e2 = r2.nextInt(3);
        Random r3 = new Random();
        int e3 = r3.nextInt(5);
        Random age = new Random();
        int e4 = age.nextInt(25)+17;
        Random height = new Random();
        int e5 = height.nextInt(25)+150;
        Random wages = new Random();
        int e6 = wages.nextInt(40)+25;


    }

I teraz wkładam ją do ActionListenera:

textField1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                Client.losowanieklienta();
                Client klientka = new Client();
                System.out.print("Dzień Dobry! Nazywam się "+ name[e1]+ "." + "Mam " + hairLenght[e2] + " " + hairColor[e3]);

            }
        });
    }

Parametry "name" "hairLenght" "hairColor" są przypisane do do klasy Client, jednak wyświetlany jest błąd: "Cannot find symbol". Czy ktoś może pomóc/bądź naprowadzić mnie na rozwiązanie mojego problemu? Jak zrealizować moje zadanie?

komentarz zamknięcia: Problem rozwiązany.
1
komentarz 8 stycznia 2017 przez mbabane Szeryf (79,280 p.)
edycja 8 stycznia 2017 przez mbabane

cos sobie namieszales, popatrz: te wszystkie e1, e2 itd. (taka sugestia, staraj sie stosowac nazwy zmiennych aby cos mowily (zwlaszcza jesli pokazujesz kod komus zupelnie nie zwiazanym z tematem), takie e1, e2 co to oznacza? , jesli odpalisz ten kod za miesiac bedziesz musial przewalic pol kodu zeby dowiedziec sie co to oznacza, np. zastosowales nazwe age i juz o wiele wiecej to mowi niz jakies r2), to sa zmienne lokalne metody losowanieklienta() wiec jakim sposobem ma byc to wszystko widoczne gdzies tam w zupelnie innym miejscu? 

A analizujac jeszcze kod tego ActionListnera, to czy nie jest dziwne ze najpierw losujesz dane klienta (linijka 3 w drugim bloku z kodem) a pozniej tworzysz nowego klienta (4 linijka)?

I rozumiem tez ze jest to aplikacja okienkowa, wiec jakim cudem chcesz wywolac html'a w konsoli (5 linijka) uzywajac tagu <span></span> (chyba ze strzelilem jakas gafe i o czyms nie wiem, ale w zadnej ksiazce od javy tego nie wdzialem)? 

Aha i Random rand = new Random() wystarczy ze raz zastosujesz, potem mozesz korzystac z tej jednej instancji, nie trzeba do kazdego losowania tworzyc nowej instancji tej klasy.

komentarz 8 stycznia 2017 przez Przemyslaw Użytkownik (610 p.)
Okej, jasne, te e1, e2 wszystko będzie do poprawy. To jest na ten moment. <span></span> wpadł przypadkowo. Kod ActionListenera jest właśnie poprawiany.
1
komentarz 9 stycznia 2017 przez mbabane Szeryf (79,280 p.)

z klientami mozesz zrobic np. tak:

Klasa z danymi klienta:

public class Client
{
    private int height;
    private int weight;
    private int age;
    
    
    public Client()
    {
        
    }

    public Client(int height, int weight, int age)
    {
        this.height = height;
        this.weight = weight;
        this.age = age;
    }
 
    
    public static Client makeRandClient()
    {
        Random rand = new Random();
        
        int height = rand.nextInt(150) + 25;
        int weight = rand.nextInt(60) + 35;
        int age = rand.nextInt(19) + 25;
        
        return new Client(height, weight, age);
    }
      
    /* ----------Settery Gettery -----------------*/
    public int getHeight()
    {
        return height;
    }

    public void setHeight(int height)
    {
        this.height = height;
    }

    public int getWeight()
    {
        return weight;
    }

    public void setWeight(int weight)
    {
        this.weight = weight;
    }

    public int getAge()
    {
        return age;
    }

    public void setAge(int age)
    {
        this.age = age;
    }    
}

Przyklad uzycia:

Client client = Client.makeRandClient();

System.out.println( "Klient:" );
System.out.println( "Wiek: " + client.getAge() );
System.out.println( "Wzrost: " + client.getHeight() );
System.out.println( "Waga: " + client.getWeight() );

 

komentarz 10 stycznia 2017 przez Przemyslaw Użytkownik (610 p.)
Dzięki bardzo, zadanie już ogarnięte, inaczej troszeczkę, ale podobnie. :)

1 odpowiedź

+1 głos
odpowiedź 8 stycznia 2017 przez Mateusz51 Nałogowiec (28,180 p.)
Jeśli dobrze rozumiem twoją funkcjie. To losowanie klienta tak naprawde nic nie robi. Tzn deklaruje sobie jakieś zmienne, przypisuje do nich jakieś wartości. ale poza tą funkcją to wszystko znika i nie masz żadnej możliwości dostania się do tych zmiennych.
komentarz 8 stycznia 2017 przez Przemyslaw Użytkownik (610 p.)

Właśnie, więc próbowałem to przerobić tak:

public void losowanieklienta(){

        Random r1 = new Random();
        int e1 = r1.nextInt(12);
        Random r2 = new Random();
        int e2 = r2.nextInt(3);
        Random r3 = new Random();
        int e3 = r3.nextInt(5);
        Random age = new Random();
        int e4 = age.nextInt(25)+17;
        Random height = new Random();
        int e5 = height.nextInt(25)+150;
        Random wages = new Random();
        int e6 = wages.nextInt(40)+25;
        System.out.print("Dzień Dobry! Nazywam się "+ name[e1]+ "." + "Mam " + hairLenght[e2] + " " + hairColor[e3]);

    }

Jednak teraz ta metoda nie może być statyczna, więc nie mam możliwości użycia jej w ActionListenerze. 

 

komentarz 8 stycznia 2017 przez Mateusz51 Nałogowiec (28,180 p.)
Możesz użyć ją w action listenerze ale wpierw musisz stworzyć obiekt zawierajacy tę metode.

Podobne pytania

0 głosów
1 odpowiedź 127 wizyt
pytanie zadane 28 czerwca 2020 w Java przez manager96 Bywalec (2,050 p.)
0 głosów
1 odpowiedź 333 wizyt
pytanie zadane 24 maja 2020 w Java przez zdridox Nowicjusz (210 p.)
0 głosów
3 odpowiedzi 506 wizyt
pytanie zadane 25 czerwca 2018 w Java przez trebuhhh Użytkownik (740 p.)

92,568 zapytań

141,420 odpowiedzi

319,622 komentarzy

61,954 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!

...