如何在Java中为Swing组件设置字体权重

如何在Java中为Swing组件设置字体权重,java,swing,fonts,font-size,Java,Swing,Fonts,Font Size,我想在JFrame对话框中为组件设置不同的字体权重。我该怎么做 在下面的Java语句中 setFont(new Font("Dialog", Font.BOLD, 12)); 当我使用Font.BOLD时,它太粗体;当我使用Font.Plain时,它太简单。我想要介于两者之间的东西。也许我错了,但我认为类字体只有粗体和普通字体,但你可以在数字上进行更改 setFont(new Font("Dialog", Font.BOLD, 12)); setFont(new Font("Dialog",

我想在JFrame对话框中为组件设置不同的字体权重。我该怎么做

在下面的Java语句中

setFont(new Font("Dialog", Font.BOLD, 12));

当我使用Font.BOLD时,它太粗体;当我使用Font.Plain时,它太简单。我想要介于两者之间的东西。

也许我错了,但我认为类字体只有粗体和普通字体,但你可以在数字上进行更改

setFont(new Font("Dialog", Font.BOLD, 12));

setFont(new Font("Dialog", Font.plain, 27));
但是在类中
java.awt.font.texttribute


你有粗体和半粗体的重量…

韦勒部分正确。您可以使用获取字体:

Map<TextAttribute, Object> attributes = new HashMap<>();

attributes.put(TextAttribute.FAMILY, Font.DIALOG);
attributes.put(TextAttribute.WEIGHT, TextAttribute.WEIGHT_SEMIBOLD);
attributes.put(TextAttribute.SIZE, 12);

label.setFont(Font.getFont(attributes));

这将保留字体的系列和大小,用户可能出于可读性原因在其桌面首选项中设置了这些系列和大小。

这将更改字体大小,但不会更改字体重量。但是TextAttribute听起来很有趣,我知道改变字体大小对你的工作很有效。对不起,我尽了最大努力,但我认为TextAttribute很好:)我在Windows 7上用Java 8尝试了这个方法,但似乎不起作用。不幸的是,指定的权重被忽略,并且总是选择常规字体(我尝试了Arial的黑色变体,以及Myriad和Lato的浅色变体)。
Font font = label.getFont();

font = font.deriveFont(
    Collections.singletonMap(
        TextAttribute.WEIGHT, TextAttribute.WEIGHT_SEMIBOLD));

label.setFont(font);