MainClass.java Source code

Java tutorial

Introduction

Here is the source code for MainClass.java

Source

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GraphicsEnvironment;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JColorChooser;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
import javax.swing.text.AttributeSet;
import javax.swing.text.Element;
import javax.swing.text.MutableAttributeSet;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyledDocument;
import javax.swing.text.StyledEditorKit;

public class MainClass {
    public MainClass() {
        JFrame frame = new JFrame();
        JTextPane textPane = new JTextPane();
        JScrollPane scrollPane = new JScrollPane(textPane);

        JPanel north = new JPanel();

        JMenuBar menu = new JMenuBar();
        JMenu styleMenu = new JMenu();
        styleMenu.setText("Style");

        Action boldAction = new BoldAction();
        boldAction.putValue(Action.NAME, "Bold");
        styleMenu.add(boldAction);

        Action italicAction = new ItalicAction();
        italicAction.putValue(Action.NAME, "Italic");
        styleMenu.add(italicAction);

        Action foregroundAction = new ForegroundAction();
        foregroundAction.putValue(Action.NAME, "Color");
        styleMenu.add(foregroundAction);

        Action formatTextAction = new FontAndSizeAction();
        formatTextAction.putValue(Action.NAME, "Font and Size");
        styleMenu.add(formatTextAction);

        menu.add(styleMenu);

        north.add(menu);
        frame.getContentPane().setLayout(new BorderLayout());
        frame.getContentPane().add(north, BorderLayout.NORTH);
        frame.getContentPane().add(scrollPane, BorderLayout.CENTER);
        frame.setSize(800, 500);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        new MainClass();
    }
}

class BoldAction extends StyledEditorKit.StyledTextAction {
    private static final long serialVersionUID = 9174670038684056758L;

    public BoldAction() {
        super("font-bold");
    }

    public String toString() {
        return "Bold";
    }

    public void actionPerformed(ActionEvent e) {
        JEditorPane editor = getEditor(e);
        if (editor != null) {
            StyledEditorKit kit = getStyledEditorKit(editor);
            MutableAttributeSet attr = kit.getInputAttributes();
            boolean bold = (StyleConstants.isBold(attr)) ? false : true;
            SimpleAttributeSet sas = new SimpleAttributeSet();
            StyleConstants.setBold(sas, bold);
            setCharacterAttributes(editor, sas, false);

        }
    }
}

class ItalicAction extends StyledEditorKit.StyledTextAction {

    private static final long serialVersionUID = -1428340091100055456L;

    public ItalicAction() {
        super("font-italic");
    }

    public String toString() {
        return "Italic";
    }

    public void actionPerformed(ActionEvent e) {
        JEditorPane editor = getEditor(e);
        if (editor != null) {
            StyledEditorKit kit = getStyledEditorKit(editor);
            MutableAttributeSet attr = kit.getInputAttributes();
            boolean italic = (StyleConstants.isItalic(attr)) ? false : true;
            SimpleAttributeSet sas = new SimpleAttributeSet();
            StyleConstants.setItalic(sas, italic);
            setCharacterAttributes(editor, sas, false);
        }
    }
}

class ForegroundAction extends StyledEditorKit.StyledTextAction {

    private static final long serialVersionUID = 6384632651737400352L;

    JColorChooser colorChooser = new JColorChooser();

    JDialog dialog = new JDialog();

    boolean noChange = false;

    boolean cancelled = false;

    public ForegroundAction() {
        super("foreground");

    }

    public void actionPerformed(ActionEvent e) {
        JTextPane editor = (JTextPane) getEditor(e);

        if (editor == null) {
            JOptionPane.showMessageDialog(null,
                    "You need to select the editor pane before you can change the color.", "Error",
                    JOptionPane.ERROR_MESSAGE);
            return;
        }
        int p0 = editor.getSelectionStart();
        StyledDocument doc = getStyledDocument(editor);
        Element paragraph = doc.getCharacterElement(p0);
        AttributeSet as = paragraph.getAttributes();
        fg = StyleConstants.getForeground(as);
        if (fg == null) {
            fg = Color.BLACK;
        }
        colorChooser.setColor(fg);

        JButton accept = new JButton("OK");
        accept.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
                fg = colorChooser.getColor();
                dialog.dispose();
            }
        });

        JButton cancel = new JButton("Cancel");
        cancel.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
                cancelled = true;
                dialog.dispose();
            }
        });

        JButton none = new JButton("None");
        none.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
                noChange = true;
                dialog.dispose();
            }
        });

        JPanel buttons = new JPanel();
        buttons.add(accept);
        buttons.add(none);
        buttons.add(cancel);

        dialog.getContentPane().setLayout(new BorderLayout());
        dialog.getContentPane().add(colorChooser, BorderLayout.CENTER);
        dialog.getContentPane().add(buttons, BorderLayout.SOUTH);
        dialog.setModal(true);
        dialog.pack();
        dialog.setVisible(true);

        if (!cancelled) {

            MutableAttributeSet attr = null;
            if (editor != null) {
                if (fg != null && !noChange) {
                    attr = new SimpleAttributeSet();
                    StyleConstants.setForeground(attr, fg);
                    setCharacterAttributes(editor, attr, false);
                }
            }
        } // end if color != null
        noChange = false;
        cancelled = false;
    }

    private Color fg;
}

class FontAndSizeAction extends StyledEditorKit.StyledTextAction {

    private static final long serialVersionUID = 584531387732416339L;

    private String family;

    private float fontSize;

    JDialog formatText;

    private boolean accept = false;

    JComboBox fontFamilyChooser;

    JComboBox fontSizeChooser;

    public FontAndSizeAction() {
        super("Font and Size");
    }

    public String toString() {
        return "Font and Size";
    }

    public void actionPerformed(ActionEvent e) {
        JTextPane editor = (JTextPane) getEditor(e);
        int p0 = editor.getSelectionStart();
        StyledDocument doc = getStyledDocument(editor);
        Element paragraph = doc.getCharacterElement(p0);
        AttributeSet as = paragraph.getAttributes();

        family = StyleConstants.getFontFamily(as);
        fontSize = StyleConstants.getFontSize(as);

        formatText = new JDialog(new JFrame(), "Font and Size", true);
        formatText.getContentPane().setLayout(new BorderLayout());

        JPanel choosers = new JPanel();
        choosers.setLayout(new GridLayout(2, 1));

        JPanel fontFamilyPanel = new JPanel();
        fontFamilyPanel.add(new JLabel("Font"));

        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
        String[] fontNames = ge.getAvailableFontFamilyNames();

        fontFamilyChooser = new JComboBox();
        for (int i = 0; i < fontNames.length; i++) {
            fontFamilyChooser.addItem(fontNames[i]);
        }
        fontFamilyChooser.setSelectedItem(family);
        fontFamilyPanel.add(fontFamilyChooser);
        choosers.add(fontFamilyPanel);

        JPanel fontSizePanel = new JPanel();
        fontSizePanel.add(new JLabel("Size"));
        fontSizeChooser = new JComboBox();
        fontSizeChooser.setEditable(true);
        fontSizeChooser.addItem(new Float(4));
        fontSizeChooser.addItem(new Float(8));
        fontSizeChooser.addItem(new Float(12));
        fontSizeChooser.addItem(new Float(16));
        fontSizeChooser.addItem(new Float(20));
        fontSizeChooser.addItem(new Float(24));
        fontSizeChooser.setSelectedItem(new Float(fontSize));
        fontSizePanel.add(fontSizeChooser);
        choosers.add(fontSizePanel);

        JButton ok = new JButton("OK");
        ok.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
                accept = true;
                formatText.dispose();
                family = (String) fontFamilyChooser.getSelectedItem();
                fontSize = Float.parseFloat(fontSizeChooser.getSelectedItem().toString());
            }
        });

        JButton cancel = new JButton("Cancel");
        cancel.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
                formatText.dispose();
            }
        });

        JPanel buttons = new JPanel();
        buttons.add(ok);
        buttons.add(cancel);
        formatText.getContentPane().add(choosers, BorderLayout.CENTER);
        formatText.getContentPane().add(buttons, BorderLayout.SOUTH);
        formatText.pack();
        formatText.setVisible(true);

        MutableAttributeSet attr = null;
        if (editor != null && accept) {
            attr = new SimpleAttributeSet();
            StyleConstants.setFontFamily(attr, family);
            StyleConstants.setFontSize(attr, (int) fontSize);
            setCharacterAttributes(editor, attr, false);
        }

    }
}