2012-05-10 9 views
6

HTML ma Document Object Model, który Javascript może następnie manipulować/przemieszczać się.Java GUI: Document Object Model

Kiedy tworzę graficzny interfejs użytkownika w Swingu - model wydaje się być bardzo różny (nie znam nazwy modelu), ponieważ tworzę menedżery layoutów i umieszczam w nich obiekty.

Moje pytanie: czy istnieje jakiś sposób manipulować Java GUI w DOM podobny sposób?

[Na przykład, chcę być w stanie usunąć/dodać węzły, przesuń Childs dookoła, etc ...]

Dzięki!

+0

Masz na myśli przechodzenie przez hierarchię komponentu? –

+2

Masz poważne rozczarowanie i frustrację. W Swingie wszystko jest o wiele trudniejsze niż to, do czego jesteś przyzwyczajony w JavaScript. Odkryjesz także, że nie ma przechwytywania/propagowania zdarzeń - jest ono wysyłane tylko do odbiornika dołączonego bezpośrednio do źródła zdarzenia. –

+0

* "(HTML) ..nie zna nazwy modelu" * Zobacz ['HTMLDocument'] (http://docs.oracle.com/javase/7/docs/api/javax/swing/text/ html/HTMLDocument.html) –

Odpowiedz

7

W przypadku komponentów Swing wszystko zaczyna się od zestawu elementów JFrame (można także używać JWindow i JDialog, ale zazwyczaj ma się co najmniej jedną ramkę główną). Najprawdopodobniej wszystko, co Cię interesuje, to zawartość tego JFrame (ale możesz też dbać o jego własność, itp.).

Więc z JFrame, można uzyskać okienko treści jak następuje:

Container contentPane = frame.getContentPane(); 

Stamtąd można rozpocząć zejście z drzewa elementów, używając:

Component[] children = contentPane.getComponents(); 

Od dziecka można uzyskać z jego rodzica:

Container parent = child.getParent(); 

aby dodać składnik do pojemnika:

container.add(someComponent); 
container.validate(); 

Aby usunąć składnik z pojemnika:

container.remove(someComponent); 
container.validate(); 

Aby przenieść element z jednego pojemnika do drugiego, po prostu usunąć go z jednego i dodać go do drugiej.

Nie jestem pewien, czy to odpowiada na twoje pytanie. Byłoby łatwiej, gdybyś mógł zamieścić prawdziwe przykłady tego, co próbujesz zrobić.

+0

Proponuję użyć revalidate() + repaint(), we wszystkich przypadkach, może być dyskusja na temat tego, co jest wymagane JComponent i dlaczego nie, po prostu, aby uniknąć tego revalidate() + repaint() +1 – mKorbel

+0

Możesz dostać listing z 'Ctrl + Shift + F1', jak oni pokazują [tutaj] (http://stackoverflow.com/questions/6671021). –