You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JEditorPane字体修改无效问题求助(IntelliJ UI Builder)

问题分析与解决方案:Java Swing中编辑器字体修改不生效的问题

我一眼就看出问题所在啦——你在字体对话框的onOK()方法里犯了一个很典型的新手错误,不过完全没关系,毕竟刚捡回Java很容易踩这种小坑😉

核心问题

当你点击OK按钮时,你新建了一个全新的EditingPage对象:

EditingPage editingPage = new EditingPage();

这个新对象和当前界面上正在显示的编辑页没有半毛钱关系,你修改它的MainEditor字体,自然不会影响到用户正在使用的那个编辑器。

修复方案:传递原编辑页对象给对话框

我们只需要让FontDialouge拿到当前正在显示的EditingPage实例,而不是新建一个。具体步骤如下:

1. 修改FontDialouge类,接收原编辑页对象

package GUI;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class FontDialouge extends JDialog {
    private JPanel contentPane;
    private JButton buttonOK;
    private JTextField FontSizeTextBox;
    private EditingPage currentEditingPage; // 新增成员变量保存原编辑页

    // 修改构造方法,接收EditingPage实例
    public FontDialouge(EditingPage editingPage) {
        this.currentEditingPage = editingPage;
        setContentPane(contentPane);
        setModal(true);
        getRootPane().setDefaultButton(buttonOK);
        buttonOK.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                onOK();
            }
        });
    }

    private void onOK() {
        String inputFontSize = FontSizeTextBox.getText();
        try {
            int OutputFontSize = Integer.parseInt(inputFontSize);
            System.out.println("Successfully set the font!");
            // 直接操作原编辑页的编辑器,而不是新对象
            currentEditingPage.MainEditor.setFont(new Font("JetBrains Mono", Font.PLAIN, OutputFontSize));
            dispose(); // 设置完成后关闭对话框,提升体验
        } catch (NumberFormatException nfe) {
            JOptionPane.showMessageDialog(null, "Not a valid size !");
            System.out.println("ERROR! not a valid size! ERROR: " + nfe);
        }
    }
}

2. 修改EditingPage的按钮点击事件,传递当前实例

package GUI;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class EditingPage {
    JFrame EditingFrame;
    public JPanel EditPanel;
    public JEditorPane MainEditor;
    private JPanel ButtonPanel;
    private JButton fontSizeButton;

    public EditingPage() {
        fontSizeButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // 把当前EditingPage实例传递给对话框
                FontDialouge dialog = new FontDialouge(EditingPage.this);
                dialog.pack();
                dialog.setVisible(true);
            }
        });
    }
}

额外小建议

  • 类名拼写:FontDialouge应该是FontDialog(少了一个g),虽然不影响运行,但符合Java命名规范会更专业。
  • 可以扩展对话框功能,让用户选择字体名称、粗体/斜体样式,让你的记事本更贴近真实的记事本工具。
  • 给MainEditor设置一个初始字体,避免第一次修改前字体显示不确定。

内容的提问来源于stack exchange,提问作者YT GAMEWORKS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:28:45