?? 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 + -