Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Java扩展图形类_Java_Inheritance_Graphics_Extends - Fatal编程技术网

用Java扩展图形类

用Java扩展图形类,java,inheritance,graphics,extends,Java,Inheritance,Graphics,Extends,我需要扩展Graphics类以覆盖一些方法,包括drawRect(int,int,int,int)和drawRoundRect(int,int,int,int,int)。 然而,我不知道该怎么做。到目前为止,我得到的是: public class myGraphics extends Graphics { @Override public void drawRect(int x, int y, int width, int height) { su

我需要扩展Graphics类以覆盖一些方法,包括
drawRect(int,int,int,int)
drawRoundRect(int,int,int,int,int)
。 然而,我不知道该怎么做。到目前为止,我得到的是:

  public class myGraphics extends Graphics {
      @Override
      public void drawRect(int x, int y, int width, int height) {
          super.fillRect(x, y, width, height);
          setColor(Color.WHITE);
          super.fillRect(x, y, width-6, height-6);
      }

      @Override
      public void drawRoundRect(int x, int  y, int width, int height, int arcWidth, int arcHeight) {
          super.fillRoundRect(x, y, width, height, arcWidth, arcHeight);
          setColor(Color.WHITE);
          super.fillRoundRect(x, y, width-6, height-6, arcWidth, arcHeight);
        }
    }
我在类声明行中得到一个错误,它说:
myGraphics不是抽象的,并且不重写java.awt.Graphics中的抽象方法dispose()
我在每一行中都会遇到一个错误,
super.fill….(…)
提到java.awt.Graphics中的
abstract-method-fill….(…)无法直接访问

有人知道我能做什么吗?

图形类是抽象的,这意味着你不能用它来创建对象。 这并不意味着不能扩展它,但它确实意味着必须发生以下两种情况之一:

如果扩展它,就必须显式地重写(实际上是编写所有方法)它的所有方法。 另一个选择是将myGraphics类抽象化,但我认为这不是您想要的

我希望这能有所帮助。

这个问题:

我需要扩展Graphics类以@Override一些方法,包括drawRect(int,int,int,int)和drawRoundRect(int,int,int,int,int)

…实际上可能是一个问题,当最佳解决方案是使用完全不同的方法时,您会询问如何解决特定的代码问题。最好告诉我们您正在尝试解决的总体问题,而不是您当前如何尝试解决它:


如果您想更改自己的图形程序的绘图行为,有比尝试扩展图形更好的方法,如果您真的必须这样做,这是一项非常困难的任务。取而代之的是,考虑使用一个扩展JPAND的类,并给出它自己的DrutReT和DRAWRONTRORT方法,但也给它添加一个图形或图形化的2D参数,并且在这些方法中需要做任何改变。

作为一个抽象类,图形有一组抽象的方法。抽象方法是不在抽象类中定义,但必须在最终子类中定义的方法。如果您不想立即定义抽象方法,但如果希望能够实例化该类,则最终必须定义该方法,那么可以将该子类设置为抽象类。由于dispose()是一个抽象方法,您需要说明dispose()在子类中应该做什么,或者通过在{}之间不留任何内容来欺骗计算机,使其认为您正在告诉dispose该做什么

我有一个类似的问题,我通过使类成为SimpleGraphics来解决它。如果让myGraphics类扩展SimpleGraphics,它可能会解决您的问题

import java.awt.*;
import javax.swing.JFrame;
import java.awt.image.ImageObserver;
import java.text.AttributedCharacterIterator;
public class SimpleGraphics extends Graphics{
    public void clearRect(int x, int y, int width, int height){};
    public void clipRect(int x, int y, int width, int height){};
    public void copyArea(int x, int y, int width, int height, int dx, int dy){};
    public void dispose(){};
    public void drawArc(int x, int y, int width, int height, int startAngle, int arcAngle){};
    public boolean drawImage(Image img, int x, int y, Color bgcolor, ImageObserver observer){return false;};
    public boolean drawImage(Image img, int x, int y, ImageObserver observer){return false;};
    public boolean drawImage(Image img, int x, int y, int width, int height, Color bgcolor, ImageObserver observer){return false;};
    public boolean drawImage(Image img, int x, int y, int width, int height, ImageObserver observer){return false;};
    public boolean drawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, Color bgcolor, ImageObserver observer){return false;};
    public boolean drawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, ImageObserver observer){return false;};
    public void drawLine(int x1, int y1, int x2, int y2){};
    public void drawOval(int x, int y, int width, int height){};
    public void drawPolygon(int[] xPoints, int[] yPoints, int nPoints){};
    public void drawPolyline(int[] xPoints, int[] yPoints, int nPoints){};
    public void drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight){};
    public void drawString(AttributedCharacterIterator iterator, int x, int y){};
    public void drawString(String str, int x, int y){};
    public void fillArc(int x, int y, int width, int height, int startAngle, int arcAngle){};
    public void fillOval(int x, int y, int width, int height){};
    public void fillPolygon(int[] xPoints, int[] yPoints, int nPoints){};
    public void fillRect(int x, int y, int width, int height){};
    public void fillRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight){};
    public Shape getClip(){return null;};
    public Rectangle getClipBounds(){return null;};
    public Color getColor(){return null;};
    public Font getFont(){return null;};
    public FontMetrics getFontMetrics(Font f){return null;};
    public void setClip(int x, int y, int width, int height){};
    public void setClip(Shape clip){};
    public void setColor(Color c){};
    public void setFont(Font font){};
    public void setPaintMode(){};
    public void setXORMode(Color c1){};
    public void translate(int x, int y){};
    public Graphics create(){return null;};
}