import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GraphicsEnvironment;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.ButtonGroup;
import javax.swing.JCheckBox;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPopupMenu;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JToolBar;
import javax.swing.KeyStroke;
import com.sun.corba.se.spi.orbutil.fsm.Input;
public class EditorJFrame extends JFrame implements MouseListener, ActionListener {
private static final long serialVersionUID = 1L;
JComboBox combobox_name ,combobox_color;
JTextArea text;
JRadioButton[] menuit;
Color[] colors = {Color.red,Color.green,Color.blue};
JCheckBox checkbox_bold,checkbox_italic;
JRadioButton[] radios;
JCheckBoxMenuItem cbmenuitem;
JPopupMenu popupmenu;
Color color;
public EditorJFrame() {
super("文本编辑器");
Dimension dim = this.getToolkit().getScreenSize();
this.setBounds(dim.width/4, dim.height/4, dim.width/2, dim.height/2);
setDefaultCloseOperation(EXIT_ON_CLOSE);
{
JToolBar toolbar = new JToolBar();
getContentPane().add(toolbar,BorderLayout.NORTH);
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
String fontsName[] = ge.getAvailableFontFamilyNames();
combobox_name = new JComboBox(fontsName);
combobox_name.addActionListener(this);
toolbar.add(combobox_name);
String[] fonts_color = {"20","30","40","50","60","70"};
combobox_color = new JComboBox(fonts_color);
combobox_color.addActionListener(this);
toolbar.add(combobox_color);
combobox_color.setEditable(true);
String[] stylestr = {"粗体","斜体"};
checkbox_bold = new JCheckBox(stylestr[0]);
checkbox_italic = new JCheckBox(stylestr[1]);
checkbox_bold.addActionListener(this);
checkbox_italic.addActionListener(this);
toolbar.add(checkbox_bold);
toolbar.add(checkbox_italic);
ButtonGroup bugroup = new ButtonGroup();
String[] colorstr = {"red","green","blue"};
radios = new JRadioButton[colorstr.length];
for (int i = 0; i < colorstr.length; i++) {
radios[i] = new JRadioButton(colorstr[i]);
radios[i].addActionListener(this);
bugroup.add(radios[i]);
toolbar.add(radios[i]);
}
}
{
text = new JTextArea("Welcome-------中文来了");
text.setForeground(color=colors[0]);
this.getContentPane().add(new JScrollPane(text));
text.addMouseListener(this);
}
MyMenu();
setVisible(true);
}
public void MyMenu(){
JMenuBar menubar = new JMenuBar();
setJMenuBar(menubar);
String[] menustr = {"文件","编辑","插入","格式","工具","窗口","帮助"};
String[][] menuitemstr = { {"新建","打开","保存","另存为","|","退出"},
{"撤销","恢复","|","剪切","复制","粘贴","|","查找","替换"},
{"日期","文本"},
{"字体"},
{"字数统计","自动更改","拼写检查"},
{},
{}
};
JMenu[] menus = new JMenu[menustr.length];
JMenuItem[][] menuitems = new JMenuItem[menuitemstr.length][];
for (int i = 0; i < menuitems.length; i++) {
menus[i] = new JMenu(menustr[i]);
menubar.add(menus[i]);
menuitems[i] = new JMenuItem[menuitemstr[i].length];
for (int j = 0; j < menuitems[i].length; j++) {
if(menuitemstr[i][j]=="|"){
menus[i].addSeparator();
}else{
menuitems[i][j] = new JMenuItem(menuitemstr[i][j]);
menus[i].add(menuitems[i][j]);
menuitems[i][j].addActionListener(this);
}
}
}
{
JMenu menu_str = new JMenu("字形");
menus[3].add(menu_str);
String[] stylestr = {"粗体","斜体"};
cbmenuitem = new JCheckBoxMenuItem();
for (int i = 0; i < stylestr.length; i++) {
cbmenuitem = new JCheckBoxMenuItem(stylestr[i]);
menu_str.add(cbmenuitem);
}
}
{
JMenu menu_color = new JMenu("颜色");
menus[3].add(menu_color);
String[] colorstr = {"red","green","blue"};
ButtonGroup buttongroop = new ButtonGroup();
menuit = new JRadioButton[colorstr.length];
for (int i = 0; i < colorstr.length; i++) {
menuit[i] = new JRadioButton(colorstr[i]);
menuit[i].addActionListener(this);
buttongroop.add(menuit[i]);
menu_color.add(menuit[i]);
}
}
{
popupmenu = new JPopupMenu();
String[] menuitems_cut = {"剪切","复制","粘贴"};
JMenuItem[] popupmenuitems = new JMenuItem[menuitems_cut.length];
for (int i = 0; i < popupmenuitems.length; i++) {
popupmenuitems[i] = new JMenuItem(menuitems_cut[i]);
popupmenu.add(popupmenuitems[i]);
popupmenuitems[i].addActionListener(this);
}
text.add(popupmenu);
popupmenuitems[0].setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Y,InputEvent.CTRL_MASK));
}
}
public static void main(String[] args) {
new EditorJFrame();
}
@Override
public void mouseClicked(MouseEvent e) {
if(e.getModifiers()==MouseEvent.BUTTON3_MASK){
popupmenu.show(text, e.getX(), e.getY());
}
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource() instanceof JComboBox ||e.getSource() instanceof JCheckBox){
try {
String fontname = (String) combobox_name.getSelectedItem();
int size = Integer.parseInt((String)combobox_color.getSelectedItem());
if(size<4||size>120){
throw new Exception("SizeException");
}
Font font = text.getFont();
int style = font.getStyle();
if(e.getSource()==checkbox_bold){
style = style^1;
}
if(e.getSource()==checkbox_italic){
style = style^2;
}
text.setFont(new Font(fontname, style, size));
} catch (NumberFormatException e1) {
JOptionPane.showConfirmDialog(this, "\""+(String)combobox_color.getSelectedItem()+"\"不能转换成整数,请重新输入!");
} catch (Exception e2) {
if(e2.getMessage().equals("SizeException")){
JOptionPane.showMessageDialog(this, "字体不合适,请重新输入!");
}
}
}
if(e.getSource() instanceof JRadioButton){
if(e.getSource()==radios[0]||e.getSource()==menuit[0]){
color = colors[0];
}
if(e.getSource()==radios[1]||e.getSource()==menuit[1]){
color = colors[1];
}
if(e.getSource()==radios[2]||e.getSource()==menuit[2]){
color = colors[2];
}
text.setForeground(color);
}
if(e.getSource()==combobox_color){
String size = (String) combobox_color.getSelectedItem();
int i = 0,n=combobox_color.getItemCount();
while(i<n && size.compareToIgnoreCase((String)combobox_color.getItemAt(i))>=0){
if(size.compareToIgnoreCase((String)combobox_color.getItemAt(i))==0){
return ;
}
i++;
}
combobox_color.insertItemAt(size, i);
}
if(e.getSource() instanceof JMenuItem){
if(e.getActionCommand().equals("退出")){
if(JOptionPane.showConfirmDialog(this, "亲~~你真的要退出吗?")==JOptionPane.OK_OPTION){
System.exit(0);
}
}
if(e.getActionCommand().equals("复制")){
text.copy();
}
if(e.getActionCommand().equals("粘贴")){
text.paste();
}
if(e.getActionCommand().equals("剪贴")){
text.cut();
}
}
}
}