【问题标题】:Why does this work? (Java, Graphics object)为什么这行得通? (Java,图形对象)
【发布时间】:2015-05-13 01:58:47
【问题描述】:

这是我的代码:

public void paint(Graphics g) {

    Graphics2D g2 = (Graphics2D) g;
    g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);

    g.drawString("This is my string", 200, 200);
}

这可以正常工作;文本显示为抗锯齿。但是,为什么它会起作用?文本是由 g 对象绘制的,但据我所知,g2 对象的抗锯齿功能已打开。 g对象是怎么得到的?

【问题讨论】:

  • 因为您将g2 引用了g 对象。
  • gg2 是同一个对象,你只是投射了它。

标签: java text graphics instance antialiasing


【解决方案1】:
Graphics2D g2 = (Graphics2D) g;

gg2 都是对同一个对象 (g) 的引用。 g 将对象称为 Graphics2D,而 g2 将对象称为 Graphics2D

【讨论】:

  • 谢谢。因此,当您将一个对象转换为另一个对象时,您并没有创建任何新对象?您实际上只是在“投射”对对象的引用?
  • 没错。您在此处的对象 (g) 既是 Graphics 又是 Graphics2D。根据具体情况,您可能需要将其用作 Graphics 或 Graphics2D。
【解决方案2】:

gg2 都是对同一个对象的引用。在运行时,引用的类型并不重要——你让那个对象运行一个方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-20
    • 1970-01-01
    • 2016-04-28
    • 1970-01-01
    • 1970-01-01
    • 2014-11-29
    • 2014-12-02
    • 2014-04-03
    相关资源
    最近更新 更多