package org.fanhongtao.tools.misc; import java.awt.BorderLayout; import java.awt.Container; import java.awt.GridLayout; import java.awt.Toolkit; import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.ClipboardOwner; import java.awt.datatransfer.StringSelection; import java.awt.datatransfer.Transferable; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import org.fanhongtao.swing.BaseFrame; /** * 因为GFW的存在,在使用Google搜索时,经常会遇到搜索结果无法打开。<br> * 通过本工具,可以将Google的URL链接转换成原始的URL链接。 * * @author Fan Hongtao <fanhongtao@gmail.com> */ public class GoogleUrlTranslater extends BaseFrame implements ClipboardOwner { private static final int DEFAULT_WIDTH = 400; private static final int DEFAULT_HEIGHT = 400; private JTextArea googleArea = null; private JTextArea originalArea = null; private Clipboard clipboard; @Override protected void createContents(JFrame frame) { frame.setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); Container panel = frame.getContentPane(); panel.setLayout(new BorderLayout()); panel.add(getTextPanel(), BorderLayout.CENTER); panel.add(getButtonPanel(), BorderLayout.SOUTH); clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); } private JPanel getTextPanel() { JPanel parent = new JPanel(); parent.setLayout(new GridLayout(0, 1)); JPanel textPanel = new JPanel(); parent.add(textPanel); textPanel.setLayout(new BorderLayout()); JLabel label = new JLabel(); textPanel.add(label, BorderLayout.NORTH); label.setText("Google URL"); JScrollPane panel = new JScrollPane(); textPanel.add(panel); googleArea = new JTextArea(); googleArea.setToolTipText("Input Google URL"); panel.add(googleArea); panel.setViewportView(googleArea); JPanel detailPanel = new JPanel(); parent.add(detailPanel); detailPanel.setLayout(new BorderLayout()); label = new JLabel(); detailPanel.add(label, BorderLayout.NORTH); label.setText("Original URL"); panel = new JScrollPane(); detailPanel.add(panel); originalArea = new JTextArea(); originalArea.setEditable(false); originalArea.setToolTipText("Original URL, just copy & paste this URL to browser."); panel.add(originalArea); panel.setViewportView(originalArea); return parent; } private JPanel getButtonPanel() { JPanel panel = new JPanel(); JButton button = new JButton("Translater"); panel.add(button); button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { translate(); } }); button = new JButton("Clipboard"); panel.add(button); button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { copyToClipboard(); } }); return panel; } private void translate() { String googleUrl = googleArea.getText(); int idx = googleUrl.indexOf("url=http"); String originalUrl = googleUrl.substring(idx + 4); originalUrl = originalUrl.replace("%3A", ":"); originalUrl = originalUrl.replace("%2F", "/"); originalArea.setText(originalUrl); } private void copyToClipboard() { StringSelection content = new StringSelection(originalArea.getText()); clipboard.setContents(content, GoogleUrlTranslater.this); } public static void main(String[] args) { new GoogleUrlTranslater().run("Google URL Translater"); } @Override public void lostOwnership(Clipboard arg0, Transferable arg1) { } }