`

SWT学习笔记5——简易的多标签文本编辑器

阅读更多


import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.ColorDialog;
import org.eclipse.swt.widgets.DirectoryDialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.FontDialog;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.TabItem;
import org.eclipse.swt.widgets.Text;

public class SimpleTextBrower {
	private static final Shell shell = new Shell();
	private static TabFolder tabFolder;
	private static Font font=Display.getDefault().getSystemFont();
	private static Color fontColor=Display.getDefault().getSystemColor(SWT.COLOR_BLACK);
	/**
	 * @param f
	 *            文件
	 * @return 文件内容,文件大于1M时返回一句文件太大的字符串。
	 */
	private static String getFileContent(File f) {
		StringBuilder sb = new StringBuilder();
		try {
			if (f.length() > 1024 * 1024)
				return f.getName() + " is too big to open";

			FileReader fileReader = new FileReader(f);
			BufferedReader bf = new BufferedReader(fileReader);
			do {
				String temp = bf.readLine();
				if (temp != null)
					sb.append(temp + "\n");
				else
					break;
			} while (true);
			bf.close();
		} catch (IOException e1) {
			e1.printStackTrace();
		}
		return sb.toString();

	}

	/**
	 * @param f 要打开的文件
	 * @param text 要添加到选项卡的内容
	 */
	private static void addTab(File f, String text) {
		TabItem tab = new TabItem(tabFolder, SWT.NONE);
		if(f!=null)tab.setText(f.getName());else tab.setText("new tab");
		Text texts = new Text(tabFolder, SWT.MULTI | SWT.V_SCROLL
				|SWT.WRAP);
		texts.setText(text);
		texts.setFont(font);
		texts.setForeground(fontColor);
		tab.setControl(texts);
		tabFolder.setSelection(tab);
		texts.setFocus();
		texts.setData(f);
	}

	/**保存选项卡的内容到原始文件中,保存前要求确认。
	 * @param tab 要保存的选项卡
	 */
	private static void saveTab(TabItem tab){
		Text texts=(Text) tab.getControl();
		File f=(File) texts.getData();
		if(f==null){
			 saveTabAs(tab);return;
		}
		
		MessageBox ensure=new MessageBox(shell,SWT.OK|SWT.CANCEL|SWT.ICON_QUESTION);
		ensure.setMessage("该文件已经存在,确定覆盖?");
		int result=ensure.open();
		if(result!=SWT.OK)return;
		
		try {
			FileWriter fw=new FileWriter(f, false);
			fw.write(texts.getText());
			fw.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	/** 保存选项卡的内容到新的文件中
	 * @param tab 要保存的选项卡
	 */
	private static void saveTabAs(TabItem tab){
		Text texts=(Text) tab.getControl();
	
	
			FileDialog fd = new FileDialog(shell, SWT.SAVE);//SWT.SAVE可以指定默认名称
			fd.setFileName("新文件"+System.currentTimeMillis()+".txt");//默认保存的名称
			fd.setFilterExtensions(new String[]{"*.txt;*.html;*.htm"});
			while(fd.open()==null);
			File f=new File(fd.getFilterPath()+File.separator+fd.getFileName());
	
		try {
			FileWriter fw=new FileWriter(f, false);
			fw.write(texts.getText());
			fw.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * Launch the application.
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
		final Display display = Display.getDefault();
		
		shell.setSize(653, 414);
		shell.setText("简易文本编辑器(采用SWT制作)");
		shell.setLayout(new FillLayout(SWT.HORIZONTAL));

		tabFolder = new TabFolder(shell, SWT.BORDER | SWT.H_SCROLL
				| SWT.V_SCROLL | SWT.CANCEL | SWT.MULTI);

		//		菜单
		Menu menu = new Menu(shell, SWT.BAR);
		shell.setMenuBar(menu);

		MenuItem mntmFile = new MenuItem(menu, SWT.CASCADE);
		mntmFile.setText("File");

		Menu menu_1 = new Menu(mntmFile);
		mntmFile.setMenu(menu_1);
		
		//新建选项卡的菜单项
		MenuItem mntmNew = new MenuItem(menu_1, SWT.NONE);
		mntmNew.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				addTab(null, "");
			}
		});
		mntmNew.setText("New");
		
		//打开多个文件的菜单项
		MenuItem mntmOpen = new MenuItem(menu_1, SWT.NONE);
		mntmOpen.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				FileDialog fd = new FileDialog(shell, SWT.OPEN);//选项SWT.OPEN为打开单个文件
				fd.setFilterExtensions(new String[]{"*.txt;*.html;*.htm"});
				if ( fd.open()!= null) {
					String[] filenames = fd.getFileNames();
					for (String filename : filenames) {
						File f = new File(fd.getFilterPath() + File.separator
								+ filename);
						String content = getFileContent(f);
						addTab(f, content);
					}
				}
			}
		});
		mntmOpen.setText("&Open");

		//同时打开多个文件的菜单项
		MenuItem mntmOpenmultifile = new MenuItem(menu_1, SWT.NONE);
		mntmOpenmultifile.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				FileDialog fd = new FileDialog(shell, SWT.MULTI);//选项SWT.MULTI为允许同时打开多个文件
				fd.setFilterExtensions(new String[]{"*.txt;*.html;*.htm"});

				if ( fd.open()!= null) {
					String[] filenames = fd.getFileNames();
					for (String filename : filenames) {
						File f = new File(fd.getFilterPath() + File.separator
								+ filename);
						String content = getFileContent(f);
						addTab(f, content);
					}
				}
			}
		});
		mntmOpenmultifile.setText("Open&MultiFile");

		//列出某个文件夹中所有文件的菜单项
		MenuItem mntmListfilesindir = new MenuItem(menu_1, SWT.NONE);
		mntmListfilesindir.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				DirectoryDialog dirDialog = new DirectoryDialog(shell,
						SWT.MULTI);

//				dirDialog.setFilterPath("e:\\");
				if (dirDialog.open() != null) {
					StringBuilder sb = new StringBuilder();
					sb.append("文件夹\"" + dirDialog.getFilterPath() + "\"下的文件有:\n");
					File dir = new File(dirDialog.getFilterPath());
					for (String string : dir.list()) {
						sb.append(string);
						sb.append("\n");
					}
					addTab(dir, sb.toString());
				}
			}
		});
		mntmListfilesindir.setText("ListFilesIn&Dir");

		//保存当前选项卡内容的菜单项
		MenuItem mntmTest = new MenuItem(menu_1, SWT.NONE);
		mntmTest.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				TabItem[] items = tabFolder.getSelection();
				if (items.length > 0)
					saveTab( items[0]);
			}
		});
		mntmTest.setText("&Save");
		
		MenuItem mntmSaveAs = new MenuItem(menu_1, SWT.NONE);
		mntmSaveAs.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				TabItem[] items = tabFolder.getSelection();
				if (items.length > 0)
					saveTabAs( items[0]);
			}
		});
		mntmSaveAs.setText("Save as");

		//清除当前选项卡内容的菜单项
		MenuItem mntmCleancurrentfile = new MenuItem(menu, SWT.NONE);
		mntmCleancurrentfile.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				TabItem[] items = tabFolder.getSelection();
				if (items.length > 0)
					((Text) items[0].getControl()).setText("");
			}
		});
		mntmCleancurrentfile.setText("&Clean");
		
		//关闭当前选项卡的菜单项
		MenuItem mntmClose = new MenuItem(menu, SWT.NONE);
		mntmClose.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				TabItem[] items = tabFolder.getSelection();
				if (items.length > 0)
					 items[0].dispose();
			}
		});
		mntmClose.setText("Close");
		
		//字体选择选项卡
		MenuItem mntmFont = new MenuItem(menu, SWT.NONE);
		mntmFont.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				FontDialog fd=new FontDialog(shell);//字体选择对话框的使用
				FontData fontData=fd.open();
				RGB fontColor=fd.getRGB();
				if(fontData!=null){
					font=new Font(display, fontData);
					TabItem[] items = tabFolder.getSelection();
					if (items.length > 0)
						 ((Text)items[0].getControl()).setFont(font);
				}
			}
		});
		mntmFont.setText("Font");
		
		//颜色选项卡
		MenuItem mntmFontcolor = new MenuItem(menu, SWT.NONE);
		mntmFontcolor.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				ColorDialog colorDialog=new ColorDialog(shell);//颜色选择对话框的使用
				RGB rgb=colorDialog.open();
				if(rgb!=null){
					fontColor=new Color(display, rgb);
					TabItem[] items = tabFolder.getSelection();
					if (items.length > 0)
						 ((Text)items[0].getControl()).setForeground(fontColor);
				}
				
			}
		});
		mntmFontcolor.setText("FontColor");

		
		addTab(null, "欢迎使用简易文本编辑器;本编辑器可以对小于1M的txt或html文件进行编辑\n\n该程序旨在演示打开文件对话框、menu、目录对话框、颜色对话框、字体对话框的使用方法\n\nFile菜单下有新建、打开、打开多个文件的功能,以及保存及另存为功能。\nclean为清除当前选项卡的内容,close为关闭当前选项卡,Font为选择字体(忽略颜色),FontColor为选择字体颜色(只对当前选项卡内容及之后打开的有效)");
		shell.open();
		shell.layout();
		while (!shell.isDisposed()) {
			if (!display.readAndDispatch()) {
				display.sleep();
			}
		}
	}

}

  • 大小: 42.5 KB
分享到:
评论

相关推荐

    用Java SWT编写的类似WIndows自带的文本编辑器(写字板)

    用Java SWT编写的类似WIndows自带的文本编辑器(写字板) 包括剪贴,复制,粘贴,新建,打开,保存等 以及文本帮助菜单,字体格式

    学习SWT,RCP的笔记.doc

    ### SWT与RCP基础知识 #### 一、SWT概述 SWT(Standard Widget Toolkit)是一种专为Java设计的用户界面工具包,它提供了一系列的原生控件来创建丰富的客户端应用。SWT的一个显著特点在于它能直接调用操作系统的GUI...

    swt学习笔记摘录(入门程序)

    SWT(Standard Widget Toolkit)是Java中用于构建图形用户界面(GUI)的一种库,与AWT和Swing不同,SWT直接与操作系统底层交互,提供更原生的...通过学习和掌握SWT,开发者可以创建出与本地应用相媲美的Java应用程序。

    SWT和JFACE学习笔记

    - **标签**:`Label` 类用于展示文本或图像,通过 `SWT.LEFT`、`SWT.RIGHT` 或 `SWT.CENTER` 设置文本对齐。`SWT.SEPARATOR` 用于创建分割线,可选择水平(`SWT.HORIZONTAL`)或垂直(`SWT.VERTICAL`)方向,以及...

    JAVA SWT 多标签浏览器

    JAVA SWT 多标签浏览器是一种利用Java编程语言和SWT(Standard Widget Toolkit)库构建的应用程序,它可以实现类似于浏览器的多标签界面,用户可以在同一程序中打开和管理多个网页。SWT是Eclipse基金会开发的一个...

    SWT控件知识学习笔记

    ### SWT控件知识学习笔记 #### 一、SWT/JFace常用组件介绍 SWT (Standard Widget Toolkit) 是 Eclipse 平台的一个图形界面工具包,它提供了与平台无关的 GUI 组件,允许开发者构建高性能的应用程序。SWT/JFace ...

    java Frame实现的Java文本编辑器

    Java Frame实现的Java文本编辑器是一种基于Swing或者JavaFX的替代方案,它利用了`org.eclipse.swt`库,这是一个强大的图形用户界面(GUI)工具包,尤其在跨平台的Java应用中广受欢迎。`org.eclipse.swt`是Eclipse...

    java文本编辑器(类似记事本,可编译运行java程序)

    自己写的文本编辑器,以windows记事本为模版,增加编译运行java程序的功能,运行java程序时可截获控制台输出,并与之交互。本人也是新手,资源无偿下载,大家帮助测试,希望指出bug,提出宝贵意见帮助我改正

    swt form

    在标签中,“源码”意味着讨论可能涉及到了SWT库的内部实现,或者提供了使用SWT的代码示例。“工具”可能指的是SWT作为开发工具的一部分,用于构建图形用户界面。 虽然压缩包中的“android面试要求.txt”文件名与...

    使用SWT实现流程编辑器画板

    本项目利用SWT(Standard Widget Toolkit)库来实现一个流程编辑器画板,提供了添加、删除节点以及节点拖动的功能,其界面设计灵感来源于xiorkflow。下面我们将详细探讨SWT库及其在实现流程编辑器中的应用。 首先,...

    SWT Table单元格编辑功能

    `TableEditor`是SWT提供的一种编辑器,专门用于处理`Table`中的单元格编辑。在创建`TableEditor`时,需指定其所属的`Table`对象,如下所示: ```java final TableEditor editor = new TableEditor(tablePrice); ```...

    swt table 实现换行

    根据提供的文件信息,可以看出本文主要讨论的是如何在 SWT (Standard Widget Toolkit) 的 Table 控件中实现文本换行的功能。SWT 是一个用于开发基于 Java 的桌面应用程序的工具包,它提供了丰富的用户界面组件来帮助...

    swt入门学习资料

    SWT 的优势在于它使用本地组件,这意味着 SWT 应用程序具有更好的性能和原生外观,同时支持更多的操作系统特性。由于 SWT 直接调用操作系统 API,所以它的应用程序看起来和行为更接近于原生应用。此外,SWT 也提供了...

    eclipse RCP开发的编辑器

    标签中的"java"表明了我们的编辑器是基于Java语言的,这使得我们的编辑器具备跨平台能力,能够在多种操作系统上运行。同时,Eclipse RCP与Java的紧密集成意味着我们可以充分利用Java的丰富库和工具链。 在实际项目...

    SWT JFACE 编程笔记

    SWT JFACE 编程笔记 , 比较适合刚 解除 java swt jface 的开发人员

    基于SWT组件的IE内核Java简易浏览器

    **基于SWT组件的IE内核Java简易浏览器** 在Java编程世界中,开发一款简易的浏览器是一项有趣的挑战,尤其当涉及到用户界面(UI)的设计时。SWT(Standard Widget Toolkit)是Eclipse基金会提供的一种GUI库,它允许...

    swt开发的笔记

    【SWT开发笔记】主要涉及的是Java编程领域中的一门重要技术——Standard Widget Toolkit(SWT)。SWT是Eclipse基金会推出的一个开源GUI库,它为Java开发者提供了一种创建本地化用户界面的方式,与Java Swing相比,...

    javaSWT简易计算器

    本项目“javaSWT简易计算器”利用SWT来构建一个基本的计算器应用,能够执行基本的数学运算,包括加、减、乘、除以及处理小数。下面我们将深入探讨SWT库、计算器的设计和实现,以及如何在Java中处理数学运算。 1. **...

    SWT(JFace) 文本编辑器 实现代码

    代码如下: 实现1: BasicEditor.java 代码如下:package swt_jface.demo5; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io....

Global site tag (gtag.js) - Google Analytics