Witam,
pierwszy raz piszę aplikację okienkową w Javie i mam pewne problemy. Program ma robić 4 różne rzeczy, niezależne od siebie i chciałabym, aby na początku była możliwość wyboru co chcemy zrobić, np. 4 przyciski. Po naciśnięciu otwierałoby się nowe okno odpowiednio dla danego przycisku. W tym momencie jakoś radzę sobie z tymi poszczególnymi częściami, tylko nie wiem, jak to połączyć w ten sposób. Proszę o pomoc, tylko taką "czytelną" dla początkującego:)
W konstruktorze głównego wywołaj konstruktory okien potomnych, ale nie umieszczaj w tych konstruktorach instrukcji
setVisible(true);
//ani
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//najlepiej umieść (jest to zresztą zachowanie domyślne w klasie JFrame)
setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
Referencje do utworzonych okien zapamiętaj w polach głównego okna. Potem w reakcji na kliknięcie przycisku wywołasz
referencja_do_okna.setVisible(true);
Ok, dzięki:) Tylko w takim razie gdzie mają być te potomne okna? Chodzi mi o to, że wyklikuję to wszystko w Netbeansie i w ogóle nie wiem gdzie to wszystko tworzyć. Mam powiedzmy Form MojaJFrame i tam jest to główne okno JFrame. Chyba nie jest tak, że każde z tych okien to kolejne new->JFrame Form, bo wtedy w każdym tworzy mi się automatycznie klasa z metodą main... Pewnie w ogóle głupie pytania zadaję, ale nie mogę się w tym połapać...
Ja niczego nie wyklikuję, wszystko piszę, więc nie znam tych problemów.
nie umieszczaj metody "main" w JFrame, zrób osobną klasę:
import java.awt.EventQueue;
public class Main {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable()
{
public void run() {
new MojaJFrame();
}
});
}
}
ten wątek Swinga uruchomi twoją ramkę główną, w niej możesz robić co chcesz (powiedzmy), np. tworzyć nowe ramki po kliknięciu na przycisk, nowe panele itp...
Do Swinga jest specjalna klasa SwingUtilities a tam metoda invokeLater do uruchamiania wątku.
zgadza się
import javax.swing.*;
public class Main {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable()
{
public void run() {
new MojaRamka();
}
});
}
}