在 Java 中传递特殊类型的 class 作为参数?

Passing a special type of class as a parameter in Java?

我正在编写一个方法来创建一个 JLabel 以存储在一个包中,这样我就可以使用一个方法来创建 JLabel,而不是以后每次都重新编写它。

现在我有

public static JLabel CreateJLabel(String nameOfLabel, String nameOfFont, int fontSize, int posX, int posY, SpringLayout layout, Frame frame) {
    JLabel myJLabel = new JLabel(nameOfLabel);
    Font myFont = new Font(nameOfFont, Font.BOLD,fontSize);
    myJLabel.setFont(myFont);
    layout.putConstraint(SpringLayout.WEST,myJLabel,posX, SpringLayout.WEST, frame);
    layout.putConstraint(SpringLayout.NORTH,myJLabel,posY, SpringLayout.NORTH, frame);
    frame.add(myJLabel);
    return myJLabel;
}

我看的具体区域是

public static JLabel CreateJLabel(String nameOfFont, int fontSize) {
    Font myFont = new Font(nameOfFont, Font.BOLD,fontSize);
}

我想知道在Font()的参数中,它需要Font.BOLD来指定字体的粗细,我如何在方法中写一个参数使得Font.BOLD 不是硬编码,但用户可以输入字体。风格?

我试过了

public static JLabel CreateJLabel(String nameOfFont, Font fontWeight, int fontSize) {
    Font myFont = new Font(nameOfFont, fontWeight ,fontSize);
}

但这没有用,我也尝试使用 int 类型,因为它在 IntelliJ 中突出显示为 int 数据类型

public static JLabel CreateJLabel(String nameOfLabel, String nameOfFont, int fontWeight, int fontSize) {
    JLabel myJLabel = new JLabel(nameOfLabel);
    Font myFont = new Font(nameOfFont, Font.fontWeight ,fontSize);
}

但这也是一个错误。

"我也尝试使用 int 类型来代替" - 这是正确的方法,因为 BOLD 只是 static int 的常量 Font,您只需要将其传递给您的方法即可。但是你的错误在这里:

new Font(nameOfFont, Font.fontWeight, fontSize);
                         ^        

这是不正确的 java 语法。

其实你想做的是把int常量方法参数直接传给Font的构造函数。 由于您尝试使用的此构造函数需要一个 int,因此您只需像这样传递 int 本身,它就会按您的预期工作:

public static JLabel createJLabel(String labelContent, String nameOfFont, int fontWeight, int fontSize) {
    JLabel myJLabel = new JLabel(labelContent);
    Font myFont = new Font(nameOfFont, fontWeight, fontSize);
    myJLabel.setFont(myFont);
    // do other stuff
    return myLabel;
}

最后,您可以使用您的方法创建标签如下:

JLabel myLabel = createJLabel("LabelContent", "Serif", Font.BOLD, 12);

另一种方法(可能是更好的方法)是将 Font 对象直接传递给您的方法,而不是传递创建 Font 对象所需的所有参数。

例如:

public static JLabel createJLabel(String labelContent, Font myFont) {
    JLabel myJLabel = new JLabel(labelContent);
    myJLabel.setFont(myFont);
    // do other stuff
    return myLabel;
}

这样称呼它:

JLabel myLabel = createJLabel("LabelContent", new Font("Serif", Font.BOLD, 12));

旁注:

  • fontWeight 应该重命名为更正确的变量命名方式,例如 fontStyle.
  • 方法名称应以小写字母开头。因此我将您的 CreateJLabel 方法重命名为 createJLabel.