javaswingawttext-editorstyledtext

Java Swing Text Editor


Possible Duplicate:
What components should I use for building a Java WYSIWYG HTML editor

I'm a total newbie in Java programming. I have to do text editor in Swing/AWT and I have one question about it. How can I edit one selected word, for example change its color? Which component and which functions should I use?


Solution

  • For a beginner to Java Swing, try to keep this project simple. To show multiple colors and multiple sizes in the same document requires a lot of complex coding and rendering html.

    Try to just provide the basic copy,cut,paste features because they are easier to implement.

    To provide those features, a JTextArea is sufficient.

    Try this. It's a pretty simple text editor

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    public class Document extends JFrame implements ActionListener
    {
    private JTextArea ta;
    private int count;
    private JMenuBar menuBar;
    private JMenu fileM,editM,viewM;
    private JScrollPane scpane;
    private JMenuItem exitI,cutI,copyI,pasteI,selectI,saveI,loadI,statusI;
    private String pad;
    private JToolBar toolBar;
    public Document()
    {
        super("Document");
        setSize(600, 600);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Container pane = getContentPane();
        pane.setLayout(new BorderLayout());
    
        count = 0;
        pad = " ";
        ta = new JTextArea(); //textarea
        menuBar = new JMenuBar(); //menubar
        fileM = new JMenu("File"); //file menu
        editM = new JMenu("Edit"); //edit menu
        viewM = new JMenu("View"); //edit menu
        scpane = new JScrollPane(ta); //scrollpane  and add textarea to scrollpane
        exitI = new JMenuItem("Exit");
        cutI = new JMenuItem("Cut");
        copyI = new JMenuItem("Copy");
        pasteI = new JMenuItem("Paste");
        selectI = new JMenuItem("Select All"); //menuitems
        saveI = new JMenuItem("Save"); //menuitems
        loadI = new JMenuItem("Load"); //menuitems
        statusI = new JMenuItem("Status"); //menuitems
        toolBar = new JToolBar();
    
        ta.setLineWrap(true);
        ta.setWrapStyleWord(true);
    
        setJMenuBar(menuBar);
        menuBar.add(fileM);
        menuBar.add(editM);
        menuBar.add(viewM);
    
        fileM.add(saveI);
        fileM.add(loadI);
        fileM.add(exitI);
    
        editM.add(cutI);
        editM.add(copyI);
        editM.add(pasteI);        
        editM.add(selectI);
    
        viewM.add(statusI);
    
        saveI.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, ActionEvent.CTRL_MASK));
        loadI.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_L, ActionEvent.CTRL_MASK));
        cutI.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, ActionEvent.CTRL_MASK));
        copyI.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, ActionEvent.CTRL_MASK));
        pasteI.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V, ActionEvent.CTRL_MASK));
        selectI.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, ActionEvent.CTRL_MASK));
    
        pane.add(scpane,BorderLayout.CENTER);
        pane.add(toolBar,BorderLayout.SOUTH);
    
        saveI.addActionListener(this);
        loadI.addActionListener(this);
        exitI.addActionListener(this);
        cutI.addActionListener(this);
        copyI.addActionListener(this);
        pasteI.addActionListener(this);
        selectI.addActionListener(this);
        statusI.addActionListener(this);
    
        setVisible(true);
    }
    public void actionPerformed(ActionEvent e) 
    {
        JMenuItem choice = (JMenuItem) e.getSource();
        if (choice == saveI)
        {
            //not yet implmented
        }
        else if (choice == exitI)
            System.exit(0);
        else if (choice == cutI)
        {
            pad = ta.getSelectedText();
            ta.replaceRange("", ta.getSelectionStart(), ta.getSelectionEnd());
        }
        else if (choice == copyI)
            pad = ta.getSelectedText();
        else if (choice == pasteI)
            ta.insert(pad, ta.getCaretPosition());
        else if (choice == selectI)
            ta.selectAll();
        else if (e.getSource() == statusI)
        {
            //not yet implmented
        }
    }
    public static void main(String[] args) 
    {
        new Document();
    }