首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何指定字体属性的通用映射?

如何指定字体属性的通用映射?
EN

Stack Overflow用户
提问于 2011-08-16 00:45:56
回答 3查看 1.7K关注 0票数 4

我有这个方法,jdk1.6报告(没有错误,只是警告)泛型类型参数化没有在Map中使用,并且...:

代码语言:javascript
复制
public static Font getStrikethroughFont(String name, int properties, int size)
    {
        Font font = new Font(name, properties, size); 

        Map  attributes = font.getAttributes(); 
        attributes.put(TextAttribute.STRIKETHROUGH, TextAttribute.STRIKETHROUGH_ON); 
        Font newFont = new Font(attributes); 
        return newFont;             
    }

然后我改成了以下代码:

代码语言:javascript
复制
public static Font getStrikethroughFont2(String name, int properties, int size)
    {
        Font font = new Font(name, properties, size); 

        Map<TextAttribute, ?>  attributes = font.getAttributes(); 
        attributes.put(TextAttribute.STRIKETHROUGH, TextAttribute.STRIKETHROUGH_ON); 
        Font newFont = new Font(attributes); 
        return newFont;             
    }

但是

代码语言:javascript
复制
attributes.put(TextAttribute.STRIKETHROUGH, TextAttribute.STRIKETHROUGH_ON); 

语句不再有效。

TextAttribute.STRIKETHROUGH_ON是一个布尔值。

如何在上述方法中使用泛型功能?我看过Core Java这本书,但没有找到答案。有人能帮我吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-08-16 00:57:49

您应该使用的是font.deriveFont(map)

代码语言:javascript
复制
public static Font getStrikethroughFont2(String name, int properties, int size)
{
   Font font = new Font(name, properties, size); 
   Map<TextAttribute, Object>  attributes = new HashMap<TextAttribute, Object>();
   attributes.put(TextAttribute.STRIKETHROUGH, TextAttribute.STRIKETHROUGH_ON); 
   Font newFont = font.deriveFont(attributes);
   return newFont;             
}

这将解决您的泛型问题。派生字体将复制旧字体,然后应用您为其提供的属性。因此,它将执行您尝试使用Font构造函数执行的相同操作。

票数 8
EN

Stack Overflow用户

发布于 2011-08-16 00:56:10

你不能在那个地图上使用put。这只是为了阅读。

可用于放置属性的地图是Map<String, Object>

如果您需要获取现有的映射并创建一个包含其属性和其他属性的字体,请使用:

代码语言:javascript
复制
Map<TextAttribute, Object> map = 
   new HashMap<TextAttribute, Object>(font.getAttributes());
票数 5
EN

Stack Overflow用户

发布于 2011-08-16 00:55:47

我不确定我已经很好地理解了这个问题,但是这样做如何:

代码语言:javascript
复制
Map<TextAttribute, Object>

每个对象都有作为超类的对象,而且无论如何都不能将任何原语类型放在Map中。所以有了Object,你就能得到一切!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7067901

复制
相关文章

相似问题

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