2014-06-26 71 views
2

不知道它是否是一個非常具體的標題,但我已經問過這個問題但已經死了。 我想執行paintComponent(),所以我可以繪製矩形,三角形和更多的類是一個JComponent。Java paintComponent作爲JComponent

這是到目前爲止我的代碼:

public class Design extends JComponent { 
private static final long serialVersionUID = 1L; 

private List<ShapeWrapper> shapesDraw = new ArrayList<ShapeWrapper>(); 
private List<ShapeWrapper> shapesFill = new ArrayList<ShapeWrapper>(); 

GraphicsDevice gd =  GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice(); 
int screenWidth = gd.getDisplayMode().getWidth(); 
int screenHeight = gd.getDisplayMode().getHeight(); 

public void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    Graphics2D g2d = (Graphics2D) g; 
    for(ShapeWrapper s : shapesDraw){ 
     g2d.setColor(s.color); 
     g2d.draw(s.shape); 
    } 
    for(ShapeWrapper s : shapesFill){ 
     g2d.setColor(s.color); 
     g2d.fill(s.shape); 
    } 
} 

public void drawRect(int xPos, int yPos, int width, int height) { 
    shapesDraw.add(new Rectangle(xPos, yPos, width, height)); 
    repaint(); 
} 

public void fillRect(int xPos, int yPos, int width, int height) { 
    shapesFill.add(new Rectangle(xPos, yPos, width, height)); 
    repaint(); 
} 

public void drawTriangle(int leftX, int topX, int rightX, int leftY, int topY, int rightY) { 
    shapesDraw.add(new Polygon(
      new int[]{leftX, topX, rightX}, 
      new int[]{leftY, topY, rightY}, 
      3)); 
    repaint(); 
} 

public void fillTriangle(int leftX, int topX, int rightX, int leftY, int topY, int rightY) { 
    shapesFill.add(new Polygon(
      new int[]{leftX, topX, rightX}, 
      new int[]{leftY, topY, rightY}, 
      3)); 
    repaint(); 
} 


public Dimension getPreferredSize() { 
    return new Dimension(getWidth(), getHeight()); 
} 

public int getWidth() { 
    return screenWidth; 
} 
public int getHeight() { 
    return screenHeight; 
} 

} 

class ShapeWrapper { 

    Color color; 
    Shape shape; 

    public ShapeWrapper(Color color , Shape shape){ 
     this.color = color; 
     this.shape = shape; 
    } 
} 

如上圖所示,一切工作完全正常,除了能夠選擇一種顏色。 我想能夠定義與他們各自的位置和長度的矩形和三角形,但也想添加一個顏色。

但我得到一個錯誤。

錯誤說:

的方法在類型列表中添加(ShapeWrapper)< ShapeWrapper>是不適用的參數(矩形)

和:

Add方法(ShapeWrapper)類型列表< ShapeWrapper>不適用於參數(多邊形)

請幫忙!我非常強調試圖弄清楚這一點,因爲它阻止我做很多事情。

回答

4

答案是非常基本的... Shape不是一個類型的ShapeWrapper,因此它不能被添加到decalred爲List<ShapeWrapper>

一個List你應該不是做的

shapesDraw.add(new Rectangle(xPos, yPos, width, height)); 
什麼

是更多的東西一樣......

shapesDraw.add(new ShapeWrapper(Color.BLACK, new Rectangle(xPos, yPos, width, height))); 

同樣爲您...Triangle方法。你需要用一個ShapeWrapper產生的Polygon試圖將它添加到List

+1

你先生之前......吻我...... 它的工作原理,完美,無法謝謝你了。 – Sk4llsRPG

+1

除非你要買飲料......和很多飲料......)很高興它的工作;) – MadProgrammer

+1

哈哈哈哈,是的。 原因是我可以簡化我的代碼,所以如果我把油漆放到JComponent中,它會簡單得多,然後我可以直接將它添加到JPanel中。 再次感謝。 編輯: 我想你回答了我上週同班的其他問題:D – Sk4llsRPG