2012-04-11 78 views
1

我是JSwing的新手,所以請原諒我可能是一些初學者的問題。doLayout()和ActionListener問題

閱讀關於如何使用頂層容器的教程後,我試圖actionPerformed事件中下面的代碼在一個按鈕:

private void colgarActionListener(java.awt.event.ActionEvent evt) { 

     auxButton = new JButton(); 
     auxButton.setSize(100,30); 
     auxButton.setText("Me button"); 
     getContentPane().add(auxButton); 
     getContentPane().doLayout(); 


} 

如您所料,它發生,這是行不通的。該按鈕只是不顯示。如果我嘗試一個可笑的事情如:

getContentPane().setBackground(Color.red); 

代替

getContentPane().doLayout(); 

它的工作原理。我究竟做錯了什麼?

最後一個:如果我編寫一個作爲自定義ActionListener的類(使用它的帶參數的構造函數),我應該在哪裏放置它?作爲GUI代碼中的私有類?它只是感覺很骯髒......或者作爲另一個包裝內的公共課程。也許?

非常感謝。

問候。

馬丁。

回答

3

您將需要了解佈局管理器如何工作以及如何使用它們,因爲這是使用Swing(而不是JSwing)的關鍵之一。 Layout Manager Tutorial是一個很好的開始。

首先,避免使用空佈局和setBounds(...)另一方面,contentPane通常使用BorderLayout。另外,我從來沒有見過以這種方式使用過的doLayout()。相反,我通常看到validate()revalidate()後面repaint()更改其組件後調用容器。

+0

@mKorbel:aaaach? – 2012-04-11 13:43:24

+0

感謝百萬,氣墊船充滿了鰻魚;這非常有幫助。它的工作,我現在正在閱讀該教程。 – ilMarto 2012-04-11 13:57:40

1

是的,一個ActionListener通常不僅僅是一個私有類,而是一個匿名類,完全在使用地點。匿名課是你寫的時候

x.addActionListener(new ActionListener() { public void actionPerformed(Event e) { 
    ... stuff to do ... 
}}); 
+0

謝謝,馬可。我不知道這件事。我會將我的ActionListener重寫爲一個匿名類。它確實看起來非常優雅。 – ilMarto 2012-04-11 13:59:11