⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainframe.java

📁 实现了Window的NotePad的功能
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
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 + -