Dwa okna JFrame

0

Witam!

Zaprojektowałem dwa formularze typu JFrame i chciałbym dodać w jednym z nich przycik który otwierałby drugi formularz w nowym oknie.

Jak to zrobić? Znalazłem tylko poradniki gdzie nowe okno jest tworzone od początku do końca w kodzie programu, a ja chciałbym móc je zaprojektować ręcznie w zakładce design.

0

W zakładce design czego? Jeżeli używasz jakiegoś IDE, to zrób te formularze w całości w jakimś visual edytorze. Jeżeli masz kod i chciałbyś go do takiego edytora wpakować i przerabiać, to te narzędzia, które znam nie oferują takiej możliwości ponieważ dane formularzy takich edytorów obejmują więcej informacji niż goły kod wynikowy i są zazwyczaj plikami XML. Być może mógłbyś sobie takiego xml-a spreparować, ale w wielu wypadkach chyba szybciej jest wyklikać sobie wszystko w edytorze od początku.
Poza tym dodatnie jednego przycisku w gotowym kodzie GUI, to w sumie żaden problem. Jeżeli masz z tym problem, to wklej ten kod, który masz - to Ci ktoś napisze gdzie i co.

0

Używam NetBeans IDE. Sprecyzuje o co dokładnie chodzi, ale nie będę przepisywał całego kodu tylko przedstawię prosty przykład.

Dodałem dwa nowe formularze NewJFrame.java i NewJFrame1.java.

Prosty przykład jak chcę je zaprojektować:

NewJFrame.java:
user image

NewJFrame1.java:
user image

Chcę by po otwarciu programu otwierał się NewJFrame.java i po kliknięciu w button "nowe okno" otwierał się formularz NewJFrame1.java w nowym oknie. Potem użytkownik wpisuje jakąś wartość w jTextField1, klika button "OK-ZAMKNIJ OKNO". Okno się zamyka, po czym w NewJFrame.java w "Label-wynik" wyświetla się to co napisał w jTextField1.

Pytam się bo wiem jak to teoretycznie zrobić wpisując odpowiedni kod tworzący nowy formularz. http://java.sun.com/docs/books/tutorial/uiswing/components/frame.html
Tu jest opisane jak tworzyć nowe okna ale nie są one wtedy zaprojektowane w edytorze tylko właśnie napisane od początku do końca za pomocą czystego kodu. Ja chcę móc zaprojektować oba okna w edytorze i potem je połączyć.

0

Okno1:

private void addListeners(){
	buttonNoweOkno.addActionListener(new ActionListener(){
		public void actionPerformed(..){
			Okno2 okno2 = new Okno2();
			okno2.setModal(true);
			okno2.setVisible(true);
	
			LabelWynik.setText(okno2.getUserText());
		}
	});

}

Okno2:

{...
private String userText = null;

private void addListeners(){
	buttonOk..addActionListener(new ActionListener(){
		public void actionPerformed(..){
			userText= jTextField.getText();
		}
	});
}

public String getUsetText(){
	return userText;
}

Pisane z palca.

0

To samo co kolega napisał można automatem "wyklikać". Robi się to w ten sposób, że najpierw wybierasz komponent (okno, panel, przycisk lub cokolwiek) - możesz to zrobić myszą w edytorze klikając na to co widać lub w panelu "Inspector" (jedyna możliwość gdy chcesz wybrać coś całkowicie zakrytego). Następnie w panelu "Properties" wybierasz zakładkę "Events" oraz zdarzenie, które Ciebie interesuje do obsłużenia przez kliknięcie we właściwym wierszu przycisku opisanego przez "...". Pojawi Ci się dialog "Handlers" w którym możesz dodać lub usunąć procedury obsługi tego zdarzenia (zwykle jedna wystarcza).

Zanim to jednak zrobisz, sprawdź sobie w opcjach Netbeans z dziale "Miscellaneous/GUI Builder" w jaki sposób będzie budowana obsługa zdarzeń. Głównie interesować może lista "Listener Generation Style", gdzie można określić czy listenerem będzie sama klasa formularza implementująca go, czy jedna wspólna klasa wewnętrzna lub wiele klas wewnętrznych dla każdego komponentu osobno. Zmiana opcji może już nie działać po jednokrotnym wygenerowaniu kodu (Netbugeans 6.7.x), więc może to być i tak musztarda po obiedzie. W każdym razie dobrze o tym wiedzieć na przyszłość.
Jest tam też kilka innych interesujących opcji, ale to już sobie sam obadasz.

Wracając do ustawiania obsługi - kiedy dodając podasz nazwę procedury obsługi, to automatycznie przejdziesz do trybu source gdzie edytor ustawi Cię w miejscu obsługi zdarzenia do wypełnienia. Kiedy skończysz przełączasz się na Design i możesz to powtarzać w nieskończoność dla wszystkich możliwych zdarzeń w formularzu.

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