java - 使用 Java Swing 和 JEditorPane 将标记的文本设为粗体

标签 java swing

我正在尝试用 java 用 swing 制作一个简单的文本编辑器。 到目前为止,我已经创建了这个 GUI:enter image description here

粗体、斜体和下划线目前无法使用。我不想做的是能够用鼠标突出显示某些文本,然后单击“粗体”按钮作为示例,使该文本粗体。但我不知道该怎么做才能实现这一目标。

到目前为止我的代码是:

import javax.swing.*;
import java.awt.*;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

public class MainFrame  {


    private JFrame frame;
    //private JTextArea textArea;
    private  JEditorPane textArea;


    MainFrame() {
        frame = new JFrame("Simple Text Editor");

        MakeContentPane();
        MakeMenubar();

        frame.pack();
        frame.setVisible(true);
        frame.setSize(800,400);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }


    public void MakeMenubar(){
        JMenuBar menubar = new JMenuBar();
        frame.setJMenuBar(menubar);

        // create the File menu
        JMenu fileMenu = new JMenu("File");
        menubar.add(fileMenu);

        JMenu editMenu = new JMenu("Edit");
        menubar.add(editMenu);

        JMenu aboutMenu = new JMenu("About"); // TODO: Create about popup windowd
        menubar.add(aboutMenu);

        JMenuItem quitItem = new JMenuItem("Quit");
        quitItem.addActionListener((e) -> System.exit(1));

        JMenuItem openItem = new JMenuItem("Open");
        openItem.addActionListener((e) -> Open());

        JMenuItem saveAsItem = new JMenuItem("Save");
        saveAsItem.addActionListener((e) -> SaveAs());

        fileMenu.add(openItem);
        fileMenu.add(saveAsItem);
        fileMenu.add(quitItem);

        Action action = new StyledEditorKit.BoldAction();
        action.putValue(Action.NAME, "Bold");
        editMenu.add(action);

    }

    public void MakeContentPane() {
        //textArea = new JTextArea();
        textArea = new JEditorPane("text/html", "");


        Container contentPane = frame.getContentPane();

        contentPane.setLayout(new BorderLayout());
        contentPane.add(textArea, BorderLayout.CENTER);

        JButton boldItem = new JButton("Bold"); //TODO Create action
        JButton italicItem = new JButton("Italic"); //TODO Create action
        JButton underLineItem = new JButton("Underline"); //TODO Create action

        JPanel buttons = new JPanel();
        buttons.setLayout(new GridLayout(1,3));
        buttons.add(boldItem);
        buttons.add(italicItem);
        buttons.add(underLineItem);

        contentPane.add(buttons, BorderLayout.NORTH);


    }


    public void SaveAs() {

        final JFileChooser SaveAs = new JFileChooser();
        SaveAs.setApproveButtonText("Save");
        int actionDialog = SaveAs.showOpenDialog(frame);
        if (actionDialog != JFileChooser.APPROVE_OPTION) {
            return;
        }

        File fileName = new File(SaveAs.getSelectedFile() + ".html");
        BufferedWriter outFile = null;
        try {
            outFile = new BufferedWriter(new FileWriter(fileName));

            textArea.write(outFile); 

        } catch (IOException ex) {
            ex.printStackTrace();
        } finally {
            if (outFile != null) {
                try {
                    outFile.close();
                } catch (IOException e) {

                }
            }
        }
    }

    public void Open(){
        // TODO: Create method to open files
        final JFileChooser SaveAs = new JFileChooser();
    }


    public static void main(String[] args) {
        MainFrame frame = new MainFrame();

    }



}

最佳答案

不要使用 JEditorPane,那是针对 HTML 的。

而是使用带有简单文本的 JTextPane,然后您可以使用编辑器工具包提供的默认操作将属性应用于文本。

StyledEditorKit 附带了您可以使用的粗体、斜体和下划线操作。例如:

JButton bold = new JButton( new StyledEditorKit.BOLD_ACTION );

阅读 Swing 教程中关于 Text Component Features 的部分了解更多信息和帮助您入门的工作示例。

关于java - 使用 Java Swing 和 JEditorPane 将标记的文本设为粗体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46917000/

相关文章:

java - Maven 多模块 - 打包后步骤

java - 未最大化时,线条绘制在错误的位置

java - 我如何在 java swing 中创建选项卡

java - 用于聊天室的 JTextPane 或 JEditorPane

java - 查找 java.lang.OutOfMemoryError : Java heap space using Eclipse MAT 的根本原因

java - ldap超时在linux中不起作用

java - 禁用 JFrame 的拖动

java - 如何去除打印页面的边距

java - 如何从 Java 对象中提取数据?

Java - 添加到 Lambda 表达式中的字符串