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

9 篇文章 0 订阅
[img]http://dl.iteye.com/upload/attachment/0065/7898/016ffd0f-ee91-3596-a711-780d7a39ccec.png[/img]


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();
}
}
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值