【问题标题】:Passing a special type of class as a parameter in Java?在Java中传递一种特殊类型的类作为参数?
【发布时间】:2021-08-11 08:45:25
【问题描述】:

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

但这也是一个错误。

【问题讨论】:

  • 如何在方法中写入参数,以便 Font.BOLD 不是硬编码但用户可以输入字体。样式?...您可以使用 2 个JCheckBoxes(一个用于BOLD,一个用于ITALIC)。

标签: java swing jlabel


【解决方案1】:

我也尝试使用 int 类型” - 这是正确的方法,因为 BOLD 只是 Fontstatic int 常量,您只需将其传递给你的方法。但是你的错误在这里:

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

【讨论】:

  • 啊,那行得通,也许我只是把事情复杂化了哈哈。感谢您的详细回答。而且我一直认为粗体或不粗体被认为是字体粗细,我知道在 CSS 中是这样,也许它在 Java 中有所不同
  • @jp1955 哈哈,可能是我太迂腐了,没叫出参数命名,不过是的,java Font 称之为“风格”。
猜你喜欢
  • 1970-01-01
  • 2021-02-12
  • 2013-02-16
  • 1970-01-01
  • 1970-01-01
  • 2013-04-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多