Witamy na forum PC Format Zapraszamy do REJESTRACJI


Użytkownicy przeglądający ten wątek: 1 gości

Oczekiwanie na Akcje przycisku

#1
Oczekiwanie na Akcje przycisku
Witam przedstawie kod i wyjaśnię o co mi chodzi:

Kod:
Scanner scan = new Scanner(InputStream.in);
while(true) {
   scan.nextLine();
}
W powyższym przykładzie mamy pętlę, pętla oczekuje na reakcję użytkownika(wprowadzenie danych), po wprowadzeniu danych wykonuje kolejny obieg itd...
Teraz zamiast klasy JScanner mamy przycisk klasy JButton, i jak sprawić aby każdy obieg pętli był wymuszony poprzez kliknięcie przycisku klasy JButton ?(Czyli każde kliknięcie przycisku to jeden obrót pętli), tak jak to się dzieje z klasą JScanner(wprowadzenie danych, enter = obrót pętli). Myślę ,że jasno wytłumaczyłem o co mi chodzi.

Za każdą pomoc będę wdzięczny a najlepiej za kawałek kodu który spełniał by taki warunek.
Pozdrawiam
 System operacyjny: windows_eight Przeglądarka: firefox
#2
RE: Oczekiwanie na Akcje przycisku
Klasa JButton ma możliwość ustawienia słuchacza, który będzie reagował na zdarzenia związane z przyciskiem. Poczytaj trochę https://stackoverflow.com/questions/2848...on-in-java
 System operacyjny: windows_ten Przeglądarka: firefox
#3
RE: Oczekiwanie na Akcje przycisku
Koneton dzięki za odpowiedź, ale niestety ActonListener nie zda egzaminu próbowałem(próbowałem już tego wcześniej stąd moja wizyta na forum bo nie przyniosło oczekiwanych rezultatów) też innych EventListenerów
ale żaden nie odpowiada warunkom jakie podałem wyżej np.: po prostu pętla przeskakuję dalej (nie czeka aż kliknę przycisk i dopiero przeskoczy) tak jak mówiłem wyżej chodzi mi o tą samą sytuacje która spełnia new Scanner().nextLine().

rozumiem że jeśli chodzi o wykorzystanie ActionListenera chodziło ci o coś takiego:
Kod:
while(true){

  button.addActionListener(new ActionListener() {
           @Override
           public void actionPerformed(ActionEvent e) {
              
           }
  });
 
}
to co widać powyżej nie zatrzyma tej pętli będzie chodzić dalej w kółko, jeśli miałeś coś innego na myśli proszę daj znać.
Dziękuję i pozdrawiam
 System operacyjny: windows_eight Przeglądarka: ie
#4
RE: Oczekiwanie na Akcje przycisku
A czy nie mógłbyś wykonać instrukcji
Kod:
scan.nextLine();
wewnątrz słuchacza, skoro kliknięcie ma i tak wymusić pojedynczą iterację pętli?

 System operacyjny: linux_ubuntu Przeglądarka: firefox
#5
RE: Oczekiwanie na Akcje przycisku
Dokładnie, mając ActionListener możesz w nim ustawić wywołanie tego co masz w pętli. Sama pętla nie jest już do niczego potrzebna.
 System operacyjny: windows_ten Przeglądarka: firefox
#6
RE: Oczekiwanie na Akcje przycisku
Nie jestem specjalistą od Javy, raczej bawię się C#, ale przyszło mi do głowy jeszcze inne rozwiązanie. Nie wiem, czy lepsze. Po prostu inne.

Tworzysz PRZED pętlą zmienną typu boolean, i wstępnie ustawiasz ją na false.
Następnie w obsłudze przycisku zmieniasz ją na true, następnie w pętli odczytujesz tą zmienną. Jeśli jest true, przeskakujesz do następnej iteracji (czy linii), i z powrotem ustawiasz zmienną na false. Zaznaczam, że piszę to totalnie z głowy, bez sprawdzenia. Ale myślę, że to może zadziałać, i jest dosyć proste.
Pozdrawiam.
Ajgor
 System operacyjny: windows_ten Przeglądarka: chrome
#7
RE: Oczekiwanie na Akcje przycisku
No proste to nie jest. Po pierwsze, pętla musi działać w oddzielnym wątku. Po drugie musiałbyś zmienne uodpornić na hazard (ogólnie jest to proste, ale musisz wiedzieć jak i dobrze byłoby to rozumieć). Po trzecie, jaki miałoby to mieć sens? Jak rozumiem, to co jest wewnątrz pętli, ma być wykonane po kliknięciu. Zatem wystarczy umieścić wywołanie środka pętli w akcji przycisku i gotowe. Pętla nie ma tutaj żadnej racji bytu, bo jest to program zdarzeniowy, a nie liniowy, gdzie pętla jest konieczna do podtrzymania działania.
 System operacyjny: windows_ten Przeglądarka: firefox
#8
RE: Oczekiwanie na Akcje przycisku
zatrzymania pętli w oczekiwaniu na zdarzenie
 Witam
Koneton,Szachisto,Ajgor chcę podziękować za zainteresowanie.
Szachisto wykonanie instrukcji wewnątrz słuchacza też nie przyniesie oczekiwanego rezultatu już próbowałem, ale
można pokombinować wstawiając ją przed słuchacza
Kod:
checkButton.addActionListener(new ActionListener() {
               {
                   new Scanner(new InputStream(System.in).nextLine();
               }
               @Override
               public void actionPerformed(ActionEvent e) {
                    
                }
 });
tylko w ten sposób scanner pobiera dane z konsoli ( dane + enter = zatwierdzenie)co zrobić aby pobierał ( kliknięcie przycisku ), pokombinuje nad tym choć chyba jestem na to za cienki.
Ajgor też to przerabiałem, niestety pętla która jest uruchomiona nie da mi tej zmiennej zmienić , bo cały czas jest w obiegu nie ma tu tego magicznego "zatrzymania pętli w oczekiwaniu na zdarzenie" próbowałem z instrukcjami if,break i continue ale jakoś też nic z tego.

Koneton też myślałem o wątkach, rozumiem pojęcie hazardu i co się z tym wiąże, ale wydawało mi się dziwne aby nie można było na przycisku ustawić "zatrzymania pętli w oczekiwaniu na naciśnięcie przycisku".
A co do sensu tego bytuOczko to piszę sobie mały słownik do języka angielskiego, program ma menu okienkowe z zakładkami w którym wprowadzam,usuwam dane i chcę aby program odpytywał mnie i sprawdzał moje odpowiedzi.
Z tym że zaznaczyłem jeszcze czy tłumaczenia mają być angielsko-polskie czy polsko-angielskie, z ilu słówek ma odpytywać i ile razy powtarzać błędnie wpisane słowo.
Jako że łącze się z bazą MySql a tam mam cały słownik, a struktura do której pozyskuje dane z bazy ma postać:
Kod:
new HashMap<SlownikPolskoAngielski,Integer>();

a tu klasa SlownikaPolskoAngielski:
Kod:
class SlownikPolskoAngielski{
   private String polski;
   private String angielski;

   public SlownikPolskoAngielski(String pol,String ang) {
       this.polski = pol;
       this.angielski = ang;
   }

   public String getPolski() { return polski; }
   public String getAngielski() { return angielski; }
}

dane z HashMapy obsługuje w pętli która iteruje ilość razy wskazaną przez użytkownika(wpisaną ilość słówek do odpytania) Integer w HashMap to numer strony z zeszytu(słówka są wprowadzane z mojego starego zeszytu = każda zapełniona strona słówkami to kolejna wartość Integer)Oczko.
Mam 2 pola JTextFiel 1 JTextArea i 2 JButton, po wciśnięciu przycisku start program powinien w pętli o ilości iteracji wskazanej przez usera(ilość słówek z której user chce zostać odpytany) wpisać słówko do JTextField(polskie lub angielskie w zależności od tego co wybrał użytkownik),które zostało pobrane z HashMapy, TU POWINNO NASTĄPIĆ ZATRZYMANIE PĘTLI, wpisuję swoją wersje tłumaczenia w drugie pole JTextField, i klikam przycisk Sprawdź który robi 2 rzeczy:
1. W zależności od poprawności wpisanej odpowiedzi wpisuje słowo i komentarz czy poprawne czy nie.
2. I pobiera kolejne słówko z pętli itd..

Wiem że taki opis niewiele pewnie da, ale program składa się z wielu klas i nie wiem czy stosownym było by zaśmiecać tu forum ale jeśli ktoś jeszcze będzie zainteresowany do dopisze do post'a klasy realizujące ten problem.

Program właściwie skończyłem a wyłożyłem się przy sprawdzaniu danych i wyświetleniu wszystkich słówek tłumaczenia zamiast słówko,sprawdzenie i kolejne słówko(PROGRAM PRZED WYŚWIETLENIEM KOLEJNEGO SŁÓWKA POWINIEN CZEKAĆ NA KLIKNIĘCIE PRZYCISKU SPRAWDZAM)...

Pozdrawiam wszystkich i dziękuję za zainteresowanieOczko
 System operacyjny: windows_eight Przeglądarka: ie
#9
RE: Oczekiwanie na Akcje przycisku
Trochę to chyba przekombinowane - po kliknięciu przycisku Start powinieneś ustawić stosowne pole w klasie (numer bieżącego słowa i liczbę słów do odpytania, ew. słowa przenieść do listy, żeby łatwiej sięgać do kolejnych słów), a kliknięcie przycisku sprawdzałbyś, czy tłumaczenie jest poprawne - jeśli tak, to zwiększasz numer bieżącego słowa i z tablicy wyciągasz kolejną parę itd.

 System operacyjny: linux_ubuntu Przeglądarka: firefox
Programy: Polecane / Nowe / Inne




Podobne wątki (Oczekiwanie na Akcje przycisku)
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  Unity-obsługa przycisku terminator 0 9269 20.02.2016, 21:55
Ostatni post: terminator
  [VB10]Wywoływanie akcji w systemi po naciśnięciu odpowiedniego przycisku michal16202 4 3379 08.11.2013, 09:49
Ostatni post: koneton
  [WinApi] Stworzenie przycisku i zamknięcie innego Kamil9132 0 2845 25.09.2011, 17:45
Ostatni post: Kamil9132

Skocz do:


Wybrane wątki (Oczekiwanie na Akcje przycisku)
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
Exclamation pac man c++ kacperson 4 4935 11.12.2020 16:10
Ostatni post: kacperson
  Kompilator C++ 17 Physicist 14 10241 26.11.2020 13:56
Ostatni post: Physicist
  Napisz program, który poprosi o podanie numeru PESEL. BigKundzi 1 5365 25.11.2020 15:02
Ostatni post: ptrick
  Nieprawidłowy format ciągu wejściowego. radman 9 6462 05.11.2020 22:08
Ostatni post: Bodzio Chomik
  Wybór języka Xyio 5 5966 30.10.2020 15:07
Ostatni post: bartexo23
  Skrypt usuwający pliki azds1 1 2881 13.10.2020 08:45
Ostatni post: Michu_PL
  Mam mały problem ze zrobieniem tego programu Asasin12PL 2 5573 12.10.2020 17:10
Ostatni post: Asasin12PL
  Skrypt pod sklep internetowy Talcia 6 15702 24.09.2020 22:20
Ostatni post: Ajgor
  Książki do nauki C# olek23 16 37091 28.08.2020 09:51
Ostatni post: Ajgor
  [VBA Excel] Wyszukiwanie wartości w kolumnie Pioro 2 9315 22.06.2020 18:27
Ostatni post: Pioro
  Validacja JS kolo48 3 10954 16.04.2020 14:06
Ostatni post: koneton
  Automatyczne wykonywanie czynności na stronie Fresher 0 9650 15.04.2020 20:53
Ostatni post: Fresher
  Visual Studio Code- zmiana folderu rozszerzeń Physicist 4 12022 05.04.2020 15:46
Ostatni post: Physicist
  Prośba o pomoc przy wyborze języka do konkretnego projektu. romands 6 11477 05.04.2020 14:07
Ostatni post: romands
Sad PhpMyAdmin w Mysql 8.0 Lauczi 3 10989 31.03.2020 16:34
Ostatni post: Lauczi