在Java中,TextArea文本样式不会从斜体更改为plain

时间:2016-09-11 12:02:47

标签: java swing actionlistener jtextarea jradiobutton

我有两个RadioButtonTextArea选择斜体或普通样式。(它们被添加到ButtonGroup,因此只能选择一个)

我将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 Clicked显示在命令行上。

有什么问题?

1 个答案:

答案 0 :(得分:2)

将您的代码更改为

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获取名称,并根据当前应用的样式返回值,但getName()仍将返回相同的字体名称。但最好使用deriveFont();