2014-01-15 84 views
2

我正在閱讀Swing上的Core Java Volume 1。我很難理解這一段: 首先,作者說澄清Java Swing中組件類的繼承層次結構?

組件可以放置在容器,如面板。容器 本身可以放在其他容器內,所以類容器 擴展了Component。圖9.8顯示了 組件的繼承層次,

enter image description here

注:不幸的是,繼承層次是有些不潔兩個 方面。首先,頂級窗口(如JFrame)是容器的子類,因此是Component,但不能將 放置在其他容器中。此外,JComponent是Container的子類,不是組件的 。因此,可以將其他 組件添加到JButton中(但是,這些組件不會顯示 )。

對我而言,他在照片前後的陳述似乎都是相反的。 我也無法清楚地知道作者在這裏想說些什麼。 如果有人可以用一個例子什麼的闡述,如在@MadProgrammer評論說,筆者強調什麼對象層次是告訴你,什麼API可以做之間的差異,這將是有用的 感謝

+2

這可能是隻關注一個元素,但本質上,只是因爲'JFrame'從'Frame'延伸,從'Window',延伸擴展從'容器'(從'Component'擴展),你可以假設你可以添加一個'JFrame'到另一個。但你不能。這是組件內的一項限制,以防止您這樣做。他強調了對象層次告訴你和API能做什麼之間的差異......所以是的,這是矛盾的,因爲它必須是。 – MadProgrammer

+0

@MadProgrammer:對不起,我不明白你的意思 –

+0

只是因爲'JFrame'從'Container'(間接)擴展了,所以你不能執行'new JFrame().add(newJFrame())'。該API不會允許你這樣做。但是它可以讓你添加其他的對象,比如'JPanel',可以做'new JFrame().add(new JPanel())'...'Container'或者'Component' ... – MadProgrammer

回答

0

。 JFrame和JDialog是頂級容器。如果仔細查看層次結構,這些頂級容器不會繼承JComponent。相反,他們繼承了AWT窗口,這使得這些頂級容器特別擺動並使它們成爲重量級組件。因此,這些重量最大的頂層容器不能放置在另一個容器或組件內。 擴展JComponents的所有組件都是輕量級組件。此時,所有重量輕的組件可以放置在另一個輕量級組件或頂級容器內。

讓我知道,如果我出了問題... :)