Java 中的 TextArea 文本样式不会从斜体变为普通

TextArea text style does not change to plain from italic in Java

我有两个 RadioButton 到 select TextArea 的斜体或普通样式。(它们被添加到 ButtonGroup 所以只有一个可以 selected)

我有 actionPerformed 方法作为

public void actionPerformed(ActionEvent ae) {
    Font currentFont = taText.getFont(); //taText is TextArea
    Font fontToSet;
    String command = ae.getActionCommand();
    if (command.equals("Italic")) {
        System.out.println("Italic clicked");
        fontToSet = new Font(currentFont.getFontName(),Font.ITALIC,currentFont.getSize());
    }
    else {
        System.out.println("Plain clicked");
        fontToSet = new Font(currentFont.getFontName(), Font.PLAIN, currentFont.getSize());
    }
    taText.setFont(fontToSet);
}

问题是当我点击"Italic"时,文字变成斜体,但是当点击Plain时,文字不会变成Plain。然而 Plain Clicked 消息显示在命令行上。

有什么问题?

将您的代码更改为

public void actionPerformed(ActionEvent ae) {
    Font currentFont = taText.getFont(); //taText is TextArea
    Font fontToSet;
    String command = ae.getActionCommand();
    if (command.equals("Italic")) {
        System.out.println("Italic clicked");
        fontToSet =currentFont .deriveFont(Font.ITALIC);
    else {
        System.out.println("Plain clicked");
        fontToSet = currentFont .deriveFont(Font.PLAIN);
    }
    taText.setFont(fontToSet);
}

问题是,getFontName() 调用 Font2D 来获取名称,它 return 的值基于当前应用的样式,但 getName() 仍将 return 相同的字体名称.但最好使用 deriveFont();