Jeden JButton kilka poleceń

0

Witam,
Nie wiem jak zrobić aby za pmocą jednego JButtona podpiąc kilka poleceń. Dokładniej miałoby to wyglądać tak:
jedno kliknięcie w JButton'a pokazuje mi się pierwszy JPanel
drugie kliknięcie w JButton'a pokazuje się drugi JPanel
itd

Czy wiecie jak zrobić użytkownicy takie coś?

0

Wystarczy, że w klasie wprowadzisz zmięnną, w której będziesz zapamiętywał numer kolejnego kliknięcia. Od tej zmiennej musisz uzależnić wyświetlanie paneli.

0

stosunkowo ładnym rozwiązaniem jest wymiana ActionListinera po każdym kliknięciu.
Pierwsze kliknięcie obsługa, wymiana obiektu słuchacza. Drugie kliknięcie to samo.

0

Koziołek a możesz podać kilka przykładów i/lub gdzie można o tym poczytać ?

0

proszę bardzo:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.LinkedList;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JFrame;

/**
 * Klasa - przykład wymiany {@link ActionListener}. Po każdym kliknięciu
 * przycisk ma zmieniony {@link ActionListener}. Opis problemu dostępny pod
 * adresem:<br />
 * <a href="http://4programmers.net/Forum/viewtopic.php?id=111342">
 * http://4programmers.net/Forum/viewtopic.php?id=111342</a>
 * 
 * @author koziolek
 * 
 */
public class ManyListinerButton {

	public static void main(String[] args) {
		// GUI - obiekty
		JFrame jf = new JFrame("Przykład wymiany listinera");
		JButton jb = new JButton("Listiner1");
		
		//Lista listinerów
		ManyListinerButton.lista.add(new Lisiner1());
		ManyListinerButton.lista.add(new Lisiner2());
		
		//inicjacja GUI
		jf.setSize(200, 200);
		jf.add(jb);
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		jb.addActionListener(ManyListinerButton.lista.get(0));
		jf.setVisible(true);
	}

	public static List<ActionListener> lista = new LinkedList<ActionListener>();
}

class Lisiner1 implements ActionListener{

	public void actionPerformed(ActionEvent e) {
		// źródło zdarzenia
		JButton jb = (JButton)e.getSource();
		// akcja
		jb.setText("Wykonano - Listiner1");
		// usunięcie listinera. KONIECZNE!!!! 
		jb.removeActionListener(jb.getActionListeners()[0]);
		// dodanie listynera		
		jb.addActionListener(ManyListinerButton.lista.get(1));
	}
	
}

class Lisiner2 implements ActionListener{

	public void actionPerformed(ActionEvent e) {
		JButton jb = (JButton)e.getSource();
		jb.setText("Wykonano - Listiner2");
		jb.removeActionListener(jb.getActionListeners()[0]);
		jb.addActionListener(ManyListinerButton.lista.get(0));
	}
	
}
0

Koziołek jest jeszcze taki problem w pierwszej części kodu ( w sumie to w tym główym) pokazuje mi się błąd non-static variable this cannot be referenced from a static context i te podkreślna na czerwono:
public class ManyListinerButton {
public static void main(String[] args) {
ManyListinerButton.lista.add(new Step1());
ManyListinerButton.lista.add(new Step2());
}
public static final List<ActionListener> lista = new LinkedList<ActionListener>();
}
Co mam z tym zrobić?

0

Dziwne bo kod kompiluje się poprawnie. Do lista odwołujesz się statycznie hm... ciekawe. Wklej cały komunikat błędu i cały kod klasy...

0

non-static variable this cannot be referenced from a static context
ManyListinerButton.lista.add(new Step1());
non-static variable this cannot be referenced from a static context
ManyListinerButton.lista.add(new Step2());
inner classes cannot have static declarations
public static void main(String[] args) {
inner classes cannot have static declarations
public static final List<ActionListener> lista = new LinkedList<ActionListener>();
4 errors
BUILD FAILED (total time: 0 seconds)

0

Jeszcze kod by się przydał, jednak z tego wynika że albo Step są klasami prywatnymi i nie są statyczne... albo lista choć zadeklarowana jako statyczna taka nie jest...

0

Koziołek może podeślesz mi plik.java z tym kodem. Być może w złym miejscu go wstawiam i stąd ten błąd. Jeżeli nie jest to dla Ciebie kłopot to proszę o plik.java na adres [email protected]

0

yyy... kod który podalem jest kompletny...

0

nie wiem czemu ale nawet jak skopiuje Twój kod i wstawie do siebie to pokazuje mi ten sam błąd...

0

ok. zamień zmienna static na niestatyczną i po drodze utwórz obiekt ManyListinerButton .

0

Koziołek tzn, bo nie jestem aż tak zaawansowany jak ty, więc może napiszesz o co chodzi w tym co wyżej napisałeś.
Z góry dziękuję

0

zamiast:

public static List<ActionListener> lista = new LinkedList<ActionListener>();

dajesz:

public List<ActionListener> lista = new LinkedList<ActionListener>();

następnie w main()w pierwszej linijce:

ManyListinerButton mlb = new ManyListinerButton();

i zamieniasz wszystkie ManyListinerButton na mlb

0

Czyli, coś takiego:

public class ManyListinerButton {
         public static void main(String[] args) {
                 ManyListinerButton mlb = new ManyListinerButton();
                // GUI - obiekty
                JFrame jf = new JFrame("Przykład wymiany listinera");
                JButton jb = new JButton("Listiner1");
                //Lista listinerów
                mlb.lista.add(new Lisiner1());
                mlb.lista.add(new Lisiner2());
                //inicjacja GUI
                jf.setSize(200, 200);
                jf.add(jb);
                jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                jb.addActionListener(mlb.lista.get(0));
                jf.setVisible(true);
        }
public List<ActionListener> lista = new LinkedList<ActionListener>();

Błąd:
non-static variable this cannot be referenced from a static context

1 użytkowników online, w tym zalogowanych: 0, gości: 1