繁体   English   中英

Java中的字体类参考

[英]Font class reference in java

我想问一个非常基本的问题:

当我编写这段代码时:

font = new Font("Calibri", Font.ITALIC, 10);
gr.setFont(font);
gr.drawString("mpla mpla",x,y);
font = new Font("Sherif", Font.BOLD, 16);
gr.drawString("mpla mpla part 2",x,y);

我意识到我的字体在第二个拉绳中不会改变,为了工作,我不得不放另一个gr.setFont(font); 在它之前。

为什么会这样呢? 我的意思是,我有一个Font对象的引用,该引用设置为可在我的Graphics上下文中使用。 当我将新对象重新分配给我的字体引用时,当Graphics尝试第二次使用它时,它通常应该可以正常工作! 但这种情况并非如此..

提前致谢

您似乎对自己的工作有误解。

在这一行:

font = new Font("Calibri", Font.ITALIC, 10);

您将对新创建的Font对象的引用分配给变量font

然后,使用gr.setFont(font); 您将该引用传递给gr.setFont()方法。 传递引用,即该Font对象的“位置”。 您不告诉gr.setFont()有关可变font任何信息,仅告诉它存储在其中的值。

在倒数第二行font = ...您将对另一个新Font对象的引用分配给变量font 由于Graphics对象不了解font变量本身,因此(当然)完全不受该更改的影响!

您可以这样想:

  • 我在一张纸上写一个数字(假设数字是3)
  • 我给你看那张纸,请你记住数字
  • 我擦除纸上的数字并在上面写5
  • 我问你你记得哪个号码

是的,如果gr将使用在第一次调用中传递的字体,那是对的,至少它应该这样做(理想情况下,gr的类应该防御性地复制了字体对象,并且未使用您以前设置的对象),否则,实现尚未完成,因此无论何时更改setFont中传递的'font'参考,字体都会更改。

因此,如果它在不使用第二个'setFont()'的情况下工作,则Graphic类的实现未完成防御性复制。 就“正在发生的事情”而言,这完全取决于Graphic类是直接使用此“字体”引用进行存储还是创建副本然后进行存储。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM