2012-11-03 12 views
29

Uczę się Java gui. Sposób, w jaki nauczyłem się tworzyć okno, to dziedziczenie lub rozszerzanie klasy JFrame i dobrze jest z niego korzystać, ponieważ JFrame zawiera wszystkie właściwości Okna. Teraz Jeśli chcę dodać coś do tego okna, muszę użyć metody add(). Ale dziś natknąłem się na JPanel, który również tworzy okna i możemy dodawać rzeczy przez jpanelObjec.add().JPanel vs JFrame w Javie

Jaka jest różnica między tymi dwoma metodami? Czy są w jakiś sposób powiązane?

+0

Podobne pytanie: http://stackoverflow.com/questions/3497889/difference-between-jpanel-jframe-jcomponent-and-japplet –

Odpowiedz

56

Nie należy rozszerzyć klasę JFrame niepotrzebnie (tylko jeśli dodajesz dodatkową funkcjonalność do klasy JFrame)

JFrame:

JFrame rozszerza Component i Container.

Jest to kontener najwyższego poziomu służący do reprezentowania minimalnych wymagań dla okna. Obejmuje Border s, resizability (IS Resizeable JFrame?), Bar tytułowy, kontrole i procedury obsługi zdarzeń dla różnych Event Like windowClose, windowOpened itp

JPanel (zmniejszenie/zmaksymalizować domowe):

JPanel rozciąga Component, Container i JComponent

to jest generycznej klasy stosowane do grupy drugiej Component y razem.

  • Przydaje się podczas pracy z LayoutManager s np. GridLayout f.i dodawanie składników do różnych JPanel s, które następnie zostaną dodane do JFrame, aby utworzyć GUI. Będzie łatwiejszy w zarządzaniu pod względem Layout i ponownego użycia.

  • Przydaje się również przy malowaniu/rysowaniu w Swingu, zastępując paintComponent(..) i oczywiście mieć pełne radości podwójnego buforowania.

Swing GUI nie może istnieć bez zbiorniku górnym poziomu podobnego (JWindow, Window, JFrameFrame lub Applet), a może występować bez JPanel s.

+3

w rzeczywistości, [JFrame] (http://docs.oracle.com/javase/ 7/docs/api/javax/swing/JFrame.html) nie rozszerza 'JComponent' i' JContainer'. – tenorsax

0

Myślę, że powinniśmy rozszerzyć klasę tylko wtedy, gdy zamierzamy stworzyć bardziej szczegółową klasę nadklasy.Można dokonać wystąpienie Ramka jak JFrame frame= new Frame(); i można dodawać obiekty jak frame.getContentPane.add(widget) Więc teraz, pozwala przyjrzeć się różnicy pomiędzy ramą a JPanel

JFrame powierniczego windows z niektórych wspólnych rzeczy używane do reprezentowania rzeczy A okno powinno mieć. Obejmuje to obramowania (zmienny rozmiar y/n?), Tytuł paska (nazwa aplikacji lub inna wiadomość), kontrolki (zminimalizowanie/maksymalizacja dozwolone?) I programy obsługi zdarzeń dla różnych zdarzeń systemowych, takich jak "zamknięcie okna" (zezwolenie na aplikację, aby zakończyć?). JFrame jest oknem powszechnie używanym w aplikacjach autonomicznych, takich jak okno ostrzegawcze lub okno powiadomień, które zwykle pojawiają się na ekranie. Używa metody detektora windows, która jest wykonywana za każdym razem, gdy zamykasz, otwierasz, maksymalizujesz, minimalizujesz lub aktywujesz okno.

JPanel - JPanel służy obecnie jako kontener ogólnego zastosowania. Jest tam, gdzie zwykle stawia się bardziej złożone lub większe operacje. Możesz umieścić wiele operacji w jednym panelu. JPanel jest podklasą JComponent, a JComponent jest podklasą kontenera, dlatego też JPanel jest także kontenerem. Jest tak wiele metod, które można wykorzystać w JPanelu, który odziedziczył po swoich super klasach. Dostępność, wyrównania i obserwator obrazu to tylko niektóre z jego przykładów. W JPanelu możesz także wstawiać pola, etykiety, przyciski, pola wyboru, a nawet obrazy i wiele innych funkcji. Jest to po prostu obszar, w którym można umieścić elementy wizualne i elementy sterujące.