java - Java 中 TextArea 文本样式不会从斜体更改为纯文本

标签 java swing actionlistener jtextarea jradiobutton

我有两个 RadioButton 来为 TextArea 选择斜体或纯色样式。(它们被添加到 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);
}

问题是,当我单击“斜体”时,文本变为斜体,但单击“普通”时,文本不会变为普通。然而消息 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 来获取名称,并根据当前应用的样式返回值,但 getName() 仍将返回相同的字体名称。但最好使用deriveFont();

关于java - Java 中 TextArea 文本样式不会从斜体更改为纯文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39435860/

相关文章:

java - 如何从 JButton 内部调用 Swing 定时器

java - 使用 Java GUI 将事件处理程序插入图像中

java - 使用适用于桌面应用程序的 Java 开发工具包进行 AWS Cognito 登录

java - 插入失败然后更新或加载然后决定是插入还是更新

java - 如何让我的 TreeCellRenderer 填充我的 JTree?

java - 需要公开一个 Action 监听器中的变量

java - 我无法将字符串从 ActionListener 获取到 Java 中的不同类

java - 多对多 : MappingException: Could not determine type for: java. util.List

java - 如何从 JavaFX 中的 TextArea 获取文本并保存换行符?

java - 如何检测一个旋转窗口是否在另一个旋转窗口上方