【问题标题】:Extending Graphics2D class without implementing all methods扩展 Graphics2D 类而不实现所有方法
【发布时间】:2011-07-14 20:25:51
【问题描述】:

我有一个名为 MyClass 的类,我希望这个类扩展 Graphics2D(在 java.awt 中)。但是,当我输入public class MyClass extends Graphics2D { .... } 时,我必须添加未实现的方法 draw、drawImage、addRenderingHints 等,因为 Eclipse 会显示此错误并且无法编译。

这就是我想到的问题:我只想使用drawsetBackground和Graphics2D的其他几个方法,我不想要其余的代码附带其他未实现的强制方法。

有没有办法避免这种情况?因为在代码方面我非常干净和简单,我不想要其他 100 行我什至不使用的代码。

你有什么建议?

【问题讨论】:

    标签: java oop graphics implementation graphics2d


    【解决方案1】:

    您可以让它扩展 Graphics,当您需要 Graphics2D 时,只需转换即可。

    Graphics g = this.create(); Graphics2D g2d = (Graphics2D) g;

    您需要在其中创建一个 Graphics 变量,因为您不能转换 this

    所以对于“setBackground”:

    public void setBackground(Image img) {
        g2d.setBackground(img);
    }
    

    真的,不过,无论你做什么,都会变得一团糟。我什至不确定你是否可以在不发生坏事的情况下执行 this.create(),所以请记住这一点。

    【讨论】:

    • 感谢您的建议,但 Graphics 类本身也有很多不必要的(出于我的目的)方法。如果我扩展 Graphics,那么我必须包含这些方法。对吗?
    • 是的,很遗憾。使用某种辅助类会更好,该类在其构造函数中采用 Graphics2D,然后从中调用方法。比如:GraphicsHelper gh = new GraphicsHelper(g2d); gh.doStuff();
    • 你能看看我的评论,看看第一个回复吗?你对使用 Line2D 有什么看法,或者你知道一些可以同时画线 + 字符串的通用类吗?
    • 我不知道任何仅适用于行和字符串的类。同样,我会尽量避免扩展图形类。
    【解决方案2】:

    http://download.oracle.com/javase/6/docs/api/java/awt/Graphics2D.html

    Graphics2D 是一个抽象类,很多方法不是抽象的,必须定义所有方法才能得到一个可以实例化的子类。

    如果你想尝试,你可以尝试扩展一些实现 Graphics2D 的类。但是,如果您不小心,您将面临您想要的方法的实现可能与您未覆盖的方法不一致的风险......

    【讨论】:

    • 好吧,我要远离 Graphics2D。你能推荐一个 AWT 类来绘制一条线 + 字符串吗? 编辑:我知道 java.awt.geom.Line2D 对线条有好处,但是线条+字符串呢?
    • 这是一个很好的例子,你从容器daniweb.com/software-development/java/threads/141804覆盖paint(Graphics)方法
    猜你喜欢
    • 2012-03-18
    • 1970-01-01
    • 2017-11-25
    • 1970-01-01
    • 2016-10-03
    • 2014-04-18
    • 1970-01-01
    • 2018-05-22
    • 1970-01-01
    相关资源
    最近更新 更多