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

页面导航:首页 > 软件编程 > Java编程 > SWT(JFace) 文本编辑器 实现代码

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

来源:互联网 作者:脚本宝典 时间:2015-07-30 13:09 【

代码如下: 实现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.IOException; import org

代码如下: 
实现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.IOException; 
import org.eclipse.jface.resource.ImageDescriptor; 
import org.eclipse.jface.resource.ImageRegistry; 
import org.eclipse.swt.SWT; 
import org.eclipse.swt.custom.StyledText; 
import org.eclipse.swt.events.ModifyEvent; 
import org.eclipse.swt.events.ModifyListener; 
import org.eclipse.swt.graphics.Font; 
import org.eclipse.swt.graphics.Image; 
import org.eclipse.swt.layout.GridData; 
import org.eclipse.swt.layout.GridLayout; 
import org.eclipse.swt.widgets.Display; 
import org.eclipse.swt.widgets.Event; 
import org.eclipse.swt.widgets.FileDialog; 
import org.eclipse.swt.widgets.Listener; 
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.ToolBar; 
import org.eclipse.swt.widgets.ToolItem; 
public class BasicEditor { 

Display display = new Display(); 
Shell shell = new Shell(display); 
StyledText text; 
boolean hasUnsavedChanges; 
File file; 
private String lastOpenDirectory; 
public static final String APP_NAME = "BasicEditor v1.0"; 
MenuItem miWrap = null; 

public BasicEditor() { 

shell.setLayout(new GridLayout()); 
ToolBar toolBar = new ToolBar(shell, SWT.FLAT | SWT.RIGHT ); 
ToolItem tiNew = new ToolItem(toolBar, SWT.PUSH); 
tiNew.setText("&New"); 
tiNew.setImage(getImage("new.gif")); 
tiNew.addListener(SWT.Selection, new Listener() { 
public void handleEvent(Event event) { 
if(handleChangesBeforeDiscard()) { 
file = null; 
text.setText(""); 


}); 

ToolItem tiOpen = new ToolItem(toolBar, SWT.PUSH); 
tiOpen.setText("&Open"); 
tiOpen.setImage(getImage("open.gif")); 
tiOpen.addListener(SWT.Selection, new Listener() { 
public void handleEvent(Event event) { 
if(handleChangesBeforeDiscard()) 
loadTextFromFile(); 

}); 

ToolItem tiSave = new ToolItem(toolBar, SWT.PUSH); 
tiSave.setText("&Save"); 
tiSave.setImage(getImage("save.gif")); 
tiSave.addListener(SWT.Selection, new Listener() { 
public void handleEvent(Event event) { 
saveTextToFile(); 

}); 

new ToolItem(toolBar, SWT.SEPARATOR); 

ToolItem tiCopy = new ToolItem(toolBar, SWT.PUSH); 
tiCopy.setText("&Copy"); 
tiCopy.setImage(getImage("copy.gif")); 
tiCopy.addListener(SWT.Selection, new Listener() { 
public void handleEvent(Event event) { 
text.copy(); 

}); 

ToolItem tiCut = new ToolItem(toolBar, SWT.PUSH); 
tiCut.setText("Cu&t"); 
tiCut.setImage(getImage("cut.gif")); 
tiCut.addListener(SWT.Selection, new Listener() { 
public void handleEvent(Event event) { 
text.cut(); 

}); 

ToolItem tiPaste = new ToolItem(toolBar, SWT.PUSH); 
tiPaste.setText("&Paste"); 
tiPaste.setImage(getImage("paste.gif")); 
tiPaste.addListener(SWT.Selection, new Listener() { 
public void handleEvent(Event event) { 
text.paste(); 

}); 

new ToolItem(toolBar, SWT.SEPARATOR); 

final ToolItem tiWrap = new ToolItem(toolBar, SWT.CHECK); 
tiWrap.setText("&Wrap"); 
tiWrap.addListener(SWT.Selection, new Listener() { 
public void handleEvent(Event event) { 
text.setWordWrap(tiWrap.getSelection()); 
miWrap.setSelection(tiWrap.getSelection()); 

}); 

toolBar.pack(); 

System.out.println("Client area: " + shell.getClientArea()); 

text = 
new StyledText( 
shell, 
SWT.MULTI 
| SWT.WRAP 
| SWT.BORDER 
| SWT.H_SCROLL 
| SWT.V_SCROLL); 
text.setLayoutData(new GridData(GridData.FILL_BOTH)); 
Font font = new Font(shell.getDisplay(), "Courier New", 10, SWT.NORMAL); 
text.setFont(font); 
text.setText("BasicEditor version 1.0\r\nWriten by Jack Li Guojie. "); 
text.addModifyListener(new ModifyListener() { 
public void modifyText(ModifyEvent e) { 
hasUnsavedChanges = true; 

}); 

Menu menuBar = new Menu(shell, SWT.BAR); 

MenuItem fileMenuItem = new MenuItem(menuBar, SWT.CASCADE); 
fileMenuItem.setText("&File"); 
Menu fileMenu = new Menu(shell, SWT.DROP_DOWN); 

MenuItem miNew = new MenuItem(fileMenu, SWT.PUSH); 
miNew.setText("&New\tCtrl+N"); 
miNew.setImage(getImage("new.gif")); 
miNew.setAccelerator(SWT.CTRL + 'N'); 
miNew.addListener(SWT.Selection, new Listener() { 
public void handleEvent(Event event) { 
if(handleChangesBeforeDiscard()) { 
file = null; 
text.setText(""); 


}); 

MenuItem miOpen = new MenuItem(fileMenu, SWT.PUSH); 
miOpen.setText("&Open\tCtrl+O"); 
miOpen.setAccelerator(SWT.CTRL + 'O'); 
miOpen.setImage(getImage("open.gif")); 
miOpen.addListener(SWT.Selection, new Listener() { 
public void handleEvent(Event event) { 
if(handleChangesBeforeDiscard()) 
loadTextFromFile(); 

}); 

MenuItem miSave = new MenuItem(fileMenu, SWT.PUSH); 
miSave.setText("&Save\tCtrl+S"); 
miSave.setImage(getImage("save.gif")); 
miSave.setAccelerator(SWT.CTRL + 'S'); 
miSave.addListener(SWT.Selection, new Listener() { 
public void handleEvent(Event event) { 
saveTextToFile(); 

}); 

new MenuItem(fileMenu, SWT.SEPARATOR); 

MenuItem miExit = new MenuItem(fileMenu, SWT.PUSH); 
miExit.setText("&Exit"); 
miExit.addListener(SWT.Selection, new Listener() { 
public void handleEvent(Event event) { 
if(handleChangesBeforeDiscard()) 
shell.dispose(); 

}); 

fileMenuItem.setMenu(fileMenu); 

MenuItem editMenuItem = new MenuItem(menuBar, SWT.CASCADE); 
editMenuItem.setText("&Edit"); 

Menu editMenu = new Menu(shell, SWT.DROP_DOWN); 

MenuItem miCopy = new MenuItem(editMenu, SWT.PUSH); 
miCopy.setText("&Copy\tCtrl+C"); 
miCopy.setImage(getImage("copy.gif")); 
miCopy.setAccelerator(SWT.CTRL + 'C'); 
miCopy.addListener(SWT.Selection, new Listener() { 
public void handleEvent(Event event) { 
text.copy(); 

}); 

MenuItem miCut = new MenuItem(editMenu, SWT.PUSH); 
miCut.setText("Cu&t\tCtrl+X"); 
miCut.setImage(getImage("cut.gif")); 
miCut.setAccelerator(SWT.CTRL + 'X'); 
miCut.addListener(SWT.Selection, new Listener() { 
public void handleEvent(Event event) { 
text.cut(); 

}); 

MenuItem miPaste = new MenuItem(editMenu, SWT.PUSH); 
miPaste.setText("&Paste\tCtrl+P"); 
miPaste.setImage(getImage("paste.gif")); 
miPaste.setAccelerator(SWT.CTRL + 'P'); 
miPaste.addListener(SWT.Selection, new Listener() { 
public void handleEvent(Event event) { 
text.paste(); 

}); 

editMenuItem.setMenu(editMenu); 

MenuItem formatMenuItem = new MenuItem(menuBar, SWT.CASCADE); 
formatMenuItem.setText("&Format"); 

Menu formatMenu = new Menu(shell, SWT.DROP_DOWN); 

miWrap = new MenuItem(formatMenu, SWT.CHECK); 
miWrap.setText("&Wrap\tCtrl+W"); 
miWrap.setAccelerator(SWT.CTRL + 'W'); 
miWrap.addListener(SWT.Selection, new Listener() { 
public void handleEvent(Event event) { 
text.setWordWrap(miWrap.getSelection()); 
tiWrap.setSelection(miWrap.getSelection()); 

}); 

formatMenuItem.setMenu(formatMenu); 

shell.setMenuBar(menuBar); 

shell.setSize(400, 200); 
shell.open(); 
while (!shell.isDisposed()) { 
if (!display.readAndDispatch()) { 
display.sleep(); 


display.dispose(); 


ImageRegistry imageRegistry = new ImageRegistry(); 

private Image getImage(String shortFileName) { 
if(imageRegistry.getDescriptor(shortFileName) == null) { 
ImageDescriptor descriptor = ImageDescriptor.createFromFile(null, "C:/icons/" + shortFileName); 
imageRegistry.put(shortFileName, descriptor); 

return imageRegistry.get(shortFileName); 

boolean handleChangesBeforeDiscard() { 
if(! hasUnsavedChanges) 
return true; 
MessageBox messageBox = new MessageBox(shell, SWT.ICON_WARNING | SWT.YES | SWT.NO | SWT.CANCEL); 
messageBox.setMessage("Do you want to save the changes to " + (file == null ? "a file?" : file.getName())); 
messageBox.setText(APP_NAME); 
int ret = messageBox.open(); 
if(ret == SWT.YES) { 
return saveTextToFile(); 
}else if(ret == SWT.NO) { 
return true; 
}else{ 
return false; 


boolean loadTextFromFile() { 
FileDialog dialog = new FileDialog(shell, SWT.OPEN); 
if (lastOpenDirectory != null) 
dialog.setFilterPath(lastOpenDirectory); 
String selectedFile = dialog.open(); 
if (selectedFile == null) { 
log("Action cancelled: loading the text from a file"); 
return false; 

file = new File(selectedFile); 
lastOpenDirectory = file.getParent(); 
try { 
BufferedReader reader = new BufferedReader(new FileReader(file)); 
StringBuffer sb = new StringBuffer(); 
String line = null; 
while((line = reader.readLine()) != null) { 
sb.append(line); 
sb.append("\r\n"); 

text.setText(sb.toString()); 
return true; 
}catch(IOException e) { 
log("Failed to load the text from file: " + file); 
log(e.toString()); 

return false; 

boolean saveTextToFile() { 
if (file == null) { 
FileDialog dialog = new FileDialog(shell, SWT.SAVE); 
if (lastOpenDirectory != null) 
dialog.setFilterPath(lastOpenDirectory); 
String selectedFile = dialog.open(); 
if (selectedFile == null) { 
log("Action cancelled: saving the text to a file"); 
return false; 

file = new File(selectedFile); 
lastOpenDirectory = file.getParent(); 

try { 
FileWriter writer = new FileWriter(file); 
writer.write(text.getText()); 
writer.close(); 
log("The text has been saved to file: " + file); 
hasUnsavedChanges = false; 
return true; 
} catch (IOException e) { 
log("Failed to save the text to file: " + file); 
log(e.toString()); 

return false; 

void log(String message) { 
System.out.println(message); 

public static void main(String[] args) { 
new BasicEditor(); 

}


实现2: 
BasicEditor2.java 

复制代码代码如下:


package swt_jface.demo5; 
import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileReader; 
import java.io.FileWriter; 
import java.io.IOException; 
import org.eclipse.jface.action.Action; 
import org.eclipse.jface.action.IAction; 
import org.eclipse.jface.action.MenuManager; 
import org.eclipse.jface.action.Separator; 
import org.eclipse.jface.action.ToolBarManager; 
import org.eclipse.jface.resource.ImageDescriptor; 
import org.eclipse.jface.resource.ImageRegistry; 
import org.eclipse.swt.SWT; 
import org.eclipse.swt.custom.StyledText; 
import org.eclipse.swt.events.ModifyEvent; 
import org.eclipse.swt.events.ModifyListener; 
import org.eclipse.swt.graphics.Font; 
import org.eclipse.swt.graphics.Image; 
import org.eclipse.swt.layout.GridData; 
import org.eclipse.swt.layout.GridLayout; 
import org.eclipse.swt.widgets.Decorations; 
import org.eclipse.swt.widgets.Display; 
import org.eclipse.swt.widgets.FileDialog; 
import org.eclipse.swt.widgets.MenuItem; 
import org.eclipse.swt.widgets.MessageBox; 
import org.eclipse.swt.widgets.Shell; 
import org.eclipse.swt.widgets.ToolBar; 
public class BasicEditor2 { 

Display display = new Display(); 
Shell shell = new Shell(display); 
StyledText text; 
boolean hasUnsavedChanges; 
File file; 
private String lastOpenDirectory; 
public static final String APP_NAME = "BasicEditor v2.0"; 
MenuItem miWrap = null; 
public BasicEditor2() { 

Action actionNew = 
new Action( 
"&New", 
ImageDescriptor.createFromFile(null, "C:/icons/new.gif")) { 
public void run() { 
if (handleChangesBeforeDiscard()) { 
file = null; 
text.setText(""); 


}; 
actionNew.setAccelerator(SWT.CTRL + 'N'); 
Action actionOpen = 
new Action( 
"&Open", 
ImageDescriptor.createFromFile(null, "C:/icons/open.gif")) { 
public void run() { 
if (handleChangesBeforeDiscard()) 
loadTextFromFile(); 

}; 
actionOpen.setAccelerator(SWT.CTRL + 'O'); 

Action actionSave = 
new Action( 
"&Save\tCtrl+S", 
ImageDescriptor.createFromFile(null, "C:/icons/save.gif")) { 
public void run() { 
saveTextToFile(); 

}; 
//actionSave.setAccelerator(SWT.CTRL + 'S'); 

Action actionCopy = 
new Action( 
"&Copy", 
ImageDescriptor.createFromFile(null, "C:/icons/copy.gif")) { 
public void run() { 
text.copy(); 

}; 
actionCopy.setAccelerator(SWT.CTRL + 'C'); 

Action actionCut = 
new Action( 
"Cu&t", 
ImageDescriptor.createFromFile(null, "C:/icons/cut.gif")) { 
public void run() { 
text.cut(); 

}; 
actionCut.setAccelerator(SWT.CTRL + 'X'); 

Action actionPaste = 
new Action( 
"&Paste", 
ImageDescriptor.createFromFile(null, "C:/icons/paste.gif")) { 
public void run() { 
text.paste(); 

}; 
actionPaste.setAccelerator(SWT.CTRL + 'P'); 

Action actionWrap = 
new Action( 
"&Wrap", IAction.AS_CHECK_BOX) { 
public void run() { 
text.setWordWrap(isChecked()); 

}; 
actionWrap.setAccelerator(SWT.CTRL + 'W'); 

Action actionExit = new Action("&[email protected]+X") { 
public void run() { 
if (handleChangesBeforeDiscard()) 
shell.dispose(); 

}; 
System.out.println(actionWrap.getText()); 

ToolBar toolBar = new ToolBar(shell, SWT.FLAT | SWT.RIGHT); 
ToolBarManager toolBarManager = new ToolBarManager(toolBar); 
toolBarManager.add(actionNew); 
toolBarManager.add(actionOpen); 
toolBarManager.add(actionSave); 
toolBarManager.add(new Separator()); 
toolBarManager.add(actionCopy); 
toolBarManager.add(actionCut); 
toolBarManager.add(actionPaste); 
toolBarManager.add(new Separator()); 
toolBarManager.add(actionWrap); 
toolBarManager.update(true); 
shell.setLayout(new GridLayout()); 
System.out.println("Client area: " + shell.getClientArea()); 
text = 
new StyledText( 
shell, 
SWT.MULTI 
| SWT.WRAP 
| SWT.BORDER 
| SWT.H_SCROLL 
| SWT.V_SCROLL); 
text.setLayoutData(new GridData(GridData.FILL_BOTH)); 
Font font = new Font(shell.getDisplay(), "Courier New", 10, SWT.NORMAL); 
text.setFont(font); 
text.setText("BasicEditor version 1.0\r\nWriten by Jack Li Guojie. "); 
text.addModifyListener(new ModifyListener() { 
public void modifyText(ModifyEvent e) { 
hasUnsavedChanges = true; 

}); 
MenuManager barMenuManager = new MenuManager(); 

MenuManager fileMenuManager = new MenuManager("&File"); 
MenuManager editMenuManager = new MenuManager("&Edit"); 
MenuManager formatMenuManager = new MenuManager("&Format"); 
barMenuManager.add(fileMenuManager); 
barMenuManager.add(editMenuManager); 
barMenuManager.add(formatMenuManager); 
fileMenuManager.add(actionNew); 
fileMenuManager.add(actionOpen); 
fileMenuManager.add(actionSave); 
fileMenuManager.add(new Separator()); 
fileMenuManager.add(actionExit); 
editMenuManager.add(actionCopy); 
editMenuManager.add(actionCut); 
editMenuManager.add(actionPaste); 
formatMenuManager.add(actionWrap); 
// shell.setMenuBar(menuBar); 
barMenuManager.updateAll(true); 
shell.setMenuBar(barMenuManager.createMenuBar((Decorations)shell)); 
shell.setSize(400, 200); 
shell.open(); 
while (!shell.isDisposed()) { 
if (!display.readAndDispatch()) { 
display.sleep(); 


display.dispose(); 

ImageRegistry imageRegistry = new ImageRegistry(); 
private Image getImage(String shortFileName) { 
if (imageRegistry.getDescriptor(shortFileName) == null) { 
ImageDescriptor descriptor = 
ImageDescriptor.createFromFile(null, "C:/icons/" + shortFileName); 
imageRegistry.put(shortFileName, descriptor); 

return imageRegistry.get(shortFileName); 

boolean handleChangesBeforeDiscard() { 
if (!hasUnsavedChanges) 
return true; 
MessageBox messageBox = 
new MessageBox( 
shell, 
SWT.ICON_WARNING | SWT.YES | SWT.NO | SWT.CANCEL); 
messageBox.setMessage( 
"Do you want to save the changes to " 
+ (file == null ? "a file?" : file.getName())); 
messageBox.setText(APP_NAME); 
int ret = messageBox.open(); 
if (ret == SWT.YES) { 
return saveTextToFile(); 
} else if (ret == SWT.NO) { 
return true; 
} else { 
return false; 


boolean loadTextFromFile() { 
FileDialog dialog = new FileDialog(shell, SWT.OPEN); 
if (lastOpenDirectory != null) 
dialog.setFilterPath(lastOpenDirectory); 
String selectedFile = dialog.open(); 
if (selectedFile == null) { 
log("Action cancelled: loading the text from a file"); 
return false; 

file = new File(selectedFile); 
lastOpenDirectory = file.getParent(); 
try { 
BufferedReader reader = new BufferedReader(new FileReader(file)); 
StringBuffer sb = new StringBuffer(); 
String line = null; 
while ((line = reader.readLine()) != null) { 
sb.append(line); 
sb.append("\r\n"); 

text.setText(sb.toString()); 
return true; 
} catch (IOException e) { 
log("Failed to load the text from file: " + file); 
log(e.toString()); 

return false; 

boolean saveTextToFile() { 
if (file == null) { 
FileDialog dialog = new FileDialog(shell, SWT.SAVE); 
if (lastOpenDirectory != null) 
dialog.setFilterPath(lastOpenDirectory); 
String selectedFile = dialog.open(); 
if (selectedFile == null) { 
log("Action cancelled: saving the text to a file"); 
return false; 

file = new File(selectedFile); 
lastOpenDirectory = file.getParent(); 

try { 
FileWriter writer = new FileWriter(file); 
writer.write(text.getText()); 
writer.close(); 
log("The text has been saved to file: " + file); 
hasUnsavedChanges = false; 
return true; 
} catch (IOException e) { 
log("Failed to save the text to file: " + file); 
log(e.toString()); 

return false; 

void log(String message) { 
System.out.println(message); 

public static void main(String[] args) { 
new BasicEditor2(); 

}


实现3: 
BasicEditor3.java 

复制代码代码如下:


package swt_jface.demo11; 
import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileReader; 
import java.io.FileWriter; 
import java.io.IOException; 
import org.eclipse.jface.action.Action; 
import org.eclipse.jface.action.IAction; 
import org.eclipse.jface.action.MenuManager; 
import org.eclipse.jface.action.Separator; 
import org.eclipse.jface.action.ToolBarManager; 
import org.eclipse.jface.resource.ImageDescriptor; 
import org.eclipse.jface.resource.ImageRegistry; 
import org.eclipse.swt.SWT; 
import org.eclipse.swt.custom.StyledText; 
import org.eclipse.swt.custom.StyledTextPrintOptions; 
import org.eclipse.swt.events.ModifyEvent; 
import org.eclipse.swt.events.ModifyListener; 
import org.eclipse.swt.graphics.Font; 
import org.eclipse.swt.graphics.GC; 
import org.eclipse.swt.layout.GridData; 
import org.eclipse.swt.layout.GridLayout; 
import org.eclipse.swt.printing.PrintDialog; 
import org.eclipse.swt.printing.Printer; 
import org.eclipse.swt.printing.PrinterData; 
import org.eclipse.swt.widgets.Decorations; 
import org.eclipse.swt.widgets.Display; 
import org.eclipse.swt.widgets.FileDialog; 
import org.eclipse.swt.widgets.MenuItem; 
import org.eclipse.swt.widgets.MessageBox; 
import org.eclipse.swt.widgets.Shell; 
import org.eclipse.swt.widgets.ToolBar; 
public class BasicEditor3 { 

    Display display = new Display(); 
    Shell shell = new Shell(display); 
    StyledText text; 
    boolean hasUnsavedChanges; 
    File file; 
    private String lastOpenDirectory; 
    public static final String APP_NAME = "BasicEditor v3.0"; 
    MenuItem miWrap = null; 
    public BasicEditor3() { 
        Action actionNew = 
            new Action( 
                "&New", 
                ImageDescriptor.createFromFile(null, "C:/icons/new.gif")) { 
            public void run() { 
                if (handleChangesBeforeDiscard()) { 
                    file = null; 
                    text.setText(""); 
                } 
            } 
        }; 
        actionNew.setAccelerator(SWT.CTRL + 'N'); 
        Action actionOpen = 
            new Action( 
                "&Open", 
                ImageDescriptor.createFromFile(null, "C:/icons/open.gif")) { 
            public void run() { 
                if (handleChangesBeforeDiscard()) 
                    loadTextFromFile(); 
            } 
        }; 
        actionOpen.setAccelerator(SWT.CTRL + 'O'); 
        Action actionSave = 
            new Action( 
                "&Save\tCtrl+S", 
                ImageDescriptor.createFromFile(null, "C:/icons/save.gif")) { 
            public void run() { 
                saveTextToFile(); 
            } 
        }; 
        actionSave.setAccelerator(SWT.CTRL + 'S'); 
        Action actionCopy = 
            new Action( 
                "&Copy", 
                ImageDescriptor.createFromFile(null, "C:/icons/copy.gif")) { 
            public void run() { 
                text.copy(); 
            } 
        }; 
        actionCopy.setAccelerator(SWT.CTRL + 'C'); 
        Action actionCut = 
            new Action( 
                "Cu&t", 
                ImageDescriptor.createFromFile(null, "C:/icons/cut.gif")) { 
            public void run() { 
                text.cut(); 
            } 
        }; 
        actionCut.setAccelerator(SWT.CTRL + 'X'); 
        Action actionPaste = 
            new Action( 
                "&Paste", 
                ImageDescriptor.createFromFile(null, "C:/icons/paste.gif")) { 
            public void run() { 
                text.paste(); 
            } 
        }; 
        actionPaste.setAccelerator(SWT.CTRL + 'P'); 
        Action actionWrap = 
            new Action( 
                "&Wrap", IAction.AS_CHECK_BOX) { 
            public void run() { 
                text.setWordWrap(isChecked()); 
            } 
        }; 
        actionWrap.setAccelerator(SWT.CTRL + 'W'); 
        Action actionExit = new Action("&[email protected]+X") { 
            public void run() { 
                if (handleChangesBeforeDiscard()) 
                    shell.dispose(); 
            } 
        }; 
        Action actionPrint = new Action("&[email protected]+P") { 
            public void run() { 
                printText(text.getText()); 
            } 
        }; 
        Action actionPrint2 = new Action("Print (StyledText)") { 
            public void run() { 
                StyledTextPrintOptions options = new StyledTextPrintOptions(); 
                options.header = "SWT"; 
                options.footer = "Page <page>"; 
                options.jobName = "Text"; 

                Runnable runnable = text.print(new Printer(), options); 
                runnable.run(); 
            } 
        }; 

        ToolBar toolBar = new ToolBar(shell, SWT.FLAT | SWT.RIGHT); 
        ToolBarManager toolBarManager = new ToolBarManager(toolBar); 

        toolBarManager.add(actionNew); 
        toolBarManager.add(actionOpen); 
        toolBarManager.add(actionSave); 
        toolBarManager.add(new Separator()); 
        toolBarManager.add(actionCopy); 
        toolBarManager.add(actionCut); 
        toolBarManager.add(actionPaste); 
        toolBarManager.add(new Separator()); 
        toolBarManager.add(actionWrap); 
        toolBarManager.add(new Separator()); 
        toolBarManager.add(actionPrint); 
        toolBarManager.add(actionPrint2); 
        toolBarManager.update(true); 
        shell.setText(APP_NAME); 
        shell.setLayout(new GridLayout()); 
        text = 
            new StyledText( 
                shell, 
                SWT.MULTI 
                    | SWT.WRAP 
                    | SWT.BORDER 
                    | SWT.H_SCROLL 
                    | SWT.V_SCROLL); 
        text.setLayoutData(new GridData(GridData.FILL_BOTH)); 
        Font font = new Font(shell.getDisplay(), "Courier New", 10, SWT.NORMAL); 
        text.setFont(font); 
        text.setText("BasicEditor version 3.0\r\nWriten by Jack Li Guojie. "); 
        text.addModifyListener(new ModifyListener() { 
            public void modifyText(ModifyEvent e) { 
                hasUnsavedChanges = true; 
            } 
        }); 
        MenuManager barMenuManager = new MenuManager(); 
        MenuManager fileMenuManager = new MenuManager("&File"); 
        MenuManager editMenuManager = new MenuManager("&Edit"); 
        MenuManager formatMenuManager = new MenuManager("&Format"); 
        barMenuManager.add(fileMenuManager); 
        barMenuManager.add(editMenuManager); 
        barMenuManager.add(formatMenuManager); 
        fileMenuManager.add(actionNew); 
        fileMenuManager.add(actionOpen); 
        fileMenuManager.add(actionSave); 
        fileMenuManager.add(actionPrint); 
        fileMenuManager.add(new Separator()); 
        fileMenuManager.add(actionExit); 
        editMenuManager.add(actionCopy); 
        editMenuManager.add(actionCut); 
        editMenuManager.add(actionPaste); 

        formatMenuManager.add(actionWrap); 
        //shell.setMenuBar(menuBar); 
        barMenuManager.updateAll(true); 
        shell.setMenuBar(barMenuManager.createMenuBar((Decorations)shell)); 
        shell.setSize(400, 200); 
        shell.open(); 
        while (!shell.isDisposed()) { 
            if (!display.readAndDispatch()) { 
                display.sleep(); 
            } 
        } 
        display.dispose(); 
    } 

    int x; 
    int y; 
    int lineHeight; 
    PrintMargin margins; 
    int pageNumber = 1; 
    int lineNumber = 1; 

    void printText(String text) { 
        PrintDialog dialog = new PrintDialog(shell); 
        PrinterData printerData = dialog.open(); 
        if(printerData == null) return; 
        Printer printer = new Printer(printerData); 
        if(! printer.startJob("text")) return; 
        GC gc = new GC(printer); 
        margins = PrintMargin.getPrintMargin(printer, 1.0); 
        x = margins.left; 
        y = margins.top; 
        StringBuffer buffer = new StringBuffer(); 
        Font font = new Font(printer, "Arial", 12, SWT.NORMAL); 
        gc.setFont(font); 
        lineHeight = gc.getFontMetrics().getHeight(); 
        printer.startPage(); 
        String page = "- " + pageNumber + " -"; 
        gc.drawString(page, (margins.right - margins.left - gc.textExtent(page).x) / 2 + margins.left, margins.bottom + gc.textExtent(page).y); 
        for(int index = 0; index <text.length();) { 
            char c = text.charAt(index); 
            switch(c) { 
                case '\r': 
                    if(index < text.length() - 1 && text.charAt(index + 1) == '\n') { 
                        printNewLine(printer, gc, buffer.toString()); 
                        buffer.setLength(0); 
                        index += 2; 
                    } 
                    break; 
                case '\t': 
                case ' ': 
                    if(gc.textExtent(buffer.toString() + ' ').x > margins.right - margins.left) { 
                        printNewLine(printer, gc, buffer.toString()); 
                        buffer.setLength(0); 
                    } 
                    buffer.append(c); 
                    if(index < text.length() - 1 && (!Character.isWhitespace(text.charAt(index + 1)))) { // Looks up one word to see whether the line should wraps here. 
                        String word = readWord(text, index + 1); 
                        if(gc.textExtent(buffer.toString() + word).x > margins.right - margins.left) { 
                            printNewLine(printer, gc, buffer.toString()); 
                            buffer.setLength(0); 
                        } 
                    } 
                    index += 1; 
                    break; 
                default: 
                    buffer.append(c); 
                    index += 1; 
            } 
        } 

        if(buffer.length() > 0) printNewLine(printer, gc, buffer.toString()); 
        if(y + lineHeight <= margins.bottom) printer.endPage(); 
        printer.endJob(); 
        gc.dispose(); 
        font.dispose(); 
        printer.dispose(); 
    } 
    void printNewLine(Printer printer, GC gc, String line) { 
        if(y + lineHeight > margins.bottom) { 
            printer.endPage(); 
            x = margins.left; 
            y = margins.top; 
            pageNumber ++; 
            lineNumber = 1; 
            String page = "- " + pageNumber + " -"; 
            gc.drawString(page, (margins.right - margins.left - gc.textExtent(page).x) / 2 + margins.left, margins.bottom + gc.textExtent(page).y); 
        } 
        gc.drawString(line, x, y); 
        y += lineHeight; 
    } 
    String readWord(String text, int offset) { 
        StringBuffer sb = new StringBuffer(); 
        int index = offset; 
        char c = 0; 
        while(index < text.length()) { 
            c = text.charAt(index); 
            if(Character.isWhitespace(c)) break; 
            sb.append(c); 
            index += 1; 
        } 
        return sb.toString(); 
    } 
    ImageRegistry imageRegistry = new ImageRegistry(); 
//    private Image getImage(String shortFileName) { 
//        if (imageRegistry.getDescriptor(shortFileName) == null) { 
//            ImageDescriptor descriptor = 
//                ImageDescriptor.createFromFile(null, "C:/icons/" + shortFileName); 
//            imageRegistry.put(shortFileName, descriptor); 
//        } 
//        return imageRegistry.get(shortFileName); 
//    } 
    boolean handleChangesBeforeDiscard() { 
        if (!hasUnsavedChanges) 
            return true; 
        MessageBox messageBox = 
            new MessageBox( 
                shell, 
                SWT.ICON_WARNING | SWT.YES | SWT.NO | SWT.CANCEL); 
        messageBox.setMessage( 
            "Do you want to save the changes to " 
                + (file == null ? "a file?" : file.getName())); 
        messageBox.setText(APP_NAME); 
        int ret = messageBox.open(); 
        if (ret == SWT.YES) { 
            return saveTextToFile(); 
        } else if (ret == SWT.NO) { 
            return true; 
        } else { 
            return false; 
        } 
    } 
    boolean loadTextFromFile() { 
        FileDialog dialog = new FileDialog(shell, SWT.OPEN); 
        if (lastOpenDirectory != null) 
            dialog.setFilterPath(lastOpenDirectory); 
        String selectedFile = dialog.open(); 
        if (selectedFile == null) { 
            log("Action cancelled: loading the text from a file"); 
            return false; 
        } 
        file = new File(selectedFile); 
        lastOpenDirectory = file.getParent(); 
        try { 
            BufferedReader reader = new BufferedReader(new FileReader(file)); 
            StringBuffer sb = new StringBuffer(); 
            String line = null; 
            while ((line = reader.readLine()) != null) { 
                sb.append(line); 
                sb.append("\r\n"); 
            } 
            text.setText(sb.toString()); 
            return true; 
        } catch (IOException e) { 
            log("Failed to load the text from file: " + file); 
            log(e.toString()); 
        } 
        return false; 
    } 
    boolean saveTextToFile() { 
        if (file == null) { 
            FileDialog dialog = new FileDialog(shell, SWT.SAVE); 
            if (lastOpenDirectory != null) 
                dialog.setFilterPath(lastOpenDirectory); 
            String selectedFile = dialog.open(); 
            if (selectedFile == null) { 
                log("Action cancelled: saving the text to a file"); 
                return false; 
            } 
            file = new File(selectedFile); 
            lastOpenDirectory = file.getParent(); 
        } 
        try { 
            FileWriter writer = new FileWriter(file); 
            writer.write(text.getText()); 
            writer.close(); 
            log("The text has been saved to file: " + file); 
            hasUnsavedChanges = false; 
            return true; 
        } catch (IOException e) { 
            log("Failed to save the text to file: " + file); 
            log(e.toString()); 
        } 
        return false; 
    } 
    void log(String message) { 
        System.out.println(message); 
    } 
    public static void main(String[] args) { 
        new BasicEditor3(); 
    } 
}


追加了打印机能,需要下面这个类:

复制代码代码如下:


package swt_jface.demo11; 
import org.eclipse.swt.graphics.Point; 
import org.eclipse.swt.graphics.Rectangle; 
import org.eclipse.swt.printing.Printer; 
public class PrintMargin { 

    public int left; 
    public int right; 
    public int top; 
    public int bottom; 
    private PrintMargin(int left, int right, int top, int bottom) { 
        this.left = left; 
        this.right = right; 
        this.top = top; 
        this.bottom = bottom; 
    } 
    static PrintMargin getPrintMargin(Printer printer, double margin) { 
        return getPrintMargin(printer, margin, margin, margin, margin); 
    } 
    static PrintMargin getPrintMargin( 
        Printer printer, 
        double marginLeft, 
        double marginRight, 
        double marginTop, 
        double marginBottom) { 
        Rectangle clientArea = printer.getClientArea(); 
        Rectangle trim = printer.computeTrim(0, 0, 0, 0); 
        Point dpi = printer.getDPI(); 
        int leftMargin = (int) (marginLeft * dpi.x) - trim.x; 
        int rightMargin = 
            clientArea.width 
                + trim.width 
                - (int) (marginRight * dpi.x) 
                - trim.x; 
        int topMargin = (int) (marginTop * dpi.y) - trim.y; 
        int bottomMargin = 
            clientArea.height 
                + trim.height 
                - (int) (marginBottom * dpi.y) 
                - trim.y; 
        return new PrintMargin( 
            leftMargin, 
            rightMargin, 
            topMargin, 
            bottomMargin); 
    } 
    public String toString() { 
        return "Margin { " 
            + left 
            + ", " 
            + right 
            + "; " 
            + top 
            + ", " 
            + bottom 
            + " }"; 
    } 
}


Tags:

文章评论

最 近 更 新
热 点 排 行
Js与CSS工具
代码转换工具

<