📄 mainframe.java
字号:
package cqj.jar.com;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Arrays;
import javax.swing.BorderFactory;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.KeyStroke;
import javax.swing.ScrollPaneConstants;
import javax.swing.SwingConstants;
import javax.swing.event.CaretEvent;
import javax.swing.event.CaretListener;
import javax.swing.text.BadLocationException;
public class MainFrame extends JFrame {
/**
*
*/
private static final long serialVersionUID = 1136738504089402821L;
public MainFrame() {
super("新建文本文件1.txt");
//findNewFileNm();
//this.setTitle(name);
setUpJFrameInfo();
setUpUIComponent(); //添加组件
putInCenter(); //窗口居中显示
setUpEventListener(); //设置事件监听
Cursor cursor = new Cursor(Cursor.HAND_CURSOR );
areaText.setCursor(cursor);
this.setVisible(true);
}
private void putInCenter() {
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
/*
x - 组件的新 x 坐标
y - 组件的新 y 坐标
width - 组件的新 width
height - 组件的新 height
*/
this.setBounds(
(int)(screenSize.getWidth()-getWidth())/2,
(int)(screenSize.getHeight()-getHeight())/2,
getWidth(), getHeight());
}
public int getWidth(){
return width;
}
public int getHeight(){
return height;
}
private void setUpJFrameInfo() {
//设置JFrame框架本身的一些属性
setSize(getWidth(),getHeight());
//下面这行很重要,
//怎样取消windowClosing(WindowEvent e)的关闭窗口动作
this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
changeTitleIcon();
chooser = new JFileChooser();
}
private void changeTitleIcon() {
//更改java应用程序标题栏默认图标
/*现提供两种方法:
方法一:
如果你用过Toolkit类,这将是一件很简单的事情:
*/
Toolkit tk=Toolkit.getDefaultToolkit();
Image image = tk.createImage(titleIcon); /*image.gif是你的图标*/
this.setIconImage(image);
/*
方法二:
用到ImageIcon类和setIconImage方法。
String image2 = new String("face.gif"); //建立一个字符串保存要用的图标的路径,关于java的路径请参考其它文档
ImageIcon test = new ImageIcon(image2); //建立一个ImageIcon类,产生setIconImage()方法需要的Image数据
this.setIconImage(test.getImage()); //设置标题栏的图标为face.gif
*/
}
private void setUpUIComponent(){
//菜单栏
JMenuBar menuBar = new JMenuBar();
// 设置“文件”菜单
menuFile = new JMenu("文件"); //设置“文件”菜单
//JMenu editMenu = new JMenu(); //设置“编辑”菜单
//JMenu helpMenu = new JMenu(); //设置“帮助”菜单
itemNew = new JMenuItem("新建");
itemNew.setAccelerator(KeyStroke.getKeyStroke(
KeyEvent.VK_N,
InputEvent.CTRL_MASK)); //添加打开的快捷键CTRL+O
itemOpen = new JMenuItem("打开");
itemOpen.setAccelerator(KeyStroke.getKeyStroke(
KeyEvent.VK_O,
InputEvent.CTRL_MASK)); //添加打开的快捷键CTRL+O
itemSave = new JMenuItem("保存");
itemSave.setAccelerator(KeyStroke.getKeyStroke(
KeyEvent.VK_S,
InputEvent.CTRL_MASK)); //添加快捷键CTRL+S
itemSaveAs = new JMenuItem("另存为...");
itemClose = new JMenuItem("关闭");
itemClose.setAccelerator(KeyStroke.getKeyStroke(
KeyEvent.VK_Q,
InputEvent.CTRL_MASK)); //添加快捷键CTRL+Q
menuFile.add(itemNew);
menuFile.add(itemOpen);
menuFile.addSeparator(); //添加“分隔符”
menuFile.add(itemSave);
menuFile.add(itemSaveAs);
menuFile.addSeparator(); //添加“分隔符”
menuFile.add(itemClose);
// 设置“编辑”菜单
menuEdit = new JMenu("编辑"); //
itemCut = new JMenuItem("剪切");
itemCut.setAccelerator(KeyStroke.getKeyStroke(
KeyEvent.VK_X,
InputEvent.CTRL_MASK));
itemCopy = new JMenuItem("复制");
itemCopy.setAccelerator(KeyStroke.getKeyStroke(
KeyEvent.VK_C,
InputEvent.CTRL_MASK));
itemPaste = new JMenuItem("粘贴");
itemPaste.setAccelerator(KeyStroke.getKeyStroke(
KeyEvent.VK_V,
InputEvent.CTRL_MASK));
itemSearch = new JMenuItem("查找...");
itemSearch.setAccelerator(KeyStroke.getKeyStroke(
KeyEvent.VK_F,
InputEvent.CTRL_MASK));
itemReplace = new JMenuItem("替换...");
itemReplace.setAccelerator(KeyStroke.getKeyStroke(
KeyEvent.VK_R,
InputEvent.CTRL_MASK));
menuEdit.add(itemCut);
menuEdit.add(itemCopy);
menuEdit.add(itemPaste);
menuEdit.addSeparator(); //添加“分隔符”
menuEdit.add(itemSearch);
menuEdit.add(itemReplace);
// 设置“格式”菜单
menuFormat = new JMenu("格式");
itemAutoLine = new JMenuItem("自动换行 (N)");
//itemAutoLine.setAccelerator(KeyStroke.getKeyStroke(
//KeyEvent.VK_F5,
//InputEvent.CTRL_MASK));
itemFont = new JMenuItem("字体...");
//itemFont.setAccelerator(KeyStroke.getKeyStroke(
//KeyEvent.VK_F1,
//InputEvent.CTRL_MASK));
menuFormat.add(itemAutoLine);
menuFormat.add(itemFont);
// 设置“设置”菜单
menuSetting = new JMenu("设置");
itemBackground = new JMenuItem("背景色");
itemForeground = new JMenu("前景色");
itemCaretColor = new JMenuItem("光标色");
menuSetting.add(itemBackground);
menuSetting.add(itemForeground);
menuSetting.add(itemCaretColor);
JMenuItem[] colorItems = new JMenuItem[FontConstants.strColor.length];
int k = 0;
for(String i : FontConstants.strColor) {
colorItems[k] = new JMenuItem(i);
//itemBackground.add(colorItems[k]);
itemForeground.add(colorItems[k]);
k++;
}
// 设置“帮助”菜单
menuHelp = new JMenu("帮助");
itemAbout = new JMenuItem("关于本软件");
itemAbout.setAccelerator(KeyStroke.getKeyStroke(
KeyEvent.VK_F5,
InputEvent.CTRL_MASK));
itemHelp = new JMenuItem("帮助主题");
itemHelp.setAccelerator(KeyStroke.getKeyStroke(
KeyEvent.VK_F1,
InputEvent.CTRL_MASK));
menuHelp.add(itemHelp);
menuHelp.addSeparator();
menuHelp.add(itemAbout);
menuBar.add(menuFile);
menuBar.add(menuEdit);
menuBar.add(menuFormat);
menuBar.add(menuSetting);
menuBar.add(menuHelp);
setItemEnabled(false);
//设置"文本编辑区域"
areaText = new JTextArea();
//加载字体文本文件
loadFontSetFile();
//初始化显示文本的字体
areaText.setFont(new Font(
FontDialog.strFont[selectedFont],
FontDialog.indexToFont(selectedStyle),
Integer.parseInt(FontDialog.strSize[selectedSize])
));
areaText.setLineWrap(false); //设置文本区的换行策略:
//如果设置为 true,则当行的长度大于所分配的宽度时,将换行
areaText.setSelectedTextColor(selectedTextColor);
//文本区的背景色
areaText.setBackground(this.areaBackground);
areaText.setForeground(this.areaForeground);
areaText.setCaretColor(this.caretColor);
//Toolkit kit = Toolkit.getDefaultToolkit();
//设置用于呈现选定文本的当前颜色。
//isAutoLine = true;
JScrollPane panel = new JScrollPane(areaText,
ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED); //HORIZONTAL_SCROLLBAR_NEVER
//状态栏
stateBar = new JLabel("未修改");
stateBar.setHorizontalAlignment(SwingConstants.LEFT); //JLabel中文字的置左
//stateBar.set
stateBar.setBorder(BorderFactory.createLoweredBevelBorder()); //createEtchedBorder:JLabel边界外观为:蚀刻外观
stateBar.setForeground(Color.GRAY);
JPanel statePanel = new JPanel(new GridLayout(1,2));
labelColRows = new JLabel("行: 1, 列: 1");
labelColRows.setBorder(BorderFactory.createLoweredBevelBorder()); //凹进去的外观
statePanel.add(stateBar);
statePanel.add(labelColRows);
setJMenuBar(menuBar);
Container contentPane = this.getContentPane();
contentPane.add(panel, BorderLayout.CENTER);
contentPane.add(statePanel, BorderLayout.SOUTH);
popUpMenu = menuEdit.getPopupMenu();
createInitFile();
}
private void setItemEnabled(boolean state) {
//设置某些菜单项的状态,这与JTextArea当前是否有内容有关
//比JTextArea当前为空时,查找,剪切等操作无意义
itemCut.setEnabled(state);
itemCopy.setEnabled(state);
itemSearch.setEnabled(state);
}
private void setUpEventListener(){
//setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//单击窗口关闭按钮事件处理
//注意:My_WindowAdapter 下的WindowClosing 不管怎么样都会使窗口隐藏???
this.addWindowListener(new My_WindowAdapter());
//菜单——新建
itemNew.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
createNewFile();
}
});
//菜单——打开
itemOpen.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
openFile();
}
});
//菜单——保存
itemSave.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
saveFile();
}
});
//菜单——另存为
itemSaveAs.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
saveFileAs();
}
});
//菜单——关闭
itemClose.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
closeFile();
}
});
//菜单——剪切
itemCut.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
cut();
}
});
//菜单——复制
itemCopy.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
copy();
}
});
//菜单——粘贴
itemPaste.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
paste();
}
});
//菜单——查找
itemSearch.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
search();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -