2012-01-06 45 views
0

我想學習Java中的GUI,但我有點困惑,想知道這段代碼在窗口中添加組件的區別是什麼?當我查看代碼示例時,它變化很大,一些示例使用JPanel,並通過編寫添加:panel.add(something);有些代碼只是使用add(something);或contentPane.add(東西);我只是好奇。謝謝!關於Java中的GUI?

JList text; 

JPanel panel = new JPanel(); 
frame.add(panel); 
panel.add(text); 

-

setLayout(new FlowLayout); 
add(text); 

-

Container contentPane; 
contentPane = getContentPane(); 
contentpane.setLayout(new FlowLayout); 
contentPane.add(text); 
+0

檢出[this](http://docs.oracle.com/javase/tutorial/uiswing/) – mre 2012-01-06 20:08:09

+0

可能的重複http://stackoverflow.com/questions/2432839/what-is-the-relation-between -contentpane-and-jpanel – Andy 2012-01-06 20:08:22

回答

0

不同之處在於,其中的代碼所在。代碼的第二部分只有在具有setLayoutadd方法的類的方法內纔有意義;很可能這是因爲該類是一個自定義GUI組件,它繼承自JPanel或另一個Container

第三部分調用getContentPane,這是一個方法JFrame,所以它最有可能繼承該類。

如果您編輯您的問題以發佈示例代碼的周圍上下文(或指向它的鏈接),我(或者比Swing更有經驗的人)可能能夠更詳細地解釋其工作原理。

+0

謝謝!我必須做更多的研究才能更好地理解它。我只是感到困惑的所有不同的方式來創建Java的GUI – 2012-01-06 20:23:10

2

您看到的差異更多地與Java語言有關,而與正在執行的實際操作關係更小。

如果調用沒有指定特定對象的方法,Java語言假定您所呼叫的this對象的方法,或者你當前工作的對象。

public class MyClass { 

    public void doThis() { 
    } 

    public void doThat() { 
    // the following line will call this.doThis() 
    doThis(); 
    // this is exactly the same as the line above, except it is explicitly stated 
    this.doThis(); 
    } 

} 

有時一個方法的願望在另一個對象上調用一個方法。在這種情況下,你有一個變量抱到了「其他」對象的引用,當你調用對象的方法,必須取消引用名稱引用,一個例子可能是這樣的:

public Class MyOtherClass { 

    public void doTheOtherThing(MyClass myClass) { 
    myClass.doThis(); 
    } 

} 

不同的例子做不同的Swing編程。一些例子傾向於比其他例子更加面向對象。舉例來說,如果你需要一個「特殊」按鈕,一個例子可能會在按鈕子類中進行適當的配置,而另一個例子可能會構造一個非子類按鈕並從「JButton」類之外進行配置。

良好的面向對象編程有利於子類化作爲外部配置的解決方案。這是因爲配置按鈕的代碼成爲新按鈕子類的一部分,所以當通過程序在體系結構中將Button移動到不同的位置時,配置代碼不會意外從Button中分離出來。有時候分析最好的面向對象的結構可能代價很高,在這種情況下,人們可能會釋放出大量「對象外部」影響的代碼。

+0

感謝您的信息! – 2012-01-06 20:56:40