2013-06-11 69 views
0

我們剛剛從僅使用AWT的Java編程GUI開始。我的任務是繪製一個橢圓並將其與標籤一起顯示。不知何故,我無法弄清楚如何同時顯示它們。只要我添加同時顯示標籤和形狀

add(label); 

我的程序只顯示標籤。 那是到目前爲止我的代碼...

import java.awt.*; 
public class Ellipse extends Frame{ 

public static void main (String args[]) { 
    new Ellipse("Ellipse"); 
} 

public void paint(Graphics g){ 
    Graphics shape = g.create(); 
    shape.setColor(Color.black); 
    shape.fillRect(100,80,100,40); 
    shape.setColor(Color.red); 
    shape.fillOval(100,80,100,40); 

} 

Ellipse(String s){ 
     super(s); 
     setLocation(40,40); 
     setSize(300,300); 
     setBackground(Color.white); 
     Font serif = new Font("Serif", 1, 10); 
     setFont(serif); 
     Label label = new Label("Ellipse 1",1); 
     add(label); 
     setVisible(true); 
} 
} 

的實際任務是繪製一個橢圓,填充黑色的背景,並把下面的標籤。除了我的問題之外,是否有可能用顏色填充橢圓的背景,而不是首先繪製一個單獨的矩形?

+0

而不是使用繪畫,你應該使用paintComponent。查看[執行自定義繪畫](http://docs.oracle.com/javase/tutorial/uiswing/painting/) – MadProgrammer

+0

爲什麼選擇AWT而不是Swing?在[Swing extras over AWT]上看到這個答案(http://stackoverflow.com/a/6255978/418556)有很多很好的理由放棄使用AWT組件。如果您需要支持較老的基於AWT的API,請參閱[混合重量級和輕量級組件](http://www.oracle.com/technetwork/articles/java/mixing-components-433992.html)。 –

回答

2

首先,當你重寫一個方法時,你應該調用父母的方法調用原因,你可以打破liskov替換原則。

@Override 
    public void paint(Graphics g){ 
     super.paint(g); 
     Graphics shape = g.create(); 
     shape.setColor(Color.black); 
     shape.fillRect(100,80,100,40); 
     shape.setColor(Color.red); 
     shape.fillOval(100,80,100,40); 
     shape.dispose();// And if you create it, you should dispose it 
    } 

和橢圓沒有顯示,因爲你從來沒有設置一個佈局,在你的構造函數,你必須把這樣的事情

Ellipse(String s){ 
     super(s); 
     setLocation(40,40); 
     setLayout(new FlowLayout()); 
     setSize(300,300); 
     setBackground(Color.white); 
     Font serif = new Font("Serif", 1, 10); 
     setFont(serif); 
     Label label = new Label("Ellipse 1",1); 
     add(label); 
     pack(); // size the frame 
     setVisible(true); 
} 

而結果

frame result

注意您不應該在頂層容器中繪製,您最好添加您的組件例如Panel並覆蓋面板中的繪畫方法。

+0

如果你創建它,你應該處理它(即圖形) – MadProgrammer

+0

@MadProgrammer我編輯:D – nachokk

+0

建議使用paintComponent塗料(根據我對問題的評論),並且你正在通往獲獎問題的途中; ) – MadProgrammer