亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? editortabpage.java

?? java實(shí)現(xiàn)的文本編輯器
?? JAVA
字號(hào):
package MulitePageEditor;

import javax.swing.*;
import java.util.*;
import java.awt.*;
import java.io.*;
import java.text.*;
import java.awt.event.*;
import javax.swing.event.*;
import javax.swing.text.*;
import javax.swing.undo.*;

//import 記事本.Notepad.RedoAction;
//import 記事本.Notepad.UndoAction;
//import 記事本.Notepad.UndoHandler;

/*******************************************************************************
 * 多Tab頁(yè)文本編輯器的Tab類繼承自JScrollPane,為主窗口提供Tab頁(yè) 已支持并簡(jiǎn)化多頁(yè)實(shí)現(xiàn)難度,哈哈采用了我寫(xiě)的瀏覽器的技術(shù),不過(guò)C#
 * 中有TabPage類,Java中的TabControl使用有點(diǎn)不一樣,好像組件都可加入其中 而C#只允許加入TabPage.
 * 
 * java中的滾動(dòng)支持有點(diǎn)奇怪,可是使用也蠻容易的,就是感覺(jué)有點(diǎn)怪
 * 
 * java中的異常處理能有效防止異常處理的濫用,如果你要使用try....catch
 * 塊,try內(nèi)必須要有會(huì)拋出異常的代碼,否則,會(huì)不能通過(guò)編譯.不過(guò)這樣也有 限制作用,有時(shí)可能自己的代碼缺陷,而產(chǎn)生異常,卻不能捕獲,就變得不方便了
 * 不過(guò)可以幫助程序員寫(xiě)出無(wú)bug的程序.有好處也有不好的地方吧.
 * 
 * java中的屬性支持非常的不雅觀,沒(méi)C#,VB之類的語(yǔ)言那么來(lái)得優(yōu)雅,簡(jiǎn)單,雖然 編譯后還是都會(huì)有g(shù)et,set方法,
 * 
 * java中的事件其實(shí)是采用了接口回調(diào)的一種方式處理,沒(méi)有C#委托回調(diào)機(jī)制那么好
 * 還有java中能處理的事件好像有點(diǎn)少,也不是很直接,不過(guò)加上匿名內(nèi)部類,總算還過(guò) 得去.
 * 
 * java的io處理有點(diǎn)過(guò)于靈活,使用有點(diǎn)難度,對(duì)于處理中文支持有點(diǎn)問(wèn)題,還沒(méi)找到
 * 什么改變編碼的好的方法,試著用Charset解碼還是有問(wèn)題.不知道怎么解決,期待 解決.
 * 
 * 時(shí)間: 2006-9-7 作者: 風(fēng)中過(guò)客 聲明: 這是第一次寫(xiě)的java程序,不當(dāng)之處還請(qǐng)指點(diǎn)
 ******************************************************************************/

public class EditorTabPage extends JScrollPane implements IEditorTabPage,
		IDocumentChanged
{
	private String _filename = null;

	private JEditorPane editor = null;

	/**
	 * 是否已經(jīng)改變了文檔內(nèi)容
	 */
	private boolean ischange=false;

	private Font foreFont=new Font("宋體",Font.PLAIN,14);

	private Color fontcolor=Color.BLACK;

	private Color backcolor=Color.WHITE;

	private Document editordocument=null;

	public EditorTabPage()
	{
		super(); // 調(diào)用基類構(gòu)造器
		editor = new JEditorPane();
		editor.setFont(foreFont);
		editordocument = editor.getDocument(); // 設(shè)置文檔模型
		editordocument.addDocumentListener(new editordocument_documentAdapter(
				this)); // 為文檔模型添加事件處理
		editordocument.addUndoableEditListener(undoHandler);
		this.getViewport().add(editor); // 為editor提供滾動(dòng)支持
		resetUndoManager();
		ischange=false;
	}

	public EditorTabPage(String filename)
	{
		this(); // 調(diào)用默認(rèn)構(gòu)造器
		_filename = filename;
		if (_filename.endsWith(".rtf") || _filename.endsWith(".html")
				|| _filename.endsWith("htm"))
		{
			OpenFileName="file:\\" + _filename;
			OpenRTFHtmlFile();
		} else
		{
			OpenTXTAndElseFile();
		}
	//	editordocument
	//			.removeDocumentListener(new editordocument_documentAdapter(this)); // 為文檔模型添加事件處理
	//	editordocument.removeUndoableEditListener(undoHandler);

		editordocument = editor.getDocument();

		editordocument.addDocumentListener(new editordocument_documentAdapter(
				this)); // 為文檔模型添加事件處理
		editordocument.addUndoableEditListener(undoHandler);
		resetUndoManager();
		ischange=false;
	}

	private void OpenTXTAndElseFile()
	{
		OpenTXTThread open = new OpenTXTThread();
		open.start();
	}

	class OpenTXTThread extends Thread
	{
		public void run()
		{
			FileReader file = null;
			BufferedReader br = null;
			try
			{
				file = new FileReader(_filename);
				br = new BufferedReader(file);
				String line;
				StringBuffer buffer = new StringBuffer();
				while ((line = br.readLine()) != null)
				{
					buffer.append(line + "\n");
				}
				file.close();
				br.close();
				editor.setText(buffer.toString());
			} catch (IOException ex)
			{
				JOptionPane.showMessageDialog(null, _filename
						+ " 文件打開(kāi)時(shí)發(fā)生了IO異常,或許該文件不存在!\n" + ex.toString());
			}
			ischange=false;
		}
	}

	private String OpenFileName;
	private void OpenRTFHtmlFile()
	{
		OpenRTFThread open = new OpenRTFThread();
		open.start();
	}

	class OpenRTFThread extends Thread
	{
		public void run()
		{
			try
			{
				editor.setPage(OpenFileName);
			} catch (IOException ex)
			{
				JOptionPane.showMessageDialog(null, _filename
						+ " 文件打開(kāi)時(shí)發(fā)生了IO異常,或許該文件不存在!\n" + ex.toString());
			}
			ischange=false;
		}
	}

	private void OpenJRFFile()
	{
		
	}
	
	class OpenJRFThread extends Thread
	{
		public void run()
		{
			
		}
	}
	
	class SaveJRFThread extends Thread
	{
		public void run()
		{
			
		}
	}
	/**
	 * 實(shí)現(xiàn)復(fù)制功能
	 */
	public void Copy()
	{
		editor.copy();
	}

	public void Cut()
	{
		
		editor.cut();
	}

	public void Delete()
	{
		editor.replaceSelection("");
	}

	public void DeleteAll()
	{
		
		editor.setText("");
	}

	public void Dispose()
	{
		this.remove(editor);
	}

	public void Find()
	{
		//TODO: 查找
	}

	public void InsertDataTime()
	{
		//TODO: 獲取當(dāng)前日期和時(shí)間
		Calendar cl=Calendar.getInstance();
		Date da=cl.getTime();
	//	DateFormat df=DateFormat.getDateInstance();
	//	System.out.println(/*df.format(da)*/da.toLocaleString()); //該方法以被廢棄
		editor.replaceSelection(da.toLocaleString());
	}

	public void LoadFile(String filename)
	{
		//該方法已被廢棄
	}

	public void PageSetup()
	{
		//TODO:
	}

	public void Paste()
	{		
		editor.paste();
	}

	public void Print()
	{
		//TODO:
	}

	public void PrintPreview()
	{
        //TODO:
	}

	public void Redo()
	{
		//return redoAction;
		redoAction.actionPerformed(null);
	}

	private String savefilename;

	public void SaveAsDocument()
	{
		JFileChooser save=new JFileChooser();
		save.setMultiSelectionEnabled(false);
		save.setDialogTitle("保存文件");
		int result=save.showSaveDialog(this);
		if(result==JFileChooser.APPROVE_OPTION)  //按了確定了
		{
			String str=save.getSelectedFile().getPath();
			_filename=str;
			SaveDocument();
		}
	}

	class Filter implements FilenameFilter
	{
		public boolean accept(File dir, String name)
		{
              if(name.endsWith(".txt") || name.endsWith(".rtf"))
              {
            	  return true;
              }
              else
              {
            	  return false;
              }
		}

	}

	class SaveThread extends Thread
	{
		public void run()
		{
			String strdoc = editor.getText();
			try
			{
				FileWriter file = new FileWriter(savefilename);
				BufferedWriter writer = new BufferedWriter(file);
				writer.write(strdoc);
				writer.flush();
				file.close();
				writer.close();
			} catch (IOException ex)
			{
				JOptionPane.showMessageDialog(null, savefilename + " 文件保存失敗!",
						"錯(cuò)誤", JOptionPane.ERROR_MESSAGE);
			}
		}
	}

	public void SaveDocument()
	{		
		if (_filename == null)
		{
			SaveAsDocument();
			return;
		}
		savefilename = _filename;
		if(savefilename==null)
		{
			JOptionPane.showMessageDialog(null, "保存的文件名為空,請(qǐng)重新選擇保存的文件名");
			SaveAsDocument();
		}
		SaveThread save = new SaveThread();
		save.start();
	}

	public void SelectAll()
	{
		editor.selectAll();
	}

	public void Undo()
	{
		 undoAction.actionPerformed(null);
	}

	public Color getBackColor()
	{
		return backcolor;
	}

	public boolean IsDocChanged()
	{
		return ischange;
	}
	public Font getDocumentFont()
	{
		return foreFont;
	}

	public JEditorPane getEditor()
	{
		return editor;
	}

	public String getFileName()
	{
		return _filename;
	}

	public Color getFontColor()
	{
		return fontcolor;
	}

	public String getSelectText()
	{
		return editor.getSelectedText();
	}

	public boolean getIsDocumentChanged()
	{
		return ischange;
	}
	public void setBackColor(Color color)
	{
		backcolor=color;
		editor.setBackground(backcolor);
	}

	public void setDocumentFont(Font font)
	{
		foreFont=font;
		editor.setFont(foreFont);
	}

	public void setFontColor(Color color)
	{
		fontcolor=color;
		editor.setForeground(fontcolor);
	}

	/**
	 * 文檔被改變
	 */
	public void editordocument_changedUpdate(DocumentEvent e)
	{
		ischange=true;
	}

	/**
	 * 文檔插入了文本
	 */
	public void editordocument_insertUpdate(DocumentEvent e)
	{
		ischange=true;
	}

	/**
	 * 文檔移除了文本
	 */
	public void editordocument_removeUpdate(DocumentEvent e)
	{
		ischange=true;
	}

	public Document getDocument()
	{
		return editordocument;
	}

	/***************************************************************************
	 * 撤銷和重做
	 **************************************************************************/
	class UndoHandler implements UndoableEditListener
	{

		/**
		 * Messaged when the Document has created an edit, the edit is added to
		 * <code>undo</code>, an instance of UndoManager.
		 */
		public void undoableEditHappened(UndoableEditEvent e)
		{
			undo.addEdit(e.getEdit());
			undoAction.update();
			redoAction.update();
		}
	}

	protected UndoManager undo = new UndoManager();

	private UndoAction undoAction = new UndoAction();

	private RedoAction redoAction = new RedoAction();

	protected UndoableEditListener undoHandler = new UndoHandler();

	class UndoAction extends AbstractAction
	{
		public UndoAction()
		{
			super("Undo");
			setEnabled(false);
		}

		public void actionPerformed(ActionEvent e)
		{
			try
			{
				undo.undo();
			} catch (CannotUndoException ex)
			{
				System.out.println("Unable to undo: " + ex);
				ex.printStackTrace();
			}
			update();
			redoAction.update();
		}

		protected void update()
		{
			if (undo.canUndo())
			{
				setEnabled(true);
				putValue(Action.NAME, undo.getUndoPresentationName());
			} else
			{
				setEnabled(false);
				putValue(Action.NAME, "Undo");
			}
		}
	}

	protected void resetUndoManager()
	{
		undo.discardAllEdits();
		undoAction.update();
		redoAction.update();
	}

	class RedoAction extends AbstractAction
	{
		public RedoAction()
		{
			super("Redo");
			setEnabled(false);
		}

		public void actionPerformed(ActionEvent e)
		{
			try
			{
				undo.redo();
			} catch (CannotRedoException ex)
			{
				System.out.println("Unable to redo: " + ex);
				ex.printStackTrace();
			}
			update();
			undoAction.update();
		}

		protected void update()
		{
			if (undo.canRedo())
			{
				setEnabled(true);
				putValue(Action.NAME, undo.getRedoPresentationName());
			} else
			{
				setEnabled(false);
				putValue(Action.NAME, "Redo");
			}
		}
	}
	/** ********************************************************************** */
}

class editordocument_documentAdapter implements
		javax.swing.event.DocumentListener // 文檔模型事件
{
	EditorTabPage adaptee;

	editordocument_documentAdapter(EditorTabPage adaptee)
	{
		this.adaptee = adaptee;
	}

	public void changedUpdate(DocumentEvent e)
	{
		adaptee.editordocument_changedUpdate(e);
	}

	public void insertUpdate(DocumentEvent e)
	{
		adaptee.editordocument_insertUpdate(e);
	}

	public void removeUpdate(DocumentEvent e)
	{
		adaptee.editordocument_removeUpdate(e);
	}
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品丝袜一区| 欧美综合在线视频| 久久精品无码一区二区三区| 激情国产一区二区 | 久久精品72免费观看| 日韩欧美一级二级| 国产成人精品免费在线| 专区另类欧美日韩| 欧美日韩激情一区二区三区| 日本sm残虐另类| 久久精品一区二区三区不卡| 成人精品国产免费网站| 亚洲自拍偷拍图区| 91精品免费在线观看| 国产美女精品在线| 一区二区三区欧美日韩| 欧美一区二区日韩| 成人午夜视频网站| 亚洲妇女屁股眼交7| 欧美mv日韩mv亚洲| 99久久国产免费看| 日本va欧美va精品发布| 欧美激情在线观看视频免费| 欧洲色大大久久| 久久精品国产在热久久| 中文字幕一区二区日韩精品绯色 | 91极品美女在线| 日韩电影在线看| 国产精品色婷婷久久58| 8x福利精品第一导航| 成人综合在线观看| 日韩精品免费视频人成| 综合欧美亚洲日本| 亚洲精品一线二线三线无人区| av一本久道久久综合久久鬼色| 日韩影院在线观看| 日韩一区在线看| 精品国产99国产精品| 日本精品一区二区三区四区的功能| 日韩成人午夜精品| 国产精品超碰97尤物18| 精品国产区一区| 色94色欧美sute亚洲线路二 | 日韩精品专区在线影院观看| 99视频精品全部免费在线| 日韩电影在线免费看| 一区二区三区在线视频播放| 亚洲精品在线免费播放| 欧美疯狂性受xxxxx喷水图片| 成人一区二区三区中文字幕| 蜜臀久久99精品久久久久久9| 亚洲欧美激情在线| 亚洲成av人片在www色猫咪| 国产日韩精品一区| 精品免费一区二区三区| 欧美色网一区二区| 99视频精品在线| 国产成人精品免费一区二区| 激情五月激情综合网| 日韩精品成人一区二区在线| 亚洲资源在线观看| 亚洲免费在线播放| 中文字幕第一区综合| 久久美女高清视频| 精品蜜桃在线看| 日韩一区二区三区在线视频| 欧美日韩国产大片| 欧美日韩国产综合一区二区三区| 色婷婷久久99综合精品jk白丝| 成人午夜av在线| 国产成人精品影视| 福利电影一区二区| 春色校园综合激情亚洲| 成人综合激情网| 不卡在线视频中文字幕| www.欧美精品一二区| 国产精品66部| 粉嫩aⅴ一区二区三区四区| 高清成人在线观看| 国产精品18久久久| 懂色av一区二区三区蜜臀| 高清不卡在线观看av| 91亚洲永久精品| 成人动漫在线一区| 欧美一区二区三区小说| 欧美综合一区二区三区| 欧美日韩一区二区三区视频| 欧美日韩亚洲不卡| 日韩欧美一区二区久久婷婷| 欧美电影免费提供在线观看| 精品国产髙清在线看国产毛片| 精品久久久久一区二区国产| 久久久www免费人成精品| 国产精品三级视频| 国产精品免费丝袜| 亚洲一区二区三区小说| 秋霞成人午夜伦在线观看| 黑人精品欧美一区二区蜜桃| 丁香婷婷深情五月亚洲| 91视频国产资源| 91精品国产综合久久婷婷香蕉 | 亚洲成人自拍网| 石原莉奈在线亚洲二区| 老司机午夜精品| 成人综合在线视频| 欧美调教femdomvk| 精品播放一区二区| 亚洲欧美日韩国产综合| 日韩va亚洲va欧美va久久| 国产电影一区二区三区| 91高清视频免费看| 精品久久人人做人人爰| 亚洲免费观看高清完整| 另类小说欧美激情| 91色porny蝌蚪| 精品少妇一区二区三区在线播放| 中文字幕亚洲一区二区va在线| 天天综合网 天天综合色| 国产成人在线看| 4438x成人网最大色成网站| 欧美极品少妇xxxxⅹ高跟鞋| 午夜激情久久久| 91在线播放网址| 欧美精品一区二区三区蜜桃视频| 亚洲欧美色图小说| 激情伊人五月天久久综合| 91黄视频在线| 国产欧美一区二区精品忘忧草| 亚洲国产精品嫩草影院| 成人高清视频在线| 日韩欧美一二三| 亚洲综合色自拍一区| 日韩欧美你懂的| 亚洲午夜一区二区| 成人av网站在线| 久久综合九色综合久久久精品综合| 亚洲午夜久久久久久久久电影网| 国产不卡一区视频| 欧美本精品男人aⅴ天堂| 亚洲一区二区五区| 97精品久久久午夜一区二区三区| 日韩精品一区国产麻豆| 日韩精品视频网站| 欧美日韩一区不卡| 亚洲女女做受ⅹxx高潮| www.亚洲色图.com| 国产免费久久精品| 国产精品一二三区在线| 日韩视频国产视频| 日韩av一区二| 在线成人高清不卡| 午夜欧美大尺度福利影院在线看| 色呦呦国产精品| 亚洲欧美色图小说| 色婷婷久久99综合精品jk白丝 | 欧美色视频一区| 亚洲免费大片在线观看| 91色视频在线| 亚洲免费av观看| 91激情五月电影| 亚洲综合av网| 欧美午夜理伦三级在线观看| 亚洲美女在线一区| 91精品1区2区| 亚洲成人午夜影院| 欧美精品免费视频| 蜜桃精品视频在线| 欧美变态凌虐bdsm| 国产精品一二三四五| 欧美激情综合在线| 99精品视频一区| 亚洲精品高清视频在线观看| 欧美午夜一区二区| 热久久免费视频| 久久亚洲精精品中文字幕早川悠里| 激情综合网天天干| 久久精子c满五个校花| 国产成人亚洲精品狼色在线| 久久精品水蜜桃av综合天堂| 国产aⅴ综合色| 亚洲欧美日韩综合aⅴ视频| 欧美午夜不卡视频| 蜜臀a∨国产成人精品| 精品国产髙清在线看国产毛片| 国产麻豆视频一区| 中文字幕一区二区日韩精品绯色| 色婷婷一区二区| 天堂蜜桃一区二区三区| 精品国产自在久精品国产| 懂色av一区二区在线播放| 亚洲美女一区二区三区| 欧美一区二区女人| 国产成人av影院| 亚洲精选视频在线| 欧美一区二区三区免费大片| 国产精品亚洲一区二区三区妖精| 国产精品国产三级国产普通话99 | av在线免费不卡| 亚洲永久精品国产| 日韩你懂的电影在线观看|