不知道这是否是一个非常具体的标题,但是我已经问过这个问题,但是已经死了。
我正在尝试执行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;
}
}
如上所示,除了能够选择一种颜色之外,其他所有功能都可以正常工作。
我希望能够定义矩形和三角形及其各自的位置和长度,而且还希望为其添加颜色。
但是我得到一个错误。
错误提示:
List 类型中的方法add(ShapeWrapper)不适用于参数(Rectangle)
和:
List 类型中的方法add(ShapeWrapper)不适用于参数(多边形)
请帮忙!我非常想尝试解决这个问题,因为它阻碍了我执行许多操作。
最佳答案
答案很基本... Shape
不是ShapeWrapper
类型,因此不能将其添加到标为List
的List<ShapeWrapper>
中
你应该做什么而不是
shapesDraw.add(new Rectangle(xPos, yPos, width, height));
更像是...
shapesDraw.add(new ShapeWrapper(Color.BLACK, new Rectangle(xPos, yPos, width, height)));
您的
...Triangle
方法也是如此。您需要将生成的Polygon
包装在ShapeWrapper
中,然后再尝试将其添加到List