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 8490 20.02.2016, 21:55
Ostatni post: terminator
  [VB10]Wywoływanie akcji w systemi po naciśnięciu odpowiedniego przycisku michal16202 4 2894 08.11.2013, 09:49
Ostatni post: koneton
  [WinApi] Stworzenie przycisku i zamknięcie innego Kamil9132 0 2362 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
  [JavaScript] Znajdowanie przedziału czasu rafal12999 0 3777 10.12.2019 17:58
Ostatni post: rafal12999
  Przekazywanie wskaźnika przez referencję w Qt Trojan3000 3 16146 10.12.2019 13:16
Ostatni post: Ajgor
  Proszę o pomoc w uzupełnieniu ankiety dt. Zawodu Programisty MaleMonki 0 4143 17.11.2019 12:47
Ostatni post: MaleMonki
  Spring framework – jakie strony polecacie do nauki? olek23 5 9711 15.11.2019 15:57
Ostatni post: Alsenas
  Programowanie windy (problem) w C++ mysza2323 2 9048 06.11.2019 23:04
Ostatni post: mysza2323
  Programy w C ~Anonim 1 9274 22.10.2019 17:48
Ostatni post: Szachista
  Wyświetlanie informacji z bazy danych na stronie www PitPlay 1 9665 16.09.2019 11:18
Ostatni post: Ajgor
  Błąd przy uruchamianiu programu w Java z wiersza poleceń Physicist 3 4806 30.08.2019 14:16
Ostatni post: Physicist
  Python z wiersza poleceń Physicist 15 25852 21.08.2019 20:14
Ostatni post: Physicist
  Transfer plików via FTP Visual Basic FireBytes 3 7308 15.08.2019 07:41
Ostatni post: Szachista
  Menu wysuwane z boku patryk67 1 9410 07.08.2019 12:43
Ostatni post: aht
  Visual Basic Excel l.całkowitą przedstawić w postaci szesnastkowej fugaz 4 11319 18.06.2019 21:36
Ostatni post: fugaz
  Nauka do Olimpiady Informatycznej? piotr0905 1 10728 08.06.2019 16:50
Ostatni post: wlisik
Ściana Prosta gra w Builder C++ Kiranek1 1 10794 31.05.2019 15:20
Ostatni post: Szachista
  Menu (Nie widoczne długie opisy) wanhelsing 5 12708 28.04.2019 19:31
Ostatni post: koneton