首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Java中扩展Graphics类

在Java中扩展Graphics类
EN

Stack Overflow用户
提问于 2016-10-09 12:24:39
回答 3查看 1.6K关注 0票数 2

我需要扩展Graphics类,以便@Override一些方法,包括drawRect(int,int,int,int)drawRoundRect(int,int,int,int,int,int)。但是,我不知道该怎么做。到目前为止,这就是我所得到的:

代码语言:javascript
复制
  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 is not abstract and does not override abstract method dispose() in java.awt.Graphics,在提到super.fill..(..)的每一行上,我也会得到一个错误,上面写着:abstract method fill..(..) in java.awt.Graphics cannot be accessed directly。有人知道我能做什么吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-10-09 12:40:40

Graphics类是抽象的,这意味着您不能用它创建对象。这并不意味着您不能扩展它,但它确实意味着两个中的一个必须发生:

如果对其进行扩展,则必须显式覆盖(实际上编写了所有方法)它的所有方法。另一种选择是使myGraphics类变得抽象,但我认为这不是您想要的。

我希望这能帮到你。

票数 1
EN

Stack Overflow用户

发布于 2016-10-09 12:48:32

这一问题:

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

实际上,...may是一种XY问题,当使用完全不同的方法时,您会问如何解决特定的代码问题。你最好告诉我们你想要解决的总体问题,而不是你目前试图解决的问题:

如果你想改变你自己图形程序的绘图行为,有比尝试扩展图形学更好的方法,如果你真的必须去做,这是一个非常困难的任务。相反,考虑使用扩展JPanel的类,给它自己的drawRect和drawRoundRect方法,但也向它添加一个Graphics或Graphics2D参数,并且在这些方法中做任何需要的更改。

票数 2
EN

Stack Overflow用户

发布于 2020-09-11 19:02:53

作为一个抽象类,Graphics有许多抽象方法。抽象方法是没有在抽象类中定义但必须在最终子类中定义的方法。如果您不想立即定义抽象方法,但是如果您希望能够实例化类,那么您可以使子类成为一个抽象类,那么您最终必须定义这些方法。因为into ()是一个抽象的方法,所以您需要说明dispose()在子类中应该做什么,或者通过在{}之间不留下任何内容来欺骗计算机,使计算机以为您在告诉dispose要做什么。

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

代码语言:javascript
复制
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;};
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39943596

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档