使用Java Swing和JEditorPane使标记文本变为粗体

时间:2017-10-24 17:51:58

标签: java swing

我正在尝试使用swing在java中创建一个简单的文本编辑器。 到目前为止,我已经创建了这个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();

    }



}

1 个答案:

答案 0 :(得分:2)

不要使用JEditorPane,即用于HTML。

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

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

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

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