2014-09-24 51 views
1

我有一個非常簡單的AWT繪畫。只是玩起來做更大的事情。但不能得到它的工作...AWT油漆只有最後添加油畫

會發生什麼是隻顯示elypse2 - 無論重繪或不重影。

我也嘗試使用Swing組件代替AWT(JFrame,JComponent),但是這也沒有改變。

是否需要使用佈局管理器?但我只想繪製圖形組件,如弧,矩形,線條,多義線,ASO ...

這裏的主要():

public static void main(String[] args) { 
    Frame testFrame = new Frame("Grafx-Test"); 
    testFrame.setSize(300, 200); 
    testFrame.setAlwaysOnTop(true); 

    java.awt.EventQueue.invokeLater(new Runnable() { 
    @Override 
    public void run() { 
     testFrame.setVisible(true); 
    } 
    }); 

    Elypse elypse = new Elypse(new Point(70, 80), 30, 30, Color.BLUE, false); 
    testFrame.add(elypse); 

    Elypse elypse2 = new Elypse(new Point(70, 50), 50, 30, Color.BLUE, true); 
    testFrame.add(elypse2); 
} 

這裏所使用的類:

public class Elypse extends Canvas { 

    private Point start; 
    private int width; 
    private int height; 
    private Color c; 
    private boolean filled; 

    public Elypse(Point start, int width, int height, Color c, boolean filled) { 
    this.start = start; 
    this.width = width; 
    this.height = height; 
    this.c = c; 
    this.filled = filled; 
    } 

    @Override 
    public void paint(Graphics g) { 
    g.setColor(c); 
    if (filled) { 
     g.fillOval(start.x, start.y, width, height); 
    } 
    else { 
     g.drawOval(start.x, start.y, width, height); 
    } 
    } 
} 
+0

可能[重複](http://stackoverflow.com/q/3538082/230513)。 – trashgod 2014-09-24 10:20:15

+0

不,這是不同的。 – mpunktw 2014-09-24 14:43:05

回答

2

你忽略pack()附上Window。請注意您原始代碼中的特徵症狀:調整生成更新的框架大小,將導致出現elypse2

附錄:您可以通過使用佈局(例如GridLayout)來查看兩個Elypse實例。

testFrame.setLayout(new GridLayout(0, 1)); 

image

作爲測試:

import java.awt.Canvas; 
import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.Frame; 
import java.awt.Graphics; 
import java.awt.Point; 

public class Test { 

    public static void main(String[] args) { 
     Frame testFrame = new Frame("Grafx-Test"); 
     testFrame.setAlwaysOnTop(true); 
     Elypse elypse = new Elypse(new Point(70, 80), 30, 30, Color.BLUE, false); 
     testFrame.add(elypse); 
     Elypse elypse2 = new Elypse(new Point(70, 50), 50, 30, Color.BLUE, true); 
     testFrame.add(elypse2); 
     testFrame.pack(); 
     testFrame.setVisible(true); 
    } 

    private static class Elypse extends Canvas { 

     private Point start; 
     private int width; 
     private int height; 
     private Color c; 
     private boolean filled; 

     public Elypse(Point start, int width, int height, Color c, boolean filled) { 
      this.start = start; 
      this.width = width; 
      this.height = height; 
      this.c = c; 
      this.filled = filled; 
     } 

     @Override 
     public void paint(Graphics g) { 
      g.setColor(c); 
      if (filled) { 
       g.fillOval(start.x, start.y, width, height); 
      } else { 
       g.drawOval(start.x, start.y, width, height); 
      } 
     } 

     @Override 
     public Dimension getPreferredSize() { 
      return new Dimension(320, 240); 
     } 
    } 
} 
+1

非常感謝! – mpunktw 2014-09-25 06:42:33