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
相关产品推荐
相关产品推荐

