Przejście do kolejnego okna

0

Zastanawiam się w jaki sposób można stworzyć interfejs graficzny taki, w którym jest np. przycisk "dalej" i przechodzi do kolejnego okna aplikacji, różnej od tej początkowej. Będę wdzięczny za wskazówkę :)

1

Przygotowujesz zestaw paneli, na każdym umieszczasz elementy (np. przy instalacji: jeden panel z akceptacją regulaminu, drugi z wyborem pliku, trzeci z postępem instalacji itd), zapisujesz je w tablicy JPanel[].
Pod spodem umieszczasz przyciski Wstecz/Dalej które usuwają stary panel i zastępują go następnym/poprzednim wczytanym z tablicy z pamięci

1

Ja w swoim programie użyłem "jtabbedpane", każdy panel wstawiłem w oddzielnej zakładce.
Jak mój przedmówca zrobiłem butony do przełączania się między panelami,
dodatkowo żeby przyspieszyć przełączanie się między różnymi panelami stworzyłem menu działające reagujące na prawy przycisk myszy.
Pozdrawiam

1

Dobrym pomysłem jest też ustawienie CardLayout. Tutaj masz tutorial http://docs.oracle.com/javase/tutorial/uiswing/layout/card.html.

0

Myślę, że już sobie poradzę. Opcja Visher'a jest dla mnie najbardziej odpowiednia. Jeszcze chciałbym prosić o przykład kodu do przycisku Dalej, żebym już nie miał niepotrzebnych zastojów jak zacznę tworzyć interfejs. (na razie kończę projektować grafikę).

0

Zawsze można użyć gotowej biblioteki do tego.
Jeśli użycie JavaFX Ci nie przeszkadza, to można spróbować tego: http://www.zenjava.com/jfx-flow/

0

Na razie robię pierwszy ekran, jak coś nie będzie szło to dam znać.

Jeszcze mam takie pytanie: Czy w javie jest możliwość aby nazwa np. JButton składała się tez ze zmiennej, bo tworząc powiedzmy 50 przycisków o nazwie różniącej się tylko liczbą na końcu, to strasznie dużo linijek zajmie. A tak w pętli by się potworzyły. Szukałem trochę w internecie, i nie znalazłem żeby gdzieś było takie rozwiązanie. Jak ktoś jest pewny, że nie ma to niech napisze :)

Dzięki.

1

Zakładając, że JButton'y będą się różniły tylko nazwą?

 


private void createButtons(){
     int n = 500;
     JButton[] buttonArray = new JButton[n];
     for(int i=0; i<n; i++){
          buttonArray[i] = createButton("Button"+i);
     }
}

private JButton createButton(String name){
     JButton button = new JButton(name);
     // Tutaj cos jeszcze...
     return button;
}

Ewentualnie możesz to w drugiej metodzie do pętli.

1
zagi195 napisał(a):

Jeszcze mam takie pytanie: Czy w javie jest możliwość aby nazwa np. JButton składała się tez ze zmiennej, bo tworząc powiedzmy 50 przycisków o nazwie różniącej się tylko liczbą na końcu, to strasznie dużo linijek zajmie.

Obiekty takie jak JButton, które tworzysz nie mają w ogóle żadnej nazwy. Nazywasz jedynie zmienne, które trzymają referencje do takich obiektów. Możesz wszystko załatwić jedną zmienną tego typu lub lepiej jednym kontenerem JButtonów, którego komórkom możesz przypisywać kolejne wywołania new w jakiejś pętli. Wszystko zależy do czego Ci takie masowe ilości komponentów są potrzebne. Aby się do takiego odwołać potrzebna Ci tylko referencja, a czy będzie ona jakoś nazwana, to jest już kwestia nie/wygody.
Gdybyś się bardzo uparł, to mógłbyś w ogóle nie używać zmiennych, ani pól dla komponentów GUI ponieważ każdy panel czy komponent potrafi iterować po wszystkich elementach umieszczonych wewnątrz niego (a to oznacza dostęp do referencji).

0

Za mało umiem jeszcze, bo nie rozumiem...

Aktualnie mam kilkadziesiąt tak ustawianych przycisków:

JButton = koperta_1, koperta_2, koperta_3, koperta_4............;

koperta_1 = new JButton(new ImageIcon("img/koperty/koperta_1.jpg"));	
koperta_1.setBorderPainted(false);
koperta_1.setBounds(48, 48, 99, 37);
add(koperta_1);	
koperta_1.addActionListener(this);
koperta_1.addMouseListener(this);

2

Może tak:

JButton[] buttons = new JButton[ile_chcesz_przyciskow];
for(int i=0;i<ile_chcesz_przyciskow;i++)
{
    JButtonn b = new JButton(new ImageIcon("img/koperty/koperta_"+(i+1)+".jpg"));
    b.setBorderPainted(false);
    koperta_1.setBounds(...); //tu musisz znaleźć wzór na rozmiar i położenie
    b.addActionListenr(this);
    b.addMouseListener(this);
}
0

Doszedłem do tego momentu co potrzebuję zrobić to co jest treścią tego tematu. Mimo waszych odpowiedzi nie umiem. W swojej aplikacji mam metodę, którą jest aktywowana przy starcie programu (metoda ta, to pierwszy ekran aplikacji), i w drugiej metodzie tworzę drugi ekran, i chcę żeby po naciśnięciu Dalej, ekran zmieniał się na ten z drugiej metody. :) Rozjaśnicie mi jak to zrobić?

1

Może wystarczy

pierwszyEkran.setVisible(false);
drugiEkran.setVisible(true);
0

Ok, po ok. 6 godzinach udało mi się - przechodzi do drugiego ekranu. HURA!
Dziękuję za pomoc.

0

Niestety mam nowy problem.
Tworzę wszystkie panele za pomocą metody która jest na górze dokumentu. Mam utworzone zmienne globalne, i one są edytowane w

public void actionPerformed(ActionEvent e) { }

I mam problem, bo tworząc 3 panel muszę wykorzystać te zmienione wartości zmiennych - a one nie wiem czemu przybierają wartość = 0. A jeżeli wyświetlę te zmienne w actionPerformed to mają poprawną wartość. Co jest tego przyczyną? Próbowałem tworzyć ten trzeci panel w kolejnej metodzie i wywołać ją dopiero wtedy kiedy się naciśnie na przycisk dalej, ale wtedy nie widać zawartości panelu.
Może zobrazuję to Wam trochę:

public class game extends JFrame implements ActionListener, MouseListener, KeyListener {

	int[] WybraneKoperty = new int[5];

public void metoda() {
     //Tutaj wykorzystuję tablicę WybraneKoperty[]
    // oraz tutaj znajduję się przycisk, który wywołuje zmiany w tablicy
   // metoda ta tworzy wszystkie panele - wszystkie ekrany.
}

public static void main(String[] args) {
		game okno = new game();
		okno.metoda();
		okno.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		okno.setVisible(true);
}

public void actionPerformed(ActionEvent e) {
      WybraneKoperty[3] = 7;
}

}
0

Zapewne tworzysz w metodzie actionPerformed zmienne lokalne, które się nazywają tak samo jak globalne i edytujesz te lokalne.

0

Jaka może być przyczyna tego, że nic się nie dzieje po przyciśnięciu buttona? jestem pewien że dobrze został dodany. Dodaję takie same przyciski do kilku paneli aż w szóstym przestały reagować na kliknięcie.

0
this.setFocusable(true);

spróbuj tego, mi kiedyś wykładowca podpowiedział i zadziałało.
ew. może i to głupie ale sprawdź czy dodałeś "listener" :)

0

@zagi185 a skąd wiesz, że nic się nie dzieje? Może kod taki napisałeś ;P Żeby na 10000% stwierdzić, że się nic nie dzieje wstaw w akcje np

System.out.println("No a jednak coś się dzieje");

albo postaw w akcji breakpoint i zdebuguj;]
Wtedy będziesz miał pewność.
Jeżeli nie ma akcji, to albo nie dodałeś action listenera, albo klikasz zupełnie inny button niż Tobie się wydaje :D

0

Na szczęście już sobie poradziłem. I niedługo skończę program.
Jeszcze ostatnie pytanko, jak zrobić przycisk, którego zadaniem będzie ponowne włączenie programu? Zresetowanie całej aplikacji żeby wszystkie dane były takie jak na początku i wyświetlony został ekran startowy.

1

Wywołaj ponownie konstruktor swojej klasy, a stare okno usuń (dispose()).

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