Skocz do zawartości
Zamknięcie Forum PC LAB

Szanowny Użytkowniku,

Informujemy, że za 30 dni tj. 30 listopada 2024 r. serwis internetowy Forum PC LAB zostanie zamknięty.

Administrator Serwisu Forum PC LAB - Ringier Axel Springer Polska sp. z o.o. z siedzibą w Warszawie: wypowiada całość usług Serwisu Forum PC LAB z zachowaniem miesięcznego okresu wypowiedzenia.

Administrator Serwisu Forum PC LAB informuje, że:

  1. Z dniem 29 listopada 2024 r. zakończy się świadczenie wszystkich usług Serwisu Forum PC LAB. Ważną przyczyną uzasadniającą wypowiedzenie jest zamknięcie Serwisu Forum PC LAB
  2. Dotychczas zamowione przez Użytkownika usługi Serwisu Forum PC LAB będą świadczone w okresie wypowiedzenia tj. do dnia 29 listopada 2024 r.
  3. Po ogłoszeniu zamknięcia Serwisu Forum od dnia 30 października 2024 r. zakładanie nowych kont w serwisie Forum PC LAB nie będzie możliwe
  4. Wraz z zamknięciem Serwisu Forum PC LAB, tj. dnia 29 listopada 2024 r. nie będzie już dostępny katalog treści Forum PC LAB. Do tego czasu Użytkownicy Forum PC LAB mają dostęp do swoich treści w zakładce "Profil", gdzie mają możliwość ich skopiowania lub archiwizowania w formie screenshotów.
  5. Administrator danych osobowych Użytkowników - Ringier Axel Springer Polska sp. z o.o. z siedzibą w Warszawie zapewnia realizację praw podmiotów danych osobowych przez cały okres świadczenia usług Serwisu Forum PC LAB. Szczegółowe informacje znajdziesz w Polityce Prywatności

Administrator informuje, iż wraz z zamknięciem Serwisu Forum PC LAB, dane osobowe Użytkowników Serwisu Forum PC LAB zostaną trwale usunięte ze względu na brak podstawy ich dalszego przetwarzania. Proces trwałego usuwania danych z kopii zapasowych może przekroczyć termin zamknięcia Forum PC LAB o kilka miesięcy. Wyjątek może stanowić przetwarzanie danych użytkownika do czasu zakończenia toczących się postepowań.

Temat został przeniesiony do archiwum

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

Deadeye

[Java] tworzenie jPanel na formie

Rekomendowane odpowiedzi

Jestem totalnym newbie w javie, więc rozwiązanie jest pewnie oczywiste. Otóż stworzyłem sobie w netbeans klasę, która dziedziczy z JPanel. Dodałem w designerze netbeans do tego panelu 2 labele i textfield. W głównej formie używam kodu do wyświetlenia tego panelu na formie:

	  cPanel a = new cPanel();
  getContentPane().add(a);
  a.setLocation(50, 50);
  a.setSize(200, 200);

 

ten kod umieszczony w konstruktorze formy działa tak jak powinien - tworzy się panel, oraz kontrolki w nim zawarte. Natomiast dokładnie ten sam kod w akcji wykonywanej po kliknięciu przycisku tworzy panel, z odpowiednim kolorem wypełnienia i ramką, ale żadnych wewnętrznych komponentów już nie tworzy - tak, jakby nie wykonywało się initComponents() panelu (czyli metoda w której netbeans tworzy kontrolki, i która jest wykonywana w konstruktorze panelu).

 

	private void btnUtworzActionPerformed(java.awt.event.ActionEvent evt)										  
{											  
	cPanel a = new cPanel();
	getContentPane().add(a);
	a.setLocation(2, 2);
	a.setSize(200, 200);
}

 

oczywiście ten kod jest podpięty pod mouse listenera, zresztą niby sie wykonuje, tylko nie tworzy wewnętrznych kontrolek cPanela. Natomiast jak dodam do contentpane po ustaleniu wielkości i rozmiaru:

	private void btnUtworzActionPerformed(java.awt.event.ActionEvent evt)										  
{											  
	cPanel a = new cPanel();
	a.setLocation(2, 2);
	a.setSize(200, 200);
	getContentPane().add(a);
 }

 

to w konstruktorze dalej ten kod działa, ale w metodzie odpowiadającej na klikniecie - panel się w ogóle nie pojawia, nie widać go na formie.

 

 

cała klasa panela http://pastebin.com/f15966d44

i formy w której tworze panel http://pastebin.com/f589d028a

 

Co zrobić, żeby poprawnie utworzyć ten panel wraz z kontrolkami które zawiera (a które się powinny utworzyć automatycznie w jego konstruktorze...)?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Zasadniczo robisz jeden podstawowy błąd - ustawiasz własciwości kontrolki po jej dodaniu do kontenera.

Więc pytanie - skąd kontener ma wiedzieć że po dodaniu buttona do JPanel zmieniłeś jego właściwości ?

 

w takim wypadku należy wywołać metode invalidate() która spowoduje że gui zostanie "oznaczone" jako "do odrysowania" i zostanie przerysowane jeśli zasoby na to pozwolą.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Zasadniczo robisz jeden podstawowy błąd - ustawiasz własciwości kontrolki po jej dodaniu do kontenera.

Przecież napisałem, że próbowałem też najpierw ustalić właściwości, a później dodać do contentpane - wtedy panel nie pojawiał się w ogóle.

Więc pytanie - skąd kontener ma wiedzieć że po dodaniu buttona do JPanel zmieniłeś jego właściwości ?

Tak na marginesie - w każdej normalnej technologii tworzenia okienek komponent sam przekazuje do ownera event zmiany.

w takim wypadku należy wywołać metode invalidate() która spowoduje że gui zostanie "oznaczone" jako "do odrysowania" i zostanie przerysowane jeśli zasoby na to pozwolą.

O to mi właśnie chodziło, i do tego sam już doszłem jakiś czas temu, niemniej dzięki :)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dziwne natomias że Matisse takie jaja odwala :poke: . NB sucks jak myślałem.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jak dla mnie NB jest świetne, ten drobny problem zajął mi jakiś czas, ale ogólnie znacznie szybciej tworzy się GUI w matisse, niż gdybym miał tworzyć je sam :) No i cała reszta NB jest na naprawde wysokim poziomie, w pewnych wzlędach przerasta nawet Visual Studio.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Tak na marginesie - w każdej normalnej technologii tworzenia okienek komponent sam przekazuje do ownera event zmiany.

 

Przypuszczam, że zaprojektowano to ze względów wydajnościowych, żeby zmiana wielu właściwości pod rząd nie zajechała systemu odświerzaniem.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Jak dla mnie NB jest świetne, ten drobny problem zajął mi jakiś czas, ale ogólnie znacznie szybciej tworzy się GUI w matisse, niż gdybym miał tworzyć je sam :) No i cała reszta NB jest na naprawde wysokim poziomie, w pewnych wzlędach przerasta nawet Visual Studio.

 

Eclipse + Jigloo rzadzi 4x bardziej :)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Eclipse + Jigloo rzadzi 4x bardziej :)

No to chociaż dobrze, że nie 4,61 raza bardziej. W czym wg ciebie jest lepsze? :> Ja z eclipse nie miałem doczynienia, ale sądząc tylko po screenach, to podstawka oferuje znacznie mniej niż netbeans, a po doinstalowaniu pluginów najwyżej sięga do tego samego poziomu. Wiedzy praktycznej na ten temat nie mam, ale stwierdzenie ze NB sucks to gruba przesada.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

  • Ostatnio przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×
×
  • Dodaj nową pozycję...