【问题标题】:Using PaintComponent to draw outside of Panel使用 PaintComponent 在 Panel 外部绘制
【发布时间】:2017-05-25 17:30:49
【问题描述】:

大家好,我是新来的,因此我提前为我的模糊问题道歉。 我有一个学校项目要完成,它的目标是创建一个完全工作的绘画程序。 我们上了 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(...) 时,它绝对什么都不做。 这是我添加到 JFrame 的 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);
}
}

不要介意参数中的框架,这是用于椭圆、直线和多边形类中的克隆方法,以避免出现跳出图形。

现在是我的框架:

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);
}
}

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

【问题讨论】:

  • 尝试在this.setVisible(true);之后添加pp.repaint();
  • 不会改变任何东西 ^^ 仍然感谢评论
  • 另外,在您的 Oval 类的构造函数中,您似乎没有正确设置 x1 y1 等。您只是将它们设置为未设置的值,并且因为它们是原始值,所以值为 0
  • 哇,我现在感觉自己像个白痴哈哈它的工作原理就像预期的一样,非常感谢:)
  • @CraigR8806 请将该评论升级为 OP 的答案至accept

标签: java swing jframe jpanel paintcomponent


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2018-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-14
    • 2015-05-03
    • 1970-01-01
    相关资源
    最近更新 更多