?? webbrowser.java
字號:
/**
* @(#)WebBrowser.java
*
*
* @author
* @version 1.00 2007/4/28
*/
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.event.MouseListener;
import java.awt.*;
import javax.swing.*;
import javax.swing.text.*;
import java.awt.event.*;
import javax.swing.event.*;
import javax.swing.border.*;
import javax.swing.filechooser.FileFilter;
import javax.swing.filechooser.FileView;
import java.io.*;
import java.net.*;
import java.util.*;
public class WebBrowser extends JFrame implements HyperlinkListener,ActionListener{
/**
* Creates a new instance of <code>WebBrowser</code>.
*/
//.......
//.........
//建立主件
JToolBar bar =new JToolBar();//工具欄
JTextField jurl=new JTextField(60);//地址欄
JTextField jurlSource=new JTextField(60);//地址欄
JEditorPane2 jEditorPane1=new JEditorPane2();//網頁框
JScrollPane scrollPane=new JScrollPane(jEditorPane1);//滾動條
JFileChooser chooser=new JFileChooser();
JFileChooser chooser1=new JFileChooser();//選擇文件
String htmlSource;
JWindow window=new JWindow(WebBrowser.this);//使用指定的所有者框架創建窗口
JButton button2=new JButton("go back");
Toolkit toolkit=Toolkit.getDefaultToolkit();//獲取默認工具包
JMenuBar jMenuBar1=new JMenuBar();//建立菜單欄
JMenu fileMenu=new JMenu("File(F)");//建立菜單組
JMenuItem saveAsItem=new JMenuItem("save As(S)");
JMenuItem exitItem=new JMenuItem("exit(E)");
JMenu bookMarkMenu=new JMenu("bookMark(B)");//建立菜單組
JMenuItem saveBookMarkItem=new JMenuItem("save bookmark(K)");
JMenu editMenu=new JMenu("Edit(E)");//建立菜單組
JMenuItem backItem=new JMenuItem("Back(Z)");
JMenuItem forwardItem=new JMenuItem("Forward(P)");
JMenu viewMenu=new JMenu("View(V)");//建立菜單組
JMenuItem fullscreenItem=new JMenuItem("fullscreen(U)");
JMenuItem sourceItem=new JMenuItem("source(C)");
JMenuItem reloadItem=new JMenuItem("reload(R)");
JToolBar toolBar=new JToolBar();
JButton picSave=new JButton("save as");
JButton picBack=new JButton("back");
JButton picForward=new JButton("forward");
JButton picView=new JButton("source");
JButton picExit=new JButton("exit");
//建立工具欄
JLabel label=new JLabel("Adress");
JButton button=new JButton("GO");
JLabel labelSource=new JLabel("View Source");
JButton buttonSource=new JButton("View");
Box adress=Box.createHorizontalBox(); //創建一個從左到右顯示其組件
Box adressSource=Box.createHorizontalBox();
private ArrayList history=new ArrayList();
private int historyIndex;
public WebBrowser() {
setTitle("network by liujia");
setResizable(false);//設置此 frame 是否可由用戶調整大小
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jEditorPane1.addHyperlinkListener(this);//事件監聽
bookMarkMenu.setMnemonic('B');
saveBookMarkItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_K,InputEvent.CTRL_MASK));
fileMenu.setMnemonic('F');
saveAsItem.setMnemonic('S');
saveAsItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK));
exitItem.setMnemonic('P');
exitItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E,InputEvent.CTRL_MASK));
//設置熱鍵
fileMenu.add(saveAsItem);
fileMenu.addSeparator();
fileMenu.add(exitItem);
backItem.setMnemonic('B');
backItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z,InputEvent.CTRL_MASK));
forwardItem.setMnemonic('D');
forwardItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P,InputEvent.CTRL_MASK));
editMenu.setMnemonic('E');
editMenu.add(backItem);
editMenu.addSeparator();
editMenu.add(forwardItem);
viewMenu.setMnemonic('V');
fullscreenItem.setMnemonic('U');
fullscreenItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_U,InputEvent.CTRL_MASK));
sourceItem.setMnemonic('C');
sourceItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK));
reloadItem.setMnemonic('R');
reloadItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_R,InputEvent.CTRL_MASK));
Container contentPane=getContentPane();
scrollPane.setPreferredSize(new Dimension(100,500));
contentPane.add(scrollPane,BorderLayout.SOUTH);
adressSource.add(labelSource);
adressSource.add(jurlSource);
adressSource.add(buttonSource);
toolBar.add(picSave);
toolBar.addSeparator();
toolBar.add(picBack);
toolBar.addSeparator();
toolBar.add(picForward);
toolBar.addSeparator();
toolBar.add(picView);
toolBar.addSeparator();
toolBar.add(picExit);
toolBar.addSeparator();
toolBar.add(picExit);
toolBar.addSeparator();
toolBar.add(adressSource);
contentPane.add(bar,BorderLayout.CENTER);
contentPane.add(toolBar,BorderLayout.NORTH);
viewMenu.add(fullscreenItem);
viewMenu.addSeparator();
viewMenu.add(sourceItem);
viewMenu.addSeparator();
viewMenu.add(reloadItem);
bookMarkMenu.add(saveBookMarkItem);
jMenuBar1.add(fileMenu);
jMenuBar1.add(editMenu);
jMenuBar1.add(viewMenu);
jMenuBar1.add(bookMarkMenu);
setJMenuBar(jMenuBar1);
adress.add(label);
adress.add(jurl);
adress.add(button);
bar.add(adress);
saveAsItem.addActionListener(this);
picSave.addActionListener(this);
exitItem.addActionListener(this);
picExit.addActionListener(this);
backItem.addActionListener(this);
picBack.addActionListener(this);
forwardItem.addActionListener(this);
picForward.addActionListener(this);
fullscreenItem.addActionListener(this);
sourceItem.addActionListener(this);
picView.addActionListener(this);
reloadItem.addActionListener(this);
button.addActionListener(this);
buttonSource.addActionListener(this);
jurl.addActionListener(this);
jurlSource.addActionListener(this);
saveBookMarkItem.addActionListener(this);
}
//..................
//.....
public void actionPerformed(ActionEvent e)
{
String url="";
if(e.getSource()==button){ //按down.................................................
url=jurl.getText();
if(url.length()>0&&url.startsWith("http://")){
try{
jEditorPane1.setPage(url);
history.add(url);
historyIndex=history.size()-1;// 返回此列表中的元素數
jEditorPane1.setEditable(false);
jEditorPane1.revalidate();
}
catch(Exception ex){
JOptionPane.showMessageDialog(WebBrowser.this,"don't open the search page","network",JOptionPane.ERROR_MESSAGE);
}
}
else if(url.length()>0&&!url.startsWith("http://")){
url="http://"+url;
try{
jEditorPane1.setPage(url);
history.add(url);
historyIndex=history.size()-1;// 返回此列表中的元素數
jEditorPane1.setEditable(false);
jEditorPane1.revalidate();
}
catch(Exception ex){
JOptionPane.showMessageDialog(WebBrowser.this,"don't open the search page","network by liujia",JOptionPane.ERROR_MESSAGE);
}
}
else if(url.length()==0){
JOptionPane.showMessageDialog(WebBrowser.this,"don't open the search page","network by liujia",JOptionPane.ERROR_MESSAGE);
}
}
//............按回車
else if(e.getSource()==jurl){
url=jurl.getText();
if(url.length()>0&&url.startsWith("http://")){
try{
jEditorPane1.setPage(url);
history.add(url);
historyIndex=history.size()-1;// 返回此列表中的元素數
jEditorPane1.setEditable(false);
jEditorPane1.revalidate();
jurl.setMaximumSize(jurl.getPreferredSize());
}
catch(Exception ex){
JOptionPane.showMessageDialog(WebBrowser.this,"don't open the search page","network by liujia",JOptionPane.ERROR_MESSAGE);
}
}
else if(url.length()>0&&!url.startsWith("http://")){
url="http://"+url;
try{
jEditorPane1.setPage(url);
history.add(url);
historyIndex=history.size()-1;// 返回此列表中的元素數
jEditorPane1.setEditable(false);
jEditorPane1.revalidate();
}
catch(Exception ex){
JOptionPane.showMessageDialog(WebBrowser.this,"don't open the search page","network by liujia",JOptionPane.ERROR_MESSAGE);
}
}
else if(url.length()==0){
JOptionPane.showMessageDialog(WebBrowser.this,"don't open the search page","network by liujia",JOptionPane.ERROR_MESSAGE);
}
}
//..................................另存為
else if(e.getSource()==picSave||e.getSource()==saveAsItem){
url=jurl.getText().trim();//去掉字符串頭和尾的空格
if(url.length()>0&&!url.startsWith("http://")){
url="http://"+url;
}
if(!url.equals("")){
saveFile(url);
}
else{
JOptionPane.showMessageDialog(WebBrowser.this,"please input url's adress","network by lijia",JOptionPane.ERROR_MESSAGE);
}
}
//exit...
else if(e.getSource()==exitItem||e.getSource()==picExit){
System.exit(0);
}
//back.
else if(e.getSource()==backItem||e.getSource()==picBack){
historyIndex--;
if(historyIndex<0)
historyIndex=0;
url=jurl.getText();
try{
url=(String)history.get(historyIndex);
jEditorPane1.setPage(url);
jurl.setText(url.toString());
jEditorPane1.setEditable(false);
jEditorPane1.revalidate();
/**
*public void revalidate()支持推遲的自動布局。
調用 invalidate 并將此組件的 validateRoot 添加到需要驗證的組件列表中。調度完當前所有未完成的事件后進行驗證。換句話說,調用此方法后,將驗證瀏覽此組件的包含層次結構時找到的第一個 validateRoot(如果有)。默認情況下,JRootPane、JScrollPane 和 JTextField 從 isValidateRoot 返回 true。
當屬性值更改,從而影響此組件的大小、位置或內部布局時,就對此組件自動調用此方法。這種自動更新不同于 AWT,因為通常來說,程序不再需要調用 validate 來獲得要更新的 GUI 的內容。
*
**/
}
catch(Exception ex){
}
}
//forworad.....
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -