📄 jishiben.java
字号:
/*
* JiShiBen.java
*
* Created on 2007年12月23日, 下午2:51
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package jishiben;
/**
*
* @author Administrator
*/
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.text.Document;
import javax.swing.event.*;
import javax.swing.event.DocumentListener;
public class JiShiBen extends JFrame implements ActionListener
{
private JFileChooser fileChooser = new JFileChooser();//文件选择对话框
private File fileName;
private JColorChooser color=new JColorChooser();
private JMenuBar m_MenuBar;//定义菜单栏
private JMenu menuFile,menuEdit,geShi,m_Edit_Paste;//定义菜单项
private JMenuItem mi_File_New,mi_File_Open,mi_File_Save,mi_File_LSave,mi_File_Exit,mi_Edit_Copy,mi_Edit_Cut;//定义菜单子项
private JMenuItem pi_New,pi_Del,pi_Pro; //弹出窗口子项(新建/删除/属性)
private JMenuItem mi_Paste_All,mi_Paste_Part; //m_Edit_Paste菜单子项
private JMenuItem foreColor,backColor;
private JButton newBtn,openBtn,saveBtn,cutBtn,copyBtn,pasteBtn;
//private JToolBar toolBar;
private JTextArea text ;
private Color color2;
private Color color1;
private JLabel statusBar ;//状态栏对象
private JPanel tools;
private String placeHolder="";
private String font;
private int m;
private boolean isChange = false;// 检测文档变化
Document document;
String[] items={"宋体","楷体","隶书","魏碑","黑体"};
String[] a={"1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25"};
private JComboBox comFont;
private JComboBox comSize;
// DBTextDataBinder dBTextDataBinder1 = new DBTextDataBinder();
public JiShiBen()
{
super("小小记事本");//设置当前容器标题
m_MenuBar=new JMenuBar(); //创建菜单条
this.setJMenuBar(m_MenuBar);//把菜单条加入整个JFrame容器
//创建文件及其子菜单
menuFile=new JMenu("文件(F)");//创建文件菜单项,
menuFile.setMnemonic('F');//设置菜单子项的快捷键
mi_File_New=new JMenuItem("新建");//创建菜单子项并指定快捷键
mi_File_Open=new JMenuItem("打开");//创建菜单子项并指定快捷键
mi_File_Save=new JMenuItem("保存");
mi_File_LSave=new JMenuItem("另存为");
menuFile.addSeparator();
mi_File_Exit=new JMenuItem("退出");
mi_File_Exit.setMnemonic('x');//设置菜单子项的快捷键
mi_File_Open.setActionCommand("打开");//再设置命令名
mi_File_Exit.setActionCommand("退出");//以便动作响应程序调用
menuFile.add(mi_File_New);//把菜单子项加入菜单项
menuFile.add(mi_File_Open);//把菜单子项加入菜单项
menuFile.add(mi_File_Save);//把菜单子项加入菜单项
menuFile.add(mi_File_LSave);
menuFile.addSeparator();//加一条横向分割线
menuFile.add(mi_File_Exit);
m_MenuBar.add(menuFile);//将菜单项加入菜单栏
//创建编辑菜单项,创建菜单子项并指定快捷键
menuEdit=new JMenu("编辑");//创建菜单项,创建菜单子项并指定快捷键
mi_Edit_Copy=new JMenuItem("复制");
mi_Edit_Cut=new JMenuItem("剪切");//创建选择菜单子项
m_Edit_Paste=new JMenu("粘贴");//创建子菜单项
mi_Paste_All=new JMenuItem("全部粘贴");//创建二级菜单项
mi_Paste_Part=new JMenuItem("部分粘贴");
// mi_Edit_Cut.addItemListener(this);//检测盒菜单子项产生选择事件
m_Edit_Paste.add(mi_Paste_Part);//为二级菜单加入菜单子项
m_Edit_Paste.add(mi_Paste_All);//为二级菜单加入菜单子项
menuEdit.add(mi_Edit_Copy);
menuEdit.add(mi_Edit_Cut);
menuEdit.addSeparator();
menuEdit.add(m_Edit_Paste);//把二级菜单加入菜单项
m_MenuBar.add(menuEdit);
//创建格式菜单
geShi=new JMenu("格式(G)");
geShi.setMnemonic('G');//设置菜单子项的快捷键
foreColor=new JMenuItem("字体颜色");
backColor=new JMenuItem("背景颜色");
geShi.add(foreColor);
geShi.add(backColor);
m_MenuBar.add(geShi);//将菜单项加入菜单栏
//创建弹出窗口
final JPopupMenu popM=new JPopupMenu();//创建弹出窗口
pi_New=new JMenuItem("新建");//为弹出窗口创建菜单子项
popM.add(pi_New);//为弹出菜单加入菜单子项
pi_Del=new JMenuItem("删除");
popM.add(pi_Del);
pi_Pro=new JMenuItem("属性");
popM.add(pi_Pro);
//将菜单子项注册给监听器
//测试用的方法
MenuItemEventHandler menuItemHandler = new MenuItemEventHandler();
mi_File_New.addActionListener(menuItemHandler);//使菜单子项响应动作事件
mi_File_Open.addActionListener(menuItemHandler);//使菜单子项响应动作事件
mi_File_Save.addActionListener(menuItemHandler);//使菜单子项响应动作事件
mi_File_LSave.addActionListener(menuItemHandler);//使菜单子项响应动作事件
mi_File_Exit.addActionListener(menuItemHandler);//使菜单子项响应动作事件
mi_Edit_Cut.addActionListener(menuItemHandler);
mi_Edit_Copy.addActionListener(menuItemHandler);
mi_Paste_Part.addActionListener(menuItemHandler);
mi_Paste_All.addActionListener(menuItemHandler);
foreColor.addActionListener(menuItemHandler);
backColor.addActionListener(menuItemHandler);
pi_Del.addActionListener(menuItemHandler);
pi_Pro.addActionListener(menuItemHandler);
pi_New.addActionListener(menuItemHandler);//使菜单子项响应动作事件
//saveAsItem.addActionListener(menuItemHandler);
//pageSetItem.addActionListener(menuItemHandler);
//printItem.addActionListener(menuItemHandler);
// undoItem.addActionListener(menuItemHandler);
//redoItem.addActionListener(menuItemHandler);
// findItem.addActionListener(menuItemHandler);
//findNextItem.addActionListener(menuItemHandler);
//replaceItem.addActionListener(menuItemHandler);
//goToLineItem.addActionListener(menuItemHandler);
/// selectAllItem.addActionListener(menuItemHandler);
//timeItem.addActionListener(menuItemHandler);
//autoNextLineItem.addActionListener(menuItemHandler);
//fontItem.addActionListener(menuItemHandler);
// helpItem.addActionListener(menuItemHandler);
// aboutItem.addActionListener(menuItemHandler);
//创建文本区域和状态条
Container c=getContentPane();
c.setLayout(new BorderLayout());
statusBar=new JLabel("状态提示:");//状态栏对象
text = new JTextArea();//创建文本区域
text.setLineWrap(true);//自动换行
c.add(new JScrollPane(text),BorderLayout.CENTER);
c.add(statusBar,BorderLayout.SOUTH);
//字体字号组合框
comFont=new JComboBox(items);
comFont.setSelectedItem("宋体");
comSize=new JComboBox(a);
comSize.setSelectedItem("16");
comFont.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
font=(String)comFont.getSelectedItem();
text.setFont(new Font(font,Font.PLAIN,m));
}
});
//字号组合框
comSize.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
m=comSize.getSelectedIndex();
text.setFont(new Font(font,Font.PLAIN,m));
}
});
//监听鼠标事件,弹出快捷菜单
text.addMouseListener(new MouseAdapter(){
public void mouseReleased(MouseEvent e){
if(e.isPopupTrigger()){
popM.show(text,e.getX(),e.getY());
}
}
});
//创建工具栏按钮并注册给监听者
ImageIcon newIcon=new ImageIcon("images/new.gif");
newBtn=new JButton(newIcon);
openBtn=new JButton(new ImageIcon("images/open.gif"));
saveBtn=new JButton(new ImageIcon("images/save.gif"));
JToolBar toolBar=new JToolBar("常用工具",SwingConstants.HORIZONTAL);
newBtn.setToolTipText("新建文件");
openBtn.setToolTipText("打开文件");
saveBtn.setToolTipText("保存文件");
toolBar.add(newBtn);
toolBar.add(saveBtn);
toolBar.add(openBtn);
toolBar.addSeparator();
JToolBar toolBar1=new JToolBar("编辑工具",SwingConstants.HORIZONTAL);
cutBtn=new JButton(new ImageIcon("images/cut.gif"));
cutBtn.setToolTipText("剪切");
toolBar1.add(cutBtn);
copyBtn=new JButton(new ImageIcon("images/copy.gif"));
copyBtn.setToolTipText("复制");
toolBar1.add(copyBtn);
pasteBtn=new JButton(new ImageIcon("images/paste.gif"));
toolBar1.add(pasteBtn);
pasteBtn.setToolTipText("粘贴");
JToolBar toolBar2=new JToolBar("文字工具",SwingConstants.HORIZONTAL);
toolBar2.add(comFont);
toolBar2.add(comSize);
toolBar2.addSeparator();
JPanel p=new JPanel(new FlowLayout(FlowLayout.LEFT));
p.add(toolBar);
p.add(toolBar1);
p.add(toolBar2);
c.add(p,BorderLayout.NORTH);
//将按钮注册给动作事件的监听者
openBtn.addActionListener(this);
newBtn.addActionListener(this);
cutBtn.addActionListener(this);
copyBtn.addActionListener(this);
pasteBtn.addActionListener(this);
saveBtn.addActionListener(this);
//得到文档对象并注册给文档事件的监听者,监听文档改变事件
// document = text.getDocument();
// document.addDocumentListener(this);
//设置事件监听器,监听游标,动态显示行数和列数
text.addCaretListener(new CaretListener()
{
public void caretUpdate(CaretEvent e)
{
try
{
int pos = text.getCaretPosition();
//Gets the position of the text insertion caret(游标) for this text component
//获取行数
int lineOfC = text.getLineOfOffset(pos) + 1;
//Translates an offset into the components text to a line number.
//获取列数
int col = pos - text.getLineStartOffset(lineOfC - 1) + 1;
// Determines the offset of the start of the given line.
statusBar.setText("当前光标位置 " + lineOfC + " 行 , " + col + " 列 ");
}
catch(Exception ex)
{
statusBar.setText(" 无法获得当前光标位置");
}
}
});
//监听文档内容是否发生变化
text.getDocument().addDocumentListener(
new DocumentListener() {
public void changedUpdate(DocumentEvent de) {
isChange = true;
}
public void insertUpdate(DocumentEvent de) {
isChange = true;
}
public void removeUpdate(DocumentEvent de) {
isChange = true;
}
}
);
}
//辅助方法:测试JTextArea中文本是否有变化
private boolean hasChange() {
return isChange;
}
//内部方法:响应菜单事件
private void newPerformed() {
int value = -1;
if(hasChange()) //若文件已更改
if(fileName != null && fileName.exists()) {//文件名不为空并且文件名存在
String[] buttonTexts = {"保存", "不保存", "取消"};
value = JOptionPane.showOptionDialog(this, "源程序已经改变,请确认是否保存!", "保存更改?", JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE, null, buttonTexts, buttonTexts[0]);
if(value == JOptionPane.YES_OPTION)
savePerformed();
else if(value == JOptionPane.NO_OPTION) {//不保存,初始化当前编辑器
// fileName = null;
// text.setText("");
// setTitle("程序编辑器");
// return;
}
else if(value == JOptionPane.CANCEL_OPTION)
return;
}
else { //若文件名不存在,则另存,初始化当前编辑器
saveAsPerformed();
// fileName = null;
// text.setText("");
// setTitle("程序编辑器");
// return;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -