大家好,我是新来的,因此我要为我含糊的问题预先致歉。
我有一个学校项目要完成,目的是创建一个可以正常工作的Paint Programm。
我们获得了3个班级。椭圆形,直线和多边形。这些类的工作原理基本相同,主要区别在于绘制的形式。这些类之一如下所示:

public class Oval extends Drawable{
    private int x1,y1,x2,y2;
    private Color c;
    private JFrame f;
/**
* Constructor of the Oval Class
* Initialises the attributes of this Class
*
* @return void
*/
public Oval(int X, int Y, int width, int height, Color c){
    this.x1 = x1;
    this.y1= y1;
    this.x2 = x2;
    this.y2 = y2;
    this.c = c;
}
/**
* Draws an Oval based on the Values x1,y1,x2,y2
*
* @return void
*/
@Override
public void draw(Graphics g) {
    g.setColor(c);
    g.drawOval(x1, y1, x2, y2);
}
}


现在我的问题是我不知道如何从面板中调用此类。当我尝试在PaintComponent方法中从我的JPanel调用draw(...)时,它什么都不做。
这是我DID添加到我的JFrame fyi中的JPanel类。

public class PaintPanel extends JPanel {
    private PaintFrame f;
public PaintPanel(PaintFrame f){
    this.f = f;
}
@Override
protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    Oval o = new Oval(100, 100, 50, 50, new Color(127, 184, 255), f);
    o.draw(g);
}
}


不要介意“参数”中的“框架”,这是用于在椭圆类,线类和多边形类内进行克隆的方法,以避免OutOfBounce工程图。

现在为我的框架:

public class PaintFrame extends JFrame{
    private PaintPanel pp;
public PaintFrame(){
    pp = new PaintPanel(this);

    this.setSize(500, 500);
    this.setTitle("Paint");
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setContentPane(pp);
    this.setVisible(true);
}
}


因此,我猜这差不多。我只想完成这项工作,因为这几乎是整个项目的基础部分。在此先感谢您的帮助,如果您有任何技巧可以使我的下一个问题更好,更准确,请随时提出批评:)

最佳答案

您的Oval坐标似乎未在Oval构造函数中正确设置。您需要做的是使用初始x和y位置以及width和height的值来计算它们,如下所示:

this.x1 = X;
this.y1= Y;
this.x2 = x+width;
this.y2 = y+height;

07-26 06:06