Java如何获取方法参数中的名称

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java如何获取方法参数中的名称相关的知识,希望对你有一定的参考价值。

参考技术A 一、从注解中获取
使用注解方式,我们需要自定义一个注解,在注解中指定参数名,然后通过反射机制,获取方法参数上的注解,从而获取到相应的注解信息。这里自定义的注解是Param,通过value参数指定参数名,定义了一个工具类ParameterNameUtils来获取指定方法的参数名列表,这里获取测试类ParameterNameTest中定义的方法method1的参数名列表表,下面是具体的代码。

如何从 Java 中获取字体名称列表

【中文标题】如何从 Java 中获取字体名称列表【英文标题】:How to get list of font names from Java 【发布时间】:2015-05-01 11:15:09 【问题描述】:

在 Java 中,我们可以这样创建 Font 对象:

new Font("Helvetica", Font.PLAIN, 12);

我的问题是我们如何从 Java 中获取整个字体名称列表,例如“Helvetica”,我们可以将其用作 Font 构造函数的参数之一?

我尝试了以下方法,但在所有列表中都找不到“Helvetica”。

    GraphicsEnvironment ge;  
    ge = GraphicsEnvironment.getLocalGraphicsEnvironment();  

    String[] names = ge.getAvailableFontFamilyNames();
    Font[] allFonts = ge.getAllFonts();

    for(int x=0; x<names.length; x++)
        System.out.println(names[x]);

    for(int x=0; x<allFonts.length; x++)           
        System.out.println(allFonts[x].getName());
        System.out.println(allFonts[x].getFontName());
        System.out.println(allFonts[x].getFamily());
        System.out.println(allFonts[x].getPSName());
    

编辑:更重要的是我也想知道Font构造函数中第一个属性调用是什么new Font("What attribute is this?", Font.PLAIN, 12)

问:是 fontName、family、fontFace、名字还是什么?

【问题讨论】:

你能提供输出吗?就我而言,我看到超过 10 个字符串包含 Helivetica 字。 @maxd 我希望我可以,因为这对你们所有人都有用,但是我的输出太长了。超过 3000 行字体。 刚刚过去到 gist.github.com 或 pastebin.com 能否请您也指定您的操作系统? @maxd Window 7 家庭高级版 SP 1 【参考方案1】:

在您的系统上,该字体很可能被映射到其他东西

Font helvetica = new Font("Helvetica", Font.PLAIN, 12);
System.out.println(helvetica.getFontName(Locale.US));

我明白了

SansSerif.plain

要输出所有本地字体的名称,您可以使用类似

GraphicsEnvironment ge = GraphicsEnvironment
        .getLocalGraphicsEnvironment();

Font[] allFonts = ge.getAllFonts();

for (Font font : allFonts) 
    System.out.println(font.getFontName(Locale.US));

【讨论】:

@ElliotFrisch 感谢您的帮助,但我仍然没有在我的字体列表中看到它。我正在寻找的“helvetica”是什么。是调用 fontName、family、fontFace 还是字体或名称?知道了这一点,我将能够知道使用哪种方法来获取允许的字符串列表以填充 Font 构造函数。谢谢! 这是字体名称,以大写字母开头,可能在您的系统上不可用(不在我的系统上)。 非常感谢您的回复。所以我想我可以简单地使用 allFonts[x].getFontName() ?我很困惑,因为 API 只提到了name 而不是fontName 字体(和排版)是一个有点复杂的话题,Helvetica 这个名字指的是一种字体。您可以调用Font.getName(),它返回此Font 的逻辑名称和/或Font.getFontName(),它表示(作为示例)Helvetica Bold 可以作为字体名称返回.【参考方案2】:
new Font("Helvetica", Font.PLAIN, 12);

在这种情况下,最好使用类似的东西:

new Font(Font.SANS_SERIF, Font.PLAIN, 12);

这将生成该操作系统默认使用的未修饰的Font

在 Windows 上它将是 Arial。在 OS X 上它将是 Helvetica。在 *nix 机器上,它可能是第三个未修饰的 Font


在回答您的具体问题时,我一直发现“字体系列”字符串对于创建字体实例很有用。

【讨论】:

【参考方案3】:

我知道这是一个老问题,但有一些问题没有答案。

更重要的是,我也想知道Font构造函数中第一个属性调用是什么 new Font("What attribute is this?", Font.PLAIN, 12) Q:是fontName,family,fontFace,name还是什么?

如果你用 IDE 反编译 Java 类(我用的是 IntelliJ),你会看到:

public Font(String name, int style, int size) 
    this.name = (name != null) ? name : "Default";
    this.style = (style & ~0x03) == 0 ? style : 0;
    this.size = size;
    this.pointSize = size;

public String getName() 
        return name;
    
public String getFontName() 
  return getFontName(Locale.getDefault());

这告诉您调用构造函数时使用的名称可以使用 getName 检索,但调用 getFontName 将返回您的默认文本。这就是为什么您可以将名称设置为 Helvetica,然后调用 getFontName 并返回除 Helvetica 以外的其他内容。

【讨论】:

【参考方案4】:

这个程序会显示你系统中所有字体的列表:

import java.awt.GraphicsEnvironment;

public class ListJavaFonts


  public static void main(String[] args)
  
    String fonts[] = 
      GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();

    for ( int i = 0; i < fonts.length; i++ )
    
      System.out.println(fonts[i]);
    
  


【讨论】:

以上是关于Java如何获取方法参数中的名称的主要内容,如果未能解决你的问题,请参考以下文章

java如何获取浏览器的访问网址及其内容

java怎么获取方法参数名

java程序如何获取POST方式提交的数据?

说说对java反射的理解,使用反射如何获取一个类的所有方法,使用反射需要注意哪些问题?

获取方面的“方法参数”的名称? (方面J)

如何获取java泛型的参数类型