?? htmleditor.java
字號:
package connex.app.utils.HTMLUtils;
import java.awt.*;
import javax.swing.*;
import javax.swing.text.html.HTMLEditorKit;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyledEditorKit.AlignmentAction;
import javax.swing.text.html.HTMLDocument;
import java.awt.event.ActionEvent;
import java.util.ArrayList;
import java.awt.event.ActionListener;
import javax.swing.text.StyledEditorKit;
import org.jdesktop.jdnc.incubator.jxcombobox.colorcombo.ColorComboBox;
import javax.swing.event.ChangeListener;
import javax.swing.event.ChangeEvent;
import javax.swing.text.Element;
import javax.swing.text.AttributeSet;
import javax.swing.text.html.CSS;
import java.io.File;
import org.jdesktop.swingx.JXEditorPane;
import connex.app.utils.ToolBar;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeEvent;
import javax.swing.event.CaretListener;
import javax.swing.event.CaretEvent;
import javax.swing.event.PopupMenuListener;
import java.awt.event.ItemListener;
import java.awt.event.ItemEvent;
/**
* <p>Title: </p>
*
* <p>Description: </p>
*
* <p>Copyright: Copyright (c) 2006</p>
*
* <p>Company: FH-Dortmund</p>
*
* @author not attributable
* @version 1.0
*/
public class HTMLEditor extends JPanel {
private HTMLEditorKit kit;
private HTMLDocument htmlDocument;
FlowLayout flowLayout1 = new FlowLayout();
private BorderLayout borderLayout1 = new BorderLayout();
private ToolBar toolbar = new ToolBar();
private JScrollPane jScrollPane1 = new JScrollPane();
private JXEditorPane editor = new JXEditorPane();
private JPanel jPanel1 = new JPanel();
private JComboBox font = new JComboBox();
//private JButton size = new JButton();
private JComboBox size = new JComboBox();
private JPopupMenu sizeMenu = new JPopupMenu();
private boolean bld;
private boolean under;
private boolean itlc;
private JToggleButton left = new JToggleButton(new AlignmentAction(
"", StyleConstants.ALIGN_LEFT));
private JToggleButton center = new JToggleButton(new AlignmentAction(
"", StyleConstants.ALIGN_CENTER));
private JToggleButton right = new JToggleButton(new AlignmentAction(
"", StyleConstants.ALIGN_RIGHT));
private JToggleButton bold = new JToggleButton(new HTMLEditorKit.BoldAction());
private JToggleButton italic = new JToggleButton(new HTMLEditorKit.
ItalicAction());
private JToggleButton underline = new JToggleButton(new HTMLEditorKit.
UnderlineAction());
private JComboBox color = new JComboBox();
/***** images */
ImageIcon leftIco = new ImageIcon("resources"+File.separator+"images" + File.separator + "editkit" +
File.separator + "left.gif");
ImageIcon centerIco = new ImageIcon("resources"+File.separator+"images" + File.separator + "editkit" +
File.separator + "center.gif");
ImageIcon rightIco = new ImageIcon("resources"+File.separator+"images" + File.separator + "editkit" +
File.separator + "right.gif");
ImageIcon boldIco = new ImageIcon("resources"+File.separator+"images" + File.separator + "editkit" +
File.separator + "bold.gif");
ImageIcon italIcico = new ImageIcon("resources"+File.separator+"images" + File.separator + "editkit" +
File.separator + "italic.gif");
ImageIcon underlineIco = new ImageIcon("resources"+File.separator+"images" + File.separator + "editkit" +
File.separator +
"underline.gif");
private FlowLayout flowLayout2 = new FlowLayout();
public HTMLEditor() {
try {
jbInit();
} catch (Exception exception) {
exception.printStackTrace();
}
}
private void jbInit() throws Exception {
toolbar.setPreferredSize(new Dimension(119, 39));
kit = new HTMLEditorKit();
htmlDocument = (HTMLDocument) (kit.createDefaultDocument());
editor.setEditorKit(kit);
editor.setCursor(new Cursor(Cursor.TEXT_CURSOR));
editor.addKeyListener(new KeyAdapter() {
public void keyTyped(KeyEvent e) {
editor_keyTyped(e);
}
});
editor.setDocument(htmlDocument);
editor.setCaretPosition(0);
editor.getCaret().addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
Element elm = htmlDocument.getCharacterElement(editor
.getCaretPosition());
Element par = htmlDocument.getParagraphElement(
editor.getCaretPosition());
AttributeSet parAttr = par.getAttributes();
AttributeSet elmAttr = elm.getAttributes();
bold.setSelected(
htmlDocument.getFont(elm.getAttributes()).isBold());
italic.setSelected(
htmlDocument.getFont(elm.getAttributes()).isItalic());
underline.setSelected(
elmAttr.isDefined(CSS.Attribute.TEXT_DECORATION)
&&
elmAttr.getAttribute(CSS.Attribute.TEXT_DECORATION).
toString().
equals("underline"));
right.setSelected(
parAttr.isDefined(CSS.Attribute.TEXT_ALIGN)
&&
parAttr.getAttribute(CSS.Attribute.TEXT_ALIGN).toString().
equals(
"right"));
center.setSelected(
parAttr.isDefined(CSS.Attribute.TEXT_ALIGN)
&&
parAttr.getAttribute(CSS.Attribute.TEXT_ALIGN).toString().
equals(
"center"));
left.setSelected(
parAttr.isDefined(CSS.Attribute.TEXT_ALIGN)
&&
parAttr.getAttribute(CSS.Attribute.TEXT_ALIGN).toString().
equals(
"left"));
// fontCombo.setSelectedItem(htmlDocument.getFont(elm.getAttributes()));
// color.setSelectedItem((Color)htmlDocument.getForeground(elm.getAttributes()));
}
});
this.setLayout(borderLayout1);
this.setBackground(Color.white);
size.setFont(new java.awt.Font("Arial", Font.BOLD, 14));
size.setOpaque(false);
size.setRequestFocusEnabled(false);
size.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
size_itemStateChanged(e);
}
});
this.addSizes();
size.setSelectedIndex(5);
jScrollPane1.setBorder(null);
bold.setMargin(new Insets(0, 0, 0, 0));
bold.setText("");
italic.setMargin(new Insets(0, 0, 0, 0));
italic.setText("");
underline.setMargin(new Insets(0, 0, 0, 0));
underline.setText("");
left.setMargin(new Insets(0, 0, 0, 0));
center.setMargin(new Insets(0, 0, 0, 0));
right.setMargin(new Insets(0, 0, 0, 0));
toolbar.setLayout(flowLayout2);
font = getFontComboBox();
font.setSelectedIndex(2);
setSelectedFont();
color = new ColorComboBox();
color.setBorder(BorderFactory.createEmptyBorder());
color.setOpaque(false);
color.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
btnColor_actionPerformed(e);
}
});
left.setRequestFocusEnabled(false);
left.setOpaque(false);
left.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
center.setSelected(false);
right.setSelected(false);
}
});
center.setRequestFocusEnabled(false);
center.setOpaque(false);
center.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
left.setSelected(false);
right.setSelected(false);
}
});
right.setRequestFocusEnabled(false);
right.setOpaque(false);
right.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
center.setSelected(false);
left.setSelected(false);
}
});
bold.setRequestFocusEnabled(false);
bold.setOpaque(false);
italic.setRequestFocusEnabled(false);
italic.setOpaque(false);
underline.setRequestFocusEnabled(false);
underline.setOpaque(false);
font.setPreferredSize(new Dimension(64, 25));
font.setRequestFocusEnabled(false);
color.setPreferredSize(new Dimension(44, 30));
color.setRequestFocusEnabled(false);
left.setIcon(leftIco);
center.setIcon(centerIco);
right.setIcon(rightIco);
bold.setIcon(boldIco);
italic.setIcon(italIcico);
underline.setIcon(underlineIco);
jPanel1.setOpaque(false);
//toolbar.setLayout(flowLayout1);
toolbar.setFloatable(false);
toolbar.add(font);
toolbar.add(size);
toolbar.add(left);
toolbar.add(center);
toolbar.add(right);
toolbar.add(bold);
toolbar.add(italic);
toolbar.add(underline);
toolbar.add(color);
this.add(jScrollPane1, java.awt.BorderLayout.CENTER);
this.add(toolbar, java.awt.BorderLayout.NORTH);
this.add(jPanel1, java.awt.BorderLayout.SOUTH);
jScrollPane1.getViewport().add(editor);
}
protected void addComponent(JComponent btn) {
btn.setPreferredSize(new Dimension(46, 30));
toolbar.add(btn);
}
private void addSizes() {
size.addItem(new Integer(8));
size.addItem(new Integer(9));
size.addItem(new Integer(10));
size.addItem(new Integer(11));
size.addItem(new Integer(12));
size.addItem(new Integer(14));
size.addItem(new Integer(16));
size.addItem(new Integer(18));
size.addItem(new Integer(20));
size.addItem(new Integer(22));
size.addItem(new Integer(24));
size.addItem(new Integer(26));
size.addItem(new Integer(28));
size.addItem(new Integer(36));
size.addItem(new Integer(48));
size.addItem(new Integer(72));
}
public void clear() {
editor.setText("");
setSelectedFont();
}
/**
* Returns the HTML text contained in this HTMLEditor's body.
* @return HTML text
*/
public String getBodyText() {
String txt = editor.getText();
int pos1 = txt.indexOf("<body>") + 6;
int pos2 = txt.lastIndexOf("</body>");
txt = txt.substring(pos1, pos2);
return txt;
}
/**
* Appends the specified HTML text.
* @param html the HTML text to append
*/
public void addHTML(String html) {
String txt = editor.getText();
int pos;
pos = txt.lastIndexOf("</p>");
if (pos == -1) {
pos = txt.lastIndexOf("</p>");
}
if (pos >= 0) {
editor.setText(txt.substring(0, pos) + html + txt.substring(pos));
}
editor.setCaretPosition(htmlDocument.getLength());
}
public JEditorPane getEditor() {
return this.editor;
}
public JComboBox getFontComboBox() {
Font[] fonts = GraphicsEnvironment.getLocalGraphicsEnvironment().
getAllFonts();
ArrayList fontList = new ArrayList(10);
for (int i = 0; i < fonts.length; i++) {
if (!fontList.contains(fonts[i].getFamily())) {
//System.out.println(fonts[i].getFamily());
fontList.add(fonts[i].deriveFont(12.0f));
}
}
fonts = new Font[fontList.size()];
fontList.toArray(fonts);
final JComboBox comboBox = new JComboBox(fonts);
comboBox.setFont(fonts[2]);
comboBox.setRenderer(new DefaultListCellRenderer() {
public Component getListCellRendererComponent(JList list,
Object value,
int index, boolean isSelected, boolean cellHasFocus) {
Font font = (Font) value;
JLabel label = (JLabel)super.getListCellRendererComponent(list,
font.getFamily(), index, isSelected, cellHasFocus);
label.setFont(font);
return label;
}
});
comboBox.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
setSelectedFont();
}
});
return comboBox;
}
public void btnColor_actionPerformed(ActionEvent e) {
Color c =
(Color) color.getSelectedItem();
if (c != null) {
new StyledEditorKit.ForegroundAction("", c).actionPerformed(
new ActionEvent(editor,
ActionEvent.ACTION_PERFORMED, ""));
}
}
public void setSelectedFont() {
StyledEditorKit.FontFamilyAction action = new StyledEditorKit.
FontFamilyAction
("",
((Font) font.getSelectedItem()).getFamily());
font.setFont((Font) font.getSelectedItem());
action.actionPerformed(new ActionEvent(font, ActionEvent.ACTION_PERFORMED,
""));
}
public static void main(String arg[]) {
JFrame f = new JFrame();
f.setSize(400, 400);
f.add(new HTMLEditor());
f.setVisible(true);
}
public void editor_keyTyped(KeyEvent e) {
this.setSelectedFont();
btnColor_actionPerformed(null);
new HTMLEditorKit.FontSizeAction("", (Integer) size.getSelectedItem()).
actionPerformed(null);
}
public void size_itemStateChanged(ItemEvent e) {
new HTMLEditorKit.FontSizeAction("", (Integer) size.getSelectedItem()).
actionPerformed(null);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -