Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[Problem] Znikający JButton


Rekomendowane odpowiedzi

Opublikowano

Witam

Chciałbym zrobić tak, żeby przycisk JButton pojawiał się na 0.5 sek., potem znikał na 0.5 sek. i tak w kółko przez minutę.

Zrobiłem sobie pętlę czasową, tylko nie za bardzo wiem co wpisać, żeby to działało.

 

public class Button implements ActionListener {

 

public Timer button;

public int f = 0;

public int g = 120;

 

public Button() {

button = new Timer(500, this);

button.start();

}

 

public void actionPerformed(ActionEvent arg) {

f++;

System.out.println("Pętla działa - tekst się wyświetla");

((JButton)arg.getSource()).setVisible(false); // ta linijka niestety nie działa, ale nie wiem jak zrobić, żeby przycisk znikał, np. gdy f będzie miało tylko wartości parzyste... a może jest jakiś prostszy sposób?

if (f == g) {

button.stop();

}

}

}

Opublikowano

Niestety błąd pokazuje, zmieniłem (!button.getVisible()); na (!button.isVisible()); błąd zniknął, ale i tak przy kompilacji nie działa. Poza tym nie chcę tworzyć nowego JButton, tylko wykorzystać ten co już mam utworzony w głównej klasie. Button() to konstruktor, który będę przywoływał w tej głównej klasie, gdzie mam już stworzony JButton, który właśnie ma się pojawiać i znikać.

Kombinowałem cały dzień z tym i mam już dość, teraz to mi się już nawet wykrzacza to co wcześniej działało :)

Opublikowano

On tworzy tylko nową referencje do tego obiektu. Nie tworzy nowego JButtona.

 

Kod jest troszkę dziwny :). Bo właściwie jak Ty tu chcesz wyłączyć/włączyć przycisk? Zrobiłeś tu listener, ale na co? Przecież przycisk nie jest źródłem eventu, tylko Timer. Pomyśl nad innym rozwiązaniem.

708121422388637873334.png

Opublikowano

Poradziłem sobie używając metody thread. Dzięki za pomoc.

Zamieszczam kod w razie gdyby ktoś kiedyś miał podobny problem.

 

Runnable showButton = new Runnable() {

public void run() {

try {

while (true) {

button.setVisible(true);

Thread.sleep(1000L);

}

}

catch (InterruptedException iex) {}

}

};

Runnable hideButton = new Runnable() {

public void run() {

try {

while (true) {

button.setVisible(false);

Thread.sleep(2000L);

}

}

catch (InterruptedException iex) {}

}

};

Thread thr1 = new Thread(showButton);

Thread thr2 = new Thread(hideButton);

thr1.start();

thr2.start();

Opublikowano

Poradziłem sobie używając metody thread. Dzięki za pomoc.

Zamieszczam kod w razie gdyby ktoś kiedyś miał podobny problem.

 

Runnable showButton = new Runnable() {

public void run() {

try {

while (true) {

button.setVisible(true);

Thread.sleep(1000L);

}

}

catch (InterruptedException iex) {}

}

};

Runnable hideButton = new Runnable() {

public void run() {

try {

while (true) {

button.setVisible(false);

Thread.sleep(2000L);

}

}

catch (InterruptedException iex) {}

}

};

Thread thr1 = new Thread(showButton);

Thread thr2 = new Thread(hideButton);

thr1.start();

thr2.start();

:O 2 wątki do czegoś takiego dfq ;o

 

Wystarczy takie coś:

U6tsDzH.png

Opublikowano

@Up - też dziwny kod. Najprościej byłoby tak:

new Thread(){
	@Override
	public void run() {
		while(true){
			button.setVisible(!button.isVisible());
			try {
				sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	};
}.start();

708121422388637873334.png

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...