在 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
.
我正在编写一个方法来创建一个 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
.