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自带的文本编辑器(写字板) 包括剪贴,复制,粘贴,新建,打开,保存等 以及文本帮助菜单,字体格式
### SWT与RCP基础知识 #### 一、SWT概述 SWT(Standard Widget Toolkit)是一种专为Java设计的用户界面工具包,它提供了一系列的原生控件来创建丰富的客户端应用。SWT的一个显著特点在于它能直接调用操作系统的GUI...
SWT(Standard Widget Toolkit)是Java中用于构建图形用户界面(GUI)的一种库,与AWT和Swing不同,SWT直接与操作系统底层交互,提供更原生的...通过学习和掌握SWT,开发者可以创建出与本地应用相媲美的Java应用程序。
- **标签**:`Label` 类用于展示文本或图像,通过 `SWT.LEFT`、`SWT.RIGHT` 或 `SWT.CENTER` 设置文本对齐。`SWT.SEPARATOR` 用于创建分割线,可选择水平(`SWT.HORIZONTAL`)或垂直(`SWT.VERTICAL`)方向,以及...
JAVA SWT 多标签浏览器是一种利用Java编程语言和SWT(Standard Widget Toolkit)库构建的应用程序,它可以实现类似于浏览器的多标签界面,用户可以在同一程序中打开和管理多个网页。SWT是Eclipse基金会开发的一个...
### SWT控件知识学习笔记 #### 一、SWT/JFace常用组件介绍 SWT (Standard Widget Toolkit) 是 Eclipse 平台的一个图形界面工具包,它提供了与平台无关的 GUI 组件,允许开发者构建高性能的应用程序。SWT/JFace ...
Java Frame实现的Java文本编辑器是一种基于Swing或者JavaFX的替代方案,它利用了`org.eclipse.swt`库,这是一个强大的图形用户界面(GUI)工具包,尤其在跨平台的Java应用中广受欢迎。`org.eclipse.swt`是Eclipse...
自己写的文本编辑器,以windows记事本为模版,增加编译运行java程序的功能,运行java程序时可截获控制台输出,并与之交互。本人也是新手,资源无偿下载,大家帮助测试,希望指出bug,提出宝贵意见帮助我改正
在标签中,“源码”意味着讨论可能涉及到了SWT库的内部实现,或者提供了使用SWT的代码示例。“工具”可能指的是SWT作为开发工具的一部分,用于构建图形用户界面。 虽然压缩包中的“android面试要求.txt”文件名与...
本项目利用SWT(Standard Widget Toolkit)库来实现一个流程编辑器画板,提供了添加、删除节点以及节点拖动的功能,其界面设计灵感来源于xiorkflow。下面我们将详细探讨SWT库及其在实现流程编辑器中的应用。 首先,...
`TableEditor`是SWT提供的一种编辑器,专门用于处理`Table`中的单元格编辑。在创建`TableEditor`时,需指定其所属的`Table`对象,如下所示: ```java final TableEditor editor = new TableEditor(tablePrice); ```...
根据提供的文件信息,可以看出本文主要讨论的是如何在 SWT (Standard Widget Toolkit) 的 Table 控件中实现文本换行的功能。SWT 是一个用于开发基于 Java 的桌面应用程序的工具包,它提供了丰富的用户界面组件来帮助...
SWT 的优势在于它使用本地组件,这意味着 SWT 应用程序具有更好的性能和原生外观,同时支持更多的操作系统特性。由于 SWT 直接调用操作系统 API,所以它的应用程序看起来和行为更接近于原生应用。此外,SWT 也提供了...
标签中的"java"表明了我们的编辑器是基于Java语言的,这使得我们的编辑器具备跨平台能力,能够在多种操作系统上运行。同时,Eclipse RCP与Java的紧密集成意味着我们可以充分利用Java的丰富库和工具链。 在实际项目...
SWT JFACE 编程笔记 , 比较适合刚 解除 java swt jface 的开发人员
**基于SWT组件的IE内核Java简易浏览器** 在Java编程世界中,开发一款简易的浏览器是一项有趣的挑战,尤其当涉及到用户界面(UI)的设计时。SWT(Standard Widget Toolkit)是Eclipse基金会提供的一种GUI库,它允许...
【SWT开发笔记】主要涉及的是Java编程领域中的一门重要技术——Standard Widget Toolkit(SWT)。SWT是Eclipse基金会推出的一个开源GUI库,它为Java开发者提供了一种创建本地化用户界面的方式,与Java Swing相比,...
本项目“javaSWT简易计算器”利用SWT来构建一个基本的计算器应用,能够执行基本的数学运算,包括加、减、乘、除以及处理小数。下面我们将深入探讨SWT库、计算器的设计和实现,以及如何在Java中处理数学运算。 1. **...
代码如下: 实现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....