How to define rich text box in java?
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.text.*;
public class RichTextBox{
public RichTextBox(){
JFrame frame = new JFrame();
JTextPane textPane = new JTextPane();
JScrollPane scrollPane = new JScrollPane(textPane);
JPanel north = new JPanel();
JMenuBar menu = new JMenuBar();
JMenu boldMenu = new JMenu();
boldMenu.setText("B");
JMenu italicMenu = new JMenu();
italicMenu.setText("I");
JMenu lineMenu = new JMenu();
lineMenu.setText("U");
JMenu fontMenu = new JMenu();
fontMenu.setText("F");
JMenu colorMenu = new JMenu();
colorMenu.setText("A");
Action boldAction = new BoldAction();
boldMenu.add(boldAction);
Action italicAction = new ItalicAction();
italicMenu.add(italicAction);
Action uAction = new UnderLineAction();
lineMenu.add(uAction);
Action foregroundAction = new ForegroundAction();
colorMenu.add(foregroundAction);
Action formatTextAction = new FontAction();
fontMenu.add(formatTextAction);
menu.add(boldMenu);
menu.add(italicMenu);
menu.add(lineMenu);
menu.add(fontMenu);
menu.add(colorMenu);
north.add(menu);
frame.getContentPane().setLayout(new BorderLayout());
frame.getContentPane().add(north, BorderLayout.NORTH);
frame.getContentPane().add(scrollPane, BorderLayout.CENTER);
frame.setSize(400, 200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
public static void main(String[] args) {
new RichTextBox();
}
}
class BoldAction extends StyledEditorKit.StyledTextAction {
public BoldAction(){
super("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 UnderLineAction extends StyledEditorKit.StyledTextAction {
public UnderLineAction(){
super("underline");
}
public void actionPerformed(ActionEvent e) {
JEditorPane editor = getEditor(e);
if(editor != null){
StyledEditorKit kit = getStyledEditorKit(editor);
MutableAttributeSet attr = kit.getInputAttributes();
boolean ul = (StyleConstants.isUnderline(attr)) ? false : true;
SimpleAttributeSet sas = new SimpleAttributeSet();
StyleConstants.setUnderline(sas, ul);
setCharacterAttributes(editor, sas, false);
}
}
}
class ItalicAction extends StyledEditorKit.StyledTextAction{
public ItalicAction() {
super("font-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);
}
}
}
continue....
class ForegroundAction extends StyledEditorKit.StyledTextAction {
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);
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();
}
});
JPanel buttons = new JPanel();
buttons.add(accept);
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);
}
}
}
noChange = false;
cancelled = false;
}
private Color fg;
}
class FontAction extends StyledEditorKit.StyledTextAction {
private String family;
private float fontSize;
JDialog formatText;
private boolean accept = false;
JComboBox fontFamilyChooser;
JComboBox fontSizeChooser;
public FontAction(){
super("Font");
}
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", 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);
JButton ok = new JButton("OK");
ok.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
accept = true;
formatText.dispose();
family = (String) fontFamilyChooser.getSelectedItem();
}
});
JPanel buttons = new JPanel();
buttons.add(ok);
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);
}
}
}