SWT Browser(內嵌瀏覽器)

來源:互聯網
上載者:User

import java.util.ArrayList;<br />import java.util.List;</p><p>import org.apache.commons.lang.StringUtils;<br />import org.eclipse.swt.SWT;<br />import org.eclipse.swt.browser.Browser;<br />import org.eclipse.swt.browser.CloseWindowListener;<br />import org.eclipse.swt.browser.LocationAdapter;<br />import org.eclipse.swt.browser.LocationEvent;<br />import org.eclipse.swt.browser.OpenWindowListener;<br />import org.eclipse.swt.browser.ProgressEvent;<br />import org.eclipse.swt.browser.ProgressListener;<br />import org.eclipse.swt.browser.StatusTextEvent;<br />import org.eclipse.swt.browser.StatusTextListener;<br />import org.eclipse.swt.browser.TitleEvent;<br />import org.eclipse.swt.browser.TitleListener;<br />import org.eclipse.swt.browser.WindowEvent;<br />import org.eclipse.swt.custom.CLabel;<br />import org.eclipse.swt.custom.CTabFolder;<br />import org.eclipse.swt.custom.CTabItem;<br />import org.eclipse.swt.events.KeyAdapter;<br />import org.eclipse.swt.events.KeyEvent;<br />import org.eclipse.swt.events.MouseAdapter;<br />import org.eclipse.swt.events.MouseEvent;<br />import org.eclipse.swt.events.SelectionAdapter;<br />import org.eclipse.swt.events.SelectionEvent;<br />import org.eclipse.swt.graphics.Point;<br />import org.eclipse.swt.layout.FormAttachment;<br />import org.eclipse.swt.layout.FormData;<br />import org.eclipse.swt.layout.FormLayout;<br />import org.eclipse.swt.layout.GridData;<br />import org.eclipse.swt.layout.GridLayout;<br />import org.eclipse.swt.widgets.Button;<br />import org.eclipse.swt.widgets.Combo;<br />import org.eclipse.swt.widgets.Composite;<br />import org.eclipse.swt.widgets.Display;<br />import org.eclipse.swt.widgets.Label;<br />import org.eclipse.swt.widgets.ProgressBar;<br />import org.eclipse.ui.forms.widgets.FormToolkit;</p><p>import com.sinosoft.media360.server.domain.News_Document;<br />import com.sinosoft.media360.util.NewActionMenu;<br />import com.swtdesigner.SWTResourceManager;</p><p>public class BrowserComposite extends Composite {<br />private static final String DEFAULT_BLANK_URL = "about:blank";<br />private static final String BROWSER_DATA_STATUS = "status";<br />private List<String> invalidTitleList = new ArrayList<String>();</p><p>private final static FormToolkit toolkit = new FormToolkit(Display.getCurrent());<br />private static Combo combUrl;<br />private CTabFolder browserFolder;<br />private CTabItem newTab;<br />private CLabel statusLabel;<br />private ProgressBar progressBar;</p><p>{<br />invalidTitleList.add(DEFAULT_BLANK_URL);<br />invalidTitleList.add("503 Service Unavailable");<br />invalidTitleList.add("導航已取消");<br />invalidTitleList.add("Internet Explorer 無法顯示該網頁");<br />invalidTitleList.add("無法顯示此頁");<br />}</p><p>/**<br /> * Create the composite<br /> *<br /> * @param parent<br /> * @param style<br /> */<br />public BrowserComposite(Composite parent, int style) {<br />super(parent, style);<br />setLayout(new FormLayout());<br />toolkit.adapt(this);<br />toolkit.paintBordersFor(this);</p><p>final Composite composite = toolkit.createComposite(this, SWT.NO_TRIM | SWT.RESIZE);<br />final GridLayout gridLayout = new GridLayout();<br />gridLayout.horizontalSpacing = 2;<br />gridLayout.numColumns = 7;<br />composite.setLayout(gridLayout);<br />final FormData fd_composite = new FormData();<br />fd_composite.right = new FormAttachment(100, -5);<br />fd_composite.bottom = new FormAttachment(0, 40);<br />fd_composite.top = new FormAttachment(0, 0);<br />fd_composite.left = new FormAttachment(0, 5);<br />composite.setLayoutData(fd_composite);<br />toolkit.paintBordersFor(composite);</p><p>final Button newBt = new Button(composite, SWT.NONE);<br />newBt.setToolTipText("建立瀏覽器");<br />newBt.setImage(SWTResourceManager.getImage(BrowserComposite.class, "/tool_new.gif"));<br />newBt.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false));<br />// 開啟新的瀏覽器視窗<br />newBt.addSelectionListener(new SelectionAdapter() {<br />public void widgetSelected(final SelectionEvent e) {<br />openNewBrowserTab();<br />}<br />});<br />toolkit.adapt(newBt, true, true);</p><p>final Label label_1 = new Label(composite, SWT.SEPARATOR);<br />label_1.setLayoutData(new GridData(SWT.DEFAULT, 35));<br />toolkit.adapt(label_1, true, true);</p><p>ButtonSelectionListener listener = new ButtonSelectionListener();</p><p>final Button backBt = new Button(composite, SWT.NONE);<br />backBt.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false));<br />backBt.setImage(SWTResourceManager.getImage(BrowserComposite.class, "/back.gif"));<br />backBt.addSelectionListener(listener);<br />backBt.setToolTipText("後退");<br />toolkit.adapt(backBt, true, true);</p><p>final Button forwardBt = new Button(composite, SWT.NONE);<br />forwardBt.setImage(SWTResourceManager.getImage(BrowserComposite.class, "/forward.gif"));<br />forwardBt.addSelectionListener(listener);<br />forwardBt.setToolTipText("前進");<br />forwardBt.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false));<br />toolkit.adapt(forwardBt, true, true);</p><p>combUrl = new Combo(composite, SWT.BORDER);<br />combUrl.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false));<br />combUrl.setVisibleItemCount(25);<br />combUrl.addSelectionListener(new SelectionAdapter() {<br />@Override<br />public void widgetSelected(SelectionEvent e) {<br />openEnteredUrl(false);<br />}<br />});<br />combUrl.addKeyListener(new KeyAdapter() {<br />// 按斷行符號或數字鍵台的Enter則瀏覽內容<br />public void keyPressed(final KeyEvent e) {<br />if(e.keyCode == SWT.CR || e.keyCode ==SWT.KEYPAD_CR){<br />openEnteredUrl(true);<br />}<br />}<br />});<br />toolkit.adapt(combUrl, true, true);</p><p>final Button refreshBt = new Button(composite, SWT.NONE);<br />refreshBt.setImage(SWTResourceManager.getImage(BrowserComposite.class, "/tool_refresh.gif"));<br />refreshBt.addSelectionListener(listener);<br />refreshBt.setToolTipText("重新整理");<br />refreshBt.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false));<br />toolkit.adapt(refreshBt, true, true);</p><p>final Button stopBt = new Button(composite, SWT.NONE);<br />stopBt.setImage(SWTResourceManager.getImage(BrowserComposite.class, "/stop.gif"));<br />stopBt.addSelectionListener(listener);<br />stopBt.setToolTipText("停止");<br />stopBt.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false));<br />toolkit.adapt(stopBt, true, true);</p><p>browserFolder = new CTabFolder(this, SWT.BORDER);<br />browserFolder.setMinimumCharacters(8);<br />browserFolder.setSelectionBackground(SWTResourceManager.getColor(227,238,251));<br />browserFolder.setTabHeight(25);<br />browserFolder.addSelectionListener(new SelectionAdapter() {<br />public void widgetSelected(final SelectionEvent e) {<br />if(e.item == newTab){<br />openNewBrowserTab();//新選項卡<br />}else{<br />Browser browser = (Browser) ((CTabItem) e.item).getControl();<br />if (browser != null ) {<br />String url = browser.getUrl();<br />if("".equals(url)){<br />url = DEFAULT_BLANK_URL;<br />}<br />combUrl.setText(url);<br />if (url.equals(DEFAULT_BLANK_URL)) {<br />combUrl.setFocus();<br />}</p><p>String status = (String) browser.getData(BROWSER_DATA_STATUS);<br />if (status != null) {<br />statusLabel.setText(status);<br />}</p><p>progressBar.setVisible(false);<br />}<br />}<br />}<br />});</p><p>browserFolder.addMouseListener(new MouseAdapter() {<br />// 雙擊關閉選中的瀏覽器視窗<br />public void mouseDoubleClick(final MouseEvent e) {<br />CTabItem tab = browserFolder.getItem(new Point(e.x, e.y));<br />if (tab != null && tab != newTab) {<br />tab.dispose();<br />if (browserFolder.getItemCount() == 1) {<br />openNewBrowserTab();<br />}<br />} else {<br />openNewBrowserTab();<br />}<br />}<br />});<br />final FormData fd_tabFolder = new FormData();<br />fd_tabFolder.left = new FormAttachment(composite, 0, SWT.LEFT);<br />fd_tabFolder.right = new FormAttachment(composite, 0, SWT.RIGHT);<br />fd_tabFolder.top = new FormAttachment(composite, 5, SWT.BOTTOM);<br />browserFolder.setLayoutData(fd_tabFolder);<br />toolkit.adapt(browserFolder, true, true);</p><p>newTab = new CTabItem(browserFolder, SWT.NONE);<br />//newTab.setText(" ");<br />newTab.setImage(SWTResourceManager.getImage(BrowserComposite.class, "/newTab.jpg"));<br />newTab.setToolTipText("新選項卡");</p><p>statusLabel = new CLabel(this, SWT.NONE);<br />fd_tabFolder.bottom = new FormAttachment(statusLabel, -5, SWT.TOP);<br />final FormData fd_statusLabel = new FormData();<br />fd_statusLabel.left = new FormAttachment(browserFolder, 0, SWT.LEFT);<br />fd_statusLabel.right = new FormAttachment(100, -210);<br />fd_statusLabel.bottom = new FormAttachment(100, -5);<br />statusLabel.setLayoutData(fd_statusLabel);<br />toolkit.adapt(statusLabel, true, true);<br />statusLabel.setText("狀態列");</p><p>progressBar = new ProgressBar(this, SWT.NONE);<br />final FormData fd_progressBar = new FormData();<br />fd_progressBar.bottom = new FormAttachment(statusLabel, 0, SWT.BOTTOM);<br />fd_progressBar.left = new FormAttachment(100, -200);<br />fd_progressBar.right = new FormAttachment(browserFolder, 0, SWT.RIGHT);<br />progressBar.setLayoutData(fd_progressBar);<br />toolkit.adapt(progressBar, true, true);</p><p>openNewBrowserTab();<br />}</p><p>private void addUrlToCombo(String url){<br />if(!DEFAULT_BLANK_URL.equals(url)){<br />int index = combUrl.indexOf(url);<br />if(index > 0){<br />combUrl.remove(index);<br />}<br />if(index != 0){<br />combUrl.add(url, 0);<br />}<br />combUrl.select(0);<br />if(combUrl.getItemCount() > 50){<br />combUrl.remove(50, combUrl.getItemCount()-1);<br />}<br />}<br />}</p><p>/**<br /> * 開啟網頁<br /> * @param newTabItem 是否在新選項卡中開啟<br /> */<br />private void openEnteredUrl(boolean newTabItem) {<br />String url = combUrl.getText();<br />if (!("".equals(url) || DEFAULT_BLANK_URL.equals(url))) {<br />Browser browser = null;<br />CTabItem tabItem = browserFolder.getSelection();<br />String itemTitle = tabItem.getToolTipText();<br />if(newTabItem && !invalidTitleList.contains(itemTitle)){<br />browser = openNewBrowserTab();<br />}else{<br />browser = (Browser) tabItem.getControl();<br />}<br />browser.setUrl(url);<br />CTabItem item = ((CTabFolder)browser.getParent()).getSelection();<br />item.setText(StringUtils.abbreviate(url, 20));<br />item.setToolTipText(url);<br />addUrlToCombo(url);<br />}<br />}</p><p>/**<br /> * 開啟一個新選項卡<br /> * @return 新選項卡中的Broser對象<br /> */<br />private Browser openNewBrowserTab() {<br />final CTabItem browserTab = new CTabItem(browserFolder, SWT.NONE, browserFolder.getItemCount()-1);<br />browserTab.setShowClose(true);<br />browserTab.setImage(SWTResourceManager.getImage(BrowserComposite.class, "/ie.gif"));<br />browserFolder.setSelection(browserTab);</p><p>final Browser browser = new Browser(browserFolder, SWT.NONE);<br />initialize(browser);<br />browserTab.setText(DEFAULT_BLANK_URL);<br />browserTab.setToolTipText(DEFAULT_BLANK_URL);<br />combUrl.setText(DEFAULT_BLANK_URL);<br />combUrl.setFocus();<br />toolkit.adapt(browser, true, true);<br />browserTab.setControl(browser);<br />return browser;<br />}</p><p>/** register WindowEvent listeners */<br />private void initialize(final Browser browser) {<br />browser.addOpenWindowListener(new OpenWindowListener() {//開啟一個新的瀏覽器視窗事件<br />public void open(WindowEvent event) {<br />event.browser = openNewBrowserTab();<br />}<br />});</p><p>browser.addCloseWindowListener(new CloseWindowListener() {//關閉瀏覽器事件<br />public void close(WindowEvent event) {<br />Browser browser = (Browser) event.widget;<br />((CTabFolder)browser.getParent()).getSelection().dispose();<br />}<br />});<br />browser.addProgressListener(new ProgressListener() {//裝載網頁事件<br />public void changed(ProgressEvent event) {<br />if (browserFolder.getSelection().getControl() == browser) {<br />if (!progressBar.isVisible()) {<br />progressBar.setVisible(true);<br />}<br />if (event.current < event.total) {<br />progressBar.setMaximum(event.total);<br />progressBar.setSelection(event.current);<br />} else {<br />progressBar.setVisible(false);<br />}<br />}<br />}</p><p>public void completed(ProgressEvent event) {<br />if (browserFolder.getSelection().getControl() == browser)<br />progressBar.setVisible(false);<br />}<br />});<br />browser.addStatusTextListener(new StatusTextListener() {//狀態列改變事件<br />public void changed(StatusTextEvent event) {<br />browser.setData(BROWSER_DATA_STATUS, event.text);<br />if (browserFolder.getSelection().getControl() == browser) {<br />statusLabel.setText(event.text);<br />}<br />}<br />});<br />browser.addTitleListener(new TitleListener() {//標題改變事件<br />public void changed(TitleEvent event) {<br />CTabItem item = ((CTabFolder)browser.getParent()).getSelection();<br />item.setText(StringUtils.abbreviate(event.title, 20));<br />item.setToolTipText(event.title);<br />}<br />});</p><p>browser.addLocationListener(new LocationAdapter() { //為瀏覽器登入位址改變事件<br />@Override<br />public void changed(LocationEvent e) {<br />if(e.top){<br />addUrlToCombo(e.location);<br />}<br />}<br />});</p><p>News_Document doc = new News_Document();<br />new NewActionMenu(browser, doc, true);//設定右鍵<br />}</p><p>class ButtonSelectionListener extends SelectionAdapter{<br />@Override<br />public void widgetSelected(SelectionEvent e) {<br />String operationName = ((Button)e.widget).getToolTipText();<br />Browser browser = (Browser)browserFolder.getSelection().getControl();<br />if(browser != null){<br />if("後退".equals(operationName)){<br />if(browser.isBackEnabled()){<br />browser.back();<br />}<br />}else if("前進".equals(operationName)){<br />if(browser.isForwardEnabled()){<br />browser.forward();<br />}<br />}else if("重新整理".equals(operationName)){<br />browser.refresh();<br />}else if("停止".equals(operationName)){<br />browser.stop();<br />}<br />}<br />}<br />}<br />}<br />

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.