这是一个用SWT做的Browser,现在有一个小问题,就是点击页面上的链接后,会弹出一个IE的窗口和自己做的浏览器窗口,而浏览器窗口页面什么都没有?请教下,怎么解决?
第二个问题,在新线程中,locationText(地址栏),怎么不起作用了?谢谢哈!!!
import org.eclipse.swt.SWT;
import org.eclipse.swt.browser.Browser;
import org.eclipse.swt.browser.CloseWindowListener;
import org.eclipse.swt.browser.TitleListener;
import org.eclipse.swt.browser.TitleEvent;
import org.eclipse.swt.browser.VisibilityWindowListener;
import org.eclipse.swt.browser.WindowEvent;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
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 Browser2
{
Display display;
private Shell shell;
private Composite com;
private Button forwardButton;
public Button backButton;
public Button stopButton;
public Button refreshButton;
public Text locationText;
public Button goButton;
public Label statusText;
public ProgressBar progressBar;
private Browser browser;
public String url;
public void setUrl(String string)
{
this.url=string;
}
public void createMenuBar(Shell shell)
{
}
public ToolBar createToolBar(Shell shell)
{
ToolBar toolBar=new ToolBar(shell,SWT.None);
ToolItem forwardItem=new ToolItem(toolBar,SWT.None);
forwardItem.setText("前进");
ToolItem backItem=new ToolItem(toolBar,SWT.None);
backItem.setText("后退");
ToolItem stopItem=new ToolItem(toolBar,SWT.None);
stopItem.setText("停止");
ToolItem refreshItem=new ToolItem(toolBar,SWT.None);
refreshItem.setText("刷新");
toolBar.pack();
return toolBar;
} public Composite createAddressBar(Shell shell)
{
Composite com =new Composite(shell,SWT.BORDER);
Label inputLabel=new Label(com,SWT.NONE);
inputLabel.setText("输入网址:");
inputLabel.setBounds(5, 10, 60, 20);
locationText=new Text(com,SWT.BORDER);
locationText.setBounds(70, 10, 300, 20);
goButton = new Button(com, SWT.PUSH);
goButton.setText("进入");
goButton.setBounds(500, 10, 50, 20);
goButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event)
{
Shell shell2 = createShell(display);
Browser browser = createBrowser(shell2);
locationText=locationText;
System.out.println("0010"+locationText.getText());
initialize(display,browser );
browser.setUrl(locationText.getText());
}
});
return com;
}
public Shell createShell(final Display display)
{
Shell shell=new Shell(display);
shell.setLayout(new FormLayout());
createMenuBar(shell);
createToolBar(shell);
Composite com =this.createAddressBar(shell);
com.setBounds(5, 10, 100, 20);
FormData data = new FormData();
data.top= new FormAttachment(shell,20);
data.left = new FormAttachment(0, 5);
// data.bottom = new FormAttachment(10, -5);
data.right = new FormAttachment(100, -5);
com.setLayoutData(data);
return shell;
}
public Browser createBrowser(Shell shell)
{
Browser browser = new Browser(shell, SWT.NONE);
FormData formData=new FormData();
formData.top= new FormAttachment(com,50);
formData.left = new FormAttachment(0, 5);
formData.bottom = new FormAttachment(100, -5);
formData.right = new FormAttachment(100, -5);
browser.setLayoutData(formData);
this.browser=browser;
return browser;
}
public void initialize(final Display display,Browser browser )
{
browser.addTitleListener(new org.eclipse.swt.browser.TitleListener() {
public void changed(org.eclipse.swt.browser.TitleEvent event) {
Browser browser = (Browser)event.widget;
Shell shell = browser.getShell();
shell.setText(event.title);
}
});
browser.addOpenWindowListener(new org.eclipse.swt.browser.OpenWindowListener() {
public void open( final org.eclipse.swt.browser.WindowEvent event) {
new Thread(){
public void run()
{
Display display=new Display();
Shell shell=createShell(display);
Browser browser = createBrowser(shell);
initialize(display,browser);
event.browser = browser;
if (event.location != null) shell.setLocation(event.location);
if (event.size != null) {
Point size = event.size;
shell.setSize(shell.computeSize(size.x, size.y));
}
if (event.addressBar || event.menuBar || event.statusBar || event.toolBar) {
// Create widgets for the address bar, menu bar, status bar and/or tool bar
// leave enough space in the Shell to accommodate a Browser of the size
// given by event.size
}
shell.open();
while (!shell.isDisposed())
{
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}.start();
}
});
browser.addVisibilityWindowListener(new org.eclipse.swt.browser.VisibilityWindowListener() {
public void hide(WindowEvent event) {
Browser browser = (Browser)event.widget;
Shell shell = browser.getShell();
shell.setVisible(false);
}
public void show(final WindowEvent event) {
Browser browser = (Browser)event.widget;
Shell shell = browser.getShell();
event.browser=browser;
if (event.location != null) shell.setLocation(event.location);
if (event.size != null) {
Point size = event.size;
shell.setSize(shell.computeSize(size.x, size.y));
}
if (event.addressBar || event.menuBar || event.statusBar || event.toolBar) {
// Create widgets for the address bar, menu bar, status bar and/or tool bar
// leave enough space in the Shell to accommodate a Browser of the size
// given by event.size
}
shell.open();
}
});
browser.addCloseWindowListener(new CloseWindowListener() {
public void close(WindowEvent event) {
Browser browser = (Browser)event.widget;
Shell shell = browser.getShell();
shell.close();
}
});
//为浏览器注册地址改变事件
browser.addLocationListener(new org.eclipse.swt.browser.LocationListener() {
public void changing(org.eclipse.swt.browser.LocationEvent event) {
Browser browser = (Browser)event.widget;
org.eclipse.swt.widgets.Shell shell = browser.getShell();
Composite composite=createAddressBar(shell);
Text locationText=new Text(composite,SWT.BORDER);
locationText.setBounds(70, 10, 300, 20);
locationText.setText(event.location);
}
public void changed(org.eclipse.swt.browser.LocationEvent e) {
}
});
}
public static void main(String args[])
{
Browser1 browser1=new Browser1();
Display display=new Display();
Shell shell=browser1.createShell(display);
Browser browser = browser1.createBrowser(shell);
browser1.initialize(display,browser);
browser.setUrl("www.hao123.com");
shell.open();
while (!shell.isDisposed())
{
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}
第二个问题,在新线程中,locationText(地址栏),怎么不起作用了?谢谢哈!!!
import org.eclipse.swt.SWT;
import org.eclipse.swt.browser.Browser;
import org.eclipse.swt.browser.CloseWindowListener;
import org.eclipse.swt.browser.TitleListener;
import org.eclipse.swt.browser.TitleEvent;
import org.eclipse.swt.browser.VisibilityWindowListener;
import org.eclipse.swt.browser.WindowEvent;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
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 Browser2
{
Display display;
private Shell shell;
private Composite com;
private Button forwardButton;
public Button backButton;
public Button stopButton;
public Button refreshButton;
public Text locationText;
public Button goButton;
public Label statusText;
public ProgressBar progressBar;
private Browser browser;
public String url;
public void setUrl(String string)
{
this.url=string;
}
public void createMenuBar(Shell shell)
{
}
public ToolBar createToolBar(Shell shell)
{
ToolBar toolBar=new ToolBar(shell,SWT.None);
ToolItem forwardItem=new ToolItem(toolBar,SWT.None);
forwardItem.setText("前进");
ToolItem backItem=new ToolItem(toolBar,SWT.None);
backItem.setText("后退");
ToolItem stopItem=new ToolItem(toolBar,SWT.None);
stopItem.setText("停止");
ToolItem refreshItem=new ToolItem(toolBar,SWT.None);
refreshItem.setText("刷新");
toolBar.pack();
return toolBar;
} public Composite createAddressBar(Shell shell)
{
Composite com =new Composite(shell,SWT.BORDER);
Label inputLabel=new Label(com,SWT.NONE);
inputLabel.setText("输入网址:");
inputLabel.setBounds(5, 10, 60, 20);
locationText=new Text(com,SWT.BORDER);
locationText.setBounds(70, 10, 300, 20);
goButton = new Button(com, SWT.PUSH);
goButton.setText("进入");
goButton.setBounds(500, 10, 50, 20);
goButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event)
{
Shell shell2 = createShell(display);
Browser browser = createBrowser(shell2);
locationText=locationText;
System.out.println("0010"+locationText.getText());
initialize(display,browser );
browser.setUrl(locationText.getText());
}
});
return com;
}
public Shell createShell(final Display display)
{
Shell shell=new Shell(display);
shell.setLayout(new FormLayout());
createMenuBar(shell);
createToolBar(shell);
Composite com =this.createAddressBar(shell);
com.setBounds(5, 10, 100, 20);
FormData data = new FormData();
data.top= new FormAttachment(shell,20);
data.left = new FormAttachment(0, 5);
// data.bottom = new FormAttachment(10, -5);
data.right = new FormAttachment(100, -5);
com.setLayoutData(data);
return shell;
}
public Browser createBrowser(Shell shell)
{
Browser browser = new Browser(shell, SWT.NONE);
FormData formData=new FormData();
formData.top= new FormAttachment(com,50);
formData.left = new FormAttachment(0, 5);
formData.bottom = new FormAttachment(100, -5);
formData.right = new FormAttachment(100, -5);
browser.setLayoutData(formData);
this.browser=browser;
return browser;
}
public void initialize(final Display display,Browser browser )
{
browser.addTitleListener(new org.eclipse.swt.browser.TitleListener() {
public void changed(org.eclipse.swt.browser.TitleEvent event) {
Browser browser = (Browser)event.widget;
Shell shell = browser.getShell();
shell.setText(event.title);
}
});
browser.addOpenWindowListener(new org.eclipse.swt.browser.OpenWindowListener() {
public void open( final org.eclipse.swt.browser.WindowEvent event) {
new Thread(){
public void run()
{
Display display=new Display();
Shell shell=createShell(display);
Browser browser = createBrowser(shell);
initialize(display,browser);
event.browser = browser;
if (event.location != null) shell.setLocation(event.location);
if (event.size != null) {
Point size = event.size;
shell.setSize(shell.computeSize(size.x, size.y));
}
if (event.addressBar || event.menuBar || event.statusBar || event.toolBar) {
// Create widgets for the address bar, menu bar, status bar and/or tool bar
// leave enough space in the Shell to accommodate a Browser of the size
// given by event.size
}
shell.open();
while (!shell.isDisposed())
{
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}.start();
}
});
browser.addVisibilityWindowListener(new org.eclipse.swt.browser.VisibilityWindowListener() {
public void hide(WindowEvent event) {
Browser browser = (Browser)event.widget;
Shell shell = browser.getShell();
shell.setVisible(false);
}
public void show(final WindowEvent event) {
Browser browser = (Browser)event.widget;
Shell shell = browser.getShell();
event.browser=browser;
if (event.location != null) shell.setLocation(event.location);
if (event.size != null) {
Point size = event.size;
shell.setSize(shell.computeSize(size.x, size.y));
}
if (event.addressBar || event.menuBar || event.statusBar || event.toolBar) {
// Create widgets for the address bar, menu bar, status bar and/or tool bar
// leave enough space in the Shell to accommodate a Browser of the size
// given by event.size
}
shell.open();
}
});
browser.addCloseWindowListener(new CloseWindowListener() {
public void close(WindowEvent event) {
Browser browser = (Browser)event.widget;
Shell shell = browser.getShell();
shell.close();
}
});
//为浏览器注册地址改变事件
browser.addLocationListener(new org.eclipse.swt.browser.LocationListener() {
public void changing(org.eclipse.swt.browser.LocationEvent event) {
Browser browser = (Browser)event.widget;
org.eclipse.swt.widgets.Shell shell = browser.getShell();
Composite composite=createAddressBar(shell);
Text locationText=new Text(composite,SWT.BORDER);
locationText.setBounds(70, 10, 300, 20);
locationText.setText(event.location);
}
public void changed(org.eclipse.swt.browser.LocationEvent e) {
}
});
}
public static void main(String args[])
{
Browser1 browser1=new Browser1();
Display display=new Display();
Shell shell=browser1.createShell(display);
Browser browser = browser1.createBrowser(shell);
browser1.initialize(display,browser);
browser.setUrl("www.hao123.com");
shell.open();
while (!shell.isDisposed())
{
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}
moshangmoxia
谢谢哈!