2013-07-12 92 views
1

這是我在框架上繪製矩形的簡單代碼。如何將按鈕添加到此框架?我試圖設置FlowLayout,但矩形不可見,請幫助。將JButton和矩形添加到JFrame

import java.awt.*; 
import javax.swing.*; 

public class test extends Canvas{ 
public static JFrame frame; 
public static JButton button; 

public void paint(Graphics graphics) { 
    graphics.setColor(Color.yellow); 
    graphics.fillRect(10, 10, 100, 100); 
    graphics.setColor(Color.red); 
    graphics.drawRect(10, 10, 100, 100); 
} 

public static void main(String args[]){ 
    test x=new test(); 
    frame=new JFrame(); 
    button=new JButton(); 

    button.setSize(20,20); 
    button.setText("Click"); 

    frame.setSize(500,500); 
    frame.add(button); 
    frame.add(x); 
    frame.setVisible(true);  
} 
} 
+0

你看到了什麼?你指的是哪一個矩形? – mattbdean

+0

您是否嘗試過在「測試?」上設置preferredSize? – resueman

+2

您是否嘗試過在'paint'方法中調用'super.paint(graphics)'? – martijno

回答

2

JFrame的默認佈局是BorderLayout,它只能接受每個佈局約束的一個組件。沒有指定時的默認值是CENTER。所以改變:

frame.add(button); 
frame.add(x); 

要:

frame.add(button, BorderLayout.PAGE_START); 
frame.add(x); 

,你應該看到這兩個組件。

其他提示:

  1. 不要設置頂層容器的大小。相反佈置內容&致電pack()
  2. 不要混合Swing & AWT沒有很好的理由。正如另一張海報中提到的,我們通常在Swing中使用JPanel進行自定義渲染。
  3. BorderLayout將忽略按鈕的大小並將其拉伸以適合。要保持一定的尺寸,請設置首選尺寸並將其添加到FlowLayout。將FlowLayout添加到PAGE_START約束中。
+0

+1的建議。 ''設置一個首選尺寸「'!看起來很奇怪,當你是一個暗示這東西的人... –

+3

@nIcEcOw我.. ..不完全相信「永遠不會設置首選大小」的論點。它似乎阻止使用某些沒有默認大小的組件(例如'JTextPane'和'JEditorPane'),並且在將其放入容器時(例如'JToolBar'中的'JComboBox')突然出現問題。 Kleopatra會很高興地告訴我們使用第三方佈局,但我只堅持JSE,通常不允許設置大小。讓我們這樣說吧。我非常謹慎地提出它,但在像這樣的組件中自定義渲染的情況下,我會將它用於該組件。 (但是不要告訴K ..;) –

+1

哈哈:-),當然,我不會。是的,對於這些組件,即使使用JTable,我現在已經連續閱讀了幾天的教程,他們都使用這種方法,現在甚至在Java文檔中都是這樣,所以對於相信什麼和什麼是有點困惑。不要:-)。 –

2

不要畫到Canvas。塗上JPanel

您的班級是否延伸JPanel,然後覆蓋paintComponent(Graphics g)。別忘了撥打super.paintComponent()

0

您必須使用Container,獲取框架的容器然後使用佈局並使用add()方法向其添加組件。