SWT(JFace) 简易浏览器 制作实现代码

页面导航:首页 > 软件编程 > Java编程 > SWT(JFace) 简易浏览器 制作实现代码

SWT(JFace) 简易浏览器 制作实现代码

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

代码如下: BrowserExample.java 复制代码 代码如下: package swt_jface.demo5; import java.text.MessageFormat; import java.util.MissingResourceException; import org.eclipse.swt.SWT; import org.eclipse.swt.SWTError; import org.eclip

代码如下: 
BrowserExample.java 

复制代码代码如下:


package swt_jface.demo5; 
import java.text.MessageFormat; 
import java.util.MissingResourceException; 
import org.eclipse.swt.SWT; 
import org.eclipse.swt.SWTError; 
import org.eclipse.swt.browser.Browser; 
import org.eclipse.swt.browser.CloseWindowListener; 
import org.eclipse.swt.browser.LocationEvent; 
import org.eclipse.swt.browser.LocationListener; 
import org.eclipse.swt.browser.OpenWindowListener; 
import org.eclipse.swt.browser.ProgressEvent; 
import org.eclipse.swt.browser.ProgressListener; 
import org.eclipse.swt.browser.StatusTextEvent; 
import org.eclipse.swt.browser.StatusTextListener; 
import org.eclipse.swt.browser.TitleEvent; 
import org.eclipse.swt.browser.TitleListener; 
import org.eclipse.swt.browser.VisibilityWindowListener; 
import org.eclipse.swt.browser.WindowEvent; 
import org.eclipse.swt.graphics.Image; 
import org.eclipse.swt.graphics.Point; 
import org.eclipse.swt.graphics.Rectangle; 
import org.eclipse.swt.layout.FillLayout; 
import org.eclipse.swt.layout.FormAttachment; 
import org.eclipse.swt.layout.FormData; 
import org.eclipse.swt.layout.FormLayout; 
import org.eclipse.swt.widgets.Canvas; 
import org.eclipse.swt.widgets.Composite; 
import org.eclipse.swt.widgets.Display; 
import org.eclipse.swt.widgets.Event; 
import org.eclipse.swt.widgets.Label; 
import org.eclipse.swt.widgets.Listener; 
import org.eclipse.swt.widgets.ProgressBar; 
import org.eclipse.swt.widgets.Shell; 
import org.eclipse.swt.widgets.Text; 
import org.eclipse.swt.widgets.ToolBar; 
import org.eclipse.swt.widgets.ToolItem; 
public class BrowserExample { 
//static ResourceBundle resourceBundle = ResourceBundle.getBundle("examples_browser"); 
int index; 
boolean busy; 
Image images[]; 
Text location; 
Browser browser; 
static final String[] imageLocations = { 
"eclipse01.bmp", "eclipse02.bmp", "eclipse03.bmp", "eclipse04.bmp", "eclipse05.bmp", 
"eclipse06.bmp", "eclipse07.bmp", "eclipse08.bmp", "eclipse09.bmp", "eclipse10.bmp", 
"eclipse11.bmp", "eclipse12.bmp",}; 
static final String iconLocation = "document.gif"; 

public BrowserExample(Composite parent) { 
final Display display = parent.getDisplay(); 
FormLayout layout = new FormLayout(); 
parent.setLayout(layout); 
ToolBar toolbar = new ToolBar(parent, SWT.NONE); 
final ToolItem itemBack = new ToolItem(toolbar, SWT.PUSH); 
itemBack.setText(getResourceString("Back")); 
final ToolItem itemForward = new ToolItem(toolbar, SWT.PUSH); 
itemForward.setText(getResourceString("Forward")); 
final ToolItem itemStop = new ToolItem(toolbar, SWT.PUSH); 
itemStop.setText(getResourceString("Stop")); 
final ToolItem itemRefresh = new ToolItem(toolbar, SWT.PUSH); 
itemRefresh.setText(getResourceString("Refresh")); 
final ToolItem itemGo = new ToolItem(toolbar, SWT.PUSH); 
itemGo.setText(getResourceString("Go")); 
location = new Text(parent, SWT.BORDER); 
images = new Image[]{new Image(display, "C:/icons/web/go.gif")}; 
final Canvas canvas = new Canvas(parent, SWT.NO_BACKGROUND); 
final Rectangle rect = images[0].getBounds(); 
canvas.addListener(SWT.Paint, new Listener() { 
public void handleEvent(Event e) { 
Point pt = canvas.getSize(); 
e.gc.drawImage(images[index], 0, 0, rect.width, rect.height, 0, 0, pt.x, pt.y); 

}); 
canvas.addListener(SWT.MouseDown, new Listener() { 
public void handleEvent(Event e) { 
browser.setUrl(getResourceString("Startup")); 

}); 

display.asyncExec(new Runnable() { 
public void run() { 
if (canvas.isDisposed()) return; 
if (busy) { 
index++; 
if (index == images.length) index = 0; 
canvas.redraw(); 

display.timerExec(150, this); 

}); 
final Label status = new Label(parent, SWT.NONE); 
final ProgressBar progressBar = new ProgressBar(parent, SWT.NONE); 
FormData data = new FormData(); 
data.top = new FormAttachment(0, 5); 
toolbar.setLayoutData(data); 
data = new FormData(); 
data.left = new FormAttachment(0, 0); 
data.right = new FormAttachment(100, 0); 
data.top = new FormAttachment(canvas, 5, SWT.DEFAULT); 
data.bottom = new FormAttachment(status, -5, SWT.DEFAULT); 
try { 
browser = new Browser(parent, SWT.NONE); 
browser.setLayoutData(data); 
} catch (SWTError e) { 
Label label = new Label(parent, SWT.CENTER | SWT.WRAP); 
label.setText(getResourceString("BrowserNotCreated")); 
label.setLayoutData(data); 

data = new FormData(); 
data.width = 24; 
data.height = 24; 
data.top = new FormAttachment(0, 5); 
data.right = new FormAttachment(100, -5); 
canvas.setLayoutData(data); 
data = new FormData(); 
data.top = new FormAttachment(toolbar, 0, SWT.TOP); 
data.left = new FormAttachment(toolbar, 5, SWT.RIGHT); 
data.right = new FormAttachment(canvas, -5, SWT.DEFAULT); 
location.setLayoutData(data); 
data = new FormData(); 
data.left = new FormAttachment(0, 5); 
data.right = new FormAttachment(progressBar, 0, SWT.DEFAULT); 
data.bottom = new FormAttachment(100, -5); 
status.setLayoutData(data); 

data = new FormData(); 
data.right = new FormAttachment(100, -5); 
data.bottom = new FormAttachment(100, -5); 
progressBar.setLayoutData(data); 
if (browser != null) { 
itemBack.setEnabled(browser.isBackEnabled()); 
itemForward.setEnabled(browser.isForwardEnabled()); 

Listener listener = new Listener() { 
public void handleEvent(Event event) { 
ToolItem item = (ToolItem)event.widget; 
if (item == itemBack) browser.back(); 
else if (item == itemForward) browser.forward(); 
else if (item == itemStop) browser.stop(); 
else if (item == itemRefresh) browser.refresh(); 
else if (item == itemGo) browser.setUrl(location.getText()); 

}; 
browser.addLocationListener(new LocationListener() { 
public void changed(LocationEvent event) { 
busy = true; 
if (event.top) location.setText(event.location); 

public void changing(LocationEvent event) { 

}); 
browser.addProgressListener(new ProgressListener() { 
public void changed(ProgressEvent event) { 
if (event.total == 0) return; 
int ratio = event.current * 100 / event.total; 
progressBar.setSelection(ratio); 
busy = event.current != event.total; 
if (!busy) { 
index = 0; 
canvas.redraw(); 


public void completed(ProgressEvent event) { 
itemBack.setEnabled(browser.isBackEnabled()); 
itemForward.setEnabled(browser.isForwardEnabled()); 
progressBar.setSelection(0); 
busy = false; 
index = 0; 
canvas.redraw(); 

}); 
browser.addStatusTextListener(new StatusTextListener() { 
public void changed(StatusTextEvent event) { 
status.setText(event.text); 

}); 
if (parent instanceof Shell) { 
final Shell shell = (Shell)parent; 
browser.addTitleListener(new TitleListener() { 
public void changed(TitleEvent event) { 
shell.setText(event.title+" - "+getResourceString("window.title")); 

}); 

itemBack.addListener(SWT.Selection, listener); 
itemForward.addListener(SWT.Selection, listener); 
itemStop.addListener(SWT.Selection, listener); 
itemRefresh.addListener(SWT.Selection, listener); 
itemGo.addListener(SWT.Selection, listener); 
location.addListener(SWT.DefaultSelection, new Listener() { 
public void handleEvent(Event e) { 
browser.setUrl(location.getText()); 

}); 
initialize(display, browser); 
browser.setUrl(getResourceString("Startup")); 


static String getResourceString(String key) { 
try { 
return "key"; 
} catch (MissingResourceException e) { 
return key; 
} catch (NullPointerException e) { 
return "!" + key + "!"; 


static String getResourceString(String key, Object[] args) { 
try { 
return MessageFormat.format(getResourceString(key), args); 
} catch (MissingResourceException e) { 
return key; 
} catch (NullPointerException e) { 
return "!" + key + "!"; 


static void initialize(final Display display, Browser browser) { 
browser.addOpenWindowListener(new OpenWindowListener() { 
public void open(WindowEvent event) { 
System.out.println("Open"); 
Shell shell = new Shell(display); 
shell.setLayout(new FillLayout()); 
Browser browser = new Browser(shell, SWT.NONE); 
initialize(display, browser); 
event.browser = browser; 

}); 
browser.addVisibilityWindowListener(new VisibilityWindowListener() { 
public void hide(WindowEvent event) { 

public void show(WindowEvent event) { 
System.out.println("Show"); 
Browser browser = (Browser)event.widget; 
Shell shell = browser.getShell(); 
if (event.location != null) shell.setLocation(event.location); 
if (event.size != null) { 
Point size = event.size; 
shell.setSize(shell.computeSize(size.x, size.y)); 

shell.open(); 

}); 
browser.addCloseWindowListener(new CloseWindowListener() { 
public void close(WindowEvent event) { 
System.out.println("Close"); 
Browser browser = (Browser)event.widget; 
Shell shell = browser.getShell(); 
shell.close(); 

}); 

public void dispose() { 
freeResources(); 

void freeResources() { 
if (images != null) { 
for (int i = 0; i < images.length; ++i) { 
final Image image = images[i]; 
if (image != null) image.dispose(); 

images = null; 


public void setFocus() { 
location.setFocus(); 

public static void main(String [] args) { 

Display display = new Display(); 
Shell shell = new Shell(display); 
shell.setLayout(new FillLayout()); 
shell.setText("Browser example"); 
BrowserExample instance = new BrowserExample(shell); 
Image icon = new Image(display, "C:/icons/web/go.gif"); 
shell.setImage(icon); 
shell.open(); 
while (!shell.isDisposed()) { 
if (!display.readAndDispatch()) 
display.sleep(); 

icon.dispose(); 
instance.dispose(); 
display.dispose(); 

}

再看一个好一点的实现: 
SWTBrowser.java 

复制代码代码如下:


package swt_jface.demo8; 
import org.eclipse.jface.action.Action; 
import org.eclipse.jface.action.ToolBarManager; 
import org.eclipse.jface.resource.ImageDescriptor; 
import org.eclipse.swt.SWT; 
import org.eclipse.swt.browser.Browser; 
import org.eclipse.swt.browser.CloseWindowListener; 
import org.eclipse.swt.browser.LocationEvent; 
import org.eclipse.swt.browser.LocationListener; 
import org.eclipse.swt.browser.OpenWindowListener; 
import org.eclipse.swt.browser.ProgressEvent; 
import org.eclipse.swt.browser.ProgressListener; 
import org.eclipse.swt.browser.StatusTextEvent; 
import org.eclipse.swt.browser.StatusTextListener; 
import org.eclipse.swt.browser.TitleEvent; 
import org.eclipse.swt.browser.TitleListener; 
import org.eclipse.swt.browser.VisibilityWindowListener; 
import org.eclipse.swt.browser.WindowEvent; 
import org.eclipse.swt.graphics.Image; 
import org.eclipse.swt.graphics.Point; 
import org.eclipse.swt.layout.FillLayout; 
import org.eclipse.swt.layout.GridData; 
import org.eclipse.swt.layout.GridLayout; 
import org.eclipse.swt.widgets.Button; 
import org.eclipse.swt.widgets.Composite; 
import org.eclipse.swt.widgets.Display; 
import org.eclipse.swt.widgets.Event; 
import org.eclipse.swt.widgets.Label; 
import org.eclipse.swt.widgets.Listener; 
import org.eclipse.swt.widgets.ProgressBar; 
import org.eclipse.swt.widgets.Shell; 
import org.eclipse.swt.widgets.Text; 
import org.eclipse.swt.widgets.ToolBar; 
public class SWTBrowser { 

Display display = new Display(); 
Shell shell = new Shell(display); 
Text textLocation; 
Browser browser; 
Label labelStatus; 
public SWTBrowser() { 

shell.setLayout(new GridLayout()); 
ToolBar toolBar = new ToolBar(shell, SWT.FLAT | SWT.RIGHT); 
final ToolBarManager manager = new ToolBarManager(toolBar); 
Composite compositeLocation = new Composite(shell, SWT.NULL); 
compositeLocation.setLayout(new GridLayout(3, false)); 
compositeLocation.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); 
Label labelAddress = new Label(compositeLocation, SWT.NULL); 
labelAddress.setText("Address"); 
textLocation = new Text(compositeLocation, SWT.SINGLE | SWT.BORDER); 
textLocation.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); 
Button buttonGo = new Button(compositeLocation, SWT.NULL); 
buttonGo.setImage(new Image(shell.getDisplay(), "C:/icons/web/go.gif")); 
browser = new Browser(shell, SWT.BORDER); 
browser.setLayoutData(new GridData(GridData.FILL_BOTH)); 
Composite compositeStatus = new Composite(shell, SWT.NULL); 
compositeStatus.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); 
compositeStatus.setLayout(new GridLayout(2, false)); 
labelStatus = new Label(compositeStatus, SWT.NULL); 
labelStatus.setText("Ready"); 
labelStatus.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); 
final ProgressBar progressBar = new ProgressBar(compositeStatus, SWT.SMOOTH); 
Listener openURLListener = new Listener() { 
public void handleEvent(Event event) { 
browser.setUrl(textLocation.getText()); 

}; 
buttonGo.addListener(SWT.Selection, openURLListener); 
textLocation.addListener(SWT.DefaultSelection, openURLListener); 
final Action actionBackward = 
new Action( 
"&Backword", 
ImageDescriptor.createFromFile( 
null, 
"C:/icons/web/backward.gif")) { 
public void run() { 
browser.back(); 

}; 
actionBackward.setEnabled(false); 
final Action actionForward = 
new Action( 
"&Forward", 
ImageDescriptor.createFromFile( 
null, 
"C:/icons/web/forward.gif")) { 
public void run() { 
browser.forward(); 

}; 
actionForward.setEnabled(false); 
Action actionStop = 
new Action( 
"&Stop", 
ImageDescriptor.createFromFile(null, "C:/icons/web/stop.gif")) { 
public void run() { 
browser.stop(); 

}; 
Action actionRefresh = 
new Action( 
"&Refresh", 
ImageDescriptor.createFromFile( 
null, 
"C:/icons/web/refresh.gif")) { 
public void run() { 
browser.refresh(); 

}; 
Action actionHome = 
new Action( 
"&Home", 
ImageDescriptor.createFromFile(null, "C:/icons/web/home.gif")) { 
public void run() { 
browser.setUrl("http://www.eclipse.org"); 

}; 
manager.add(actionBackward); 
manager.add(actionForward); 
manager.add(actionStop); 
manager.add(actionRefresh); 
manager.add(actionHome); 
manager.update(true); 
toolBar.pack(); 
browser.addLocationListener(new LocationListener() { 
public void changing(LocationEvent event) { 
textLocation.setText(event.location); 

public void changed(LocationEvent event) { 
actionBackward.setEnabled(browser.isBackEnabled()); 
actionForward.setEnabled(browser.isForwardEnabled()); 
manager.update(false); 

}); 
browser.addProgressListener(new ProgressListener() { 
public void changed(ProgressEvent event) { 
progressBar.setMaximum(event.total); 
progressBar.setSelection(event.current); 

public void completed(ProgressEvent event) { 
progressBar.setSelection(0); 

}); 
browser.addStatusTextListener(new StatusTextListener() { 
public void changed(StatusTextEvent event) { 
labelStatus.setText(event.text); 

}); 
browser.addTitleListener(new TitleListener() { 
public void changed(TitleEvent event) { 
shell.setText(event.title + " - powered by SWT"); 

}); 
initialize(display, browser); 
shell.setSize(500, 400); 
shell.open(); 
browser.setText("<html><body>" + "<h1>SWT & JFace </h1>" + "</body/html>"); 
while (!shell.isDisposed()) { 
if (!display.readAndDispatch()) { 
display.sleep(); 


display.dispose(); 

static void initialize(final Display display, Browser browser) { 
browser.addOpenWindowListener(new OpenWindowListener() { 
public void open(WindowEvent event) { 
Shell shell = new Shell(display); 
shell.setText("New Window"); 
shell.setLayout(new FillLayout()); 
Browser browser = new Browser(shell, SWT.NONE); 
initialize(display, browser); 
event.browser = browser; 

}); 
browser.addVisibilityWindowListener(new VisibilityWindowListener() { 
public void hide(WindowEvent event) { 
Browser browser = (Browser) event.widget; 
Shell shell = browser.getShell(); 
shell.setVisible(false); 

public void show(WindowEvent event) { 
Browser browser = (Browser) event.widget; 
Shell shell = browser.getShell(); 
if (event.location != null) 
shell.setLocation(event.location); 
if (event.size != null) { 
Point size = event.size; 
shell.setSize(shell.computeSize(size.x, size.y)); 

shell.open(); 

}); 
browser.addCloseWindowListener(new CloseWindowListener() { 
public void close(WindowEvent event) { 
Browser browser = (Browser) event.widget; 
Shell shell = browser.getShell(); 
shell.close(); 

}); 

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

}


Tags:

文章评论

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

<