001    /*
002     * To change this template, choose Tools | Templates
003     * and open the template in the editor.
004     */
005    
006    package org.util.xml;
007    
008    import java.awt.BorderLayout;
009    import java.awt.Desktop;
010    import java.awt.FlowLayout;
011    import java.awt.event.ActionEvent;
012    import java.awt.event.ActionListener;
013    import java.net.MalformedURLException;
014    import java.net.URI;
015    import java.net.URL;
016    import javax.swing.AbstractAction;
017    import javax.swing.BorderFactory;
018    import javax.swing.JButton;
019    import javax.swing.JFrame;
020    import javax.swing.JOptionPane;
021    import javax.swing.JPanel;
022    import javax.swing.JTextField;
023    import org.util.xml.element.Element;
024    import org.util.xml.element.TagElement;
025    import org.util.xml.element.TextElement;
026    import org.util.xml.parse.policy.HTMLParserPolicy;
027    import org.util.xml.parse.ElementParser;
028    
029    /**
030     *
031     * @author masaru
032     */
033    public class Main2 {
034        
035        JPanel panel;
036        
037        public static void main(String[] args) {
038            new Main2();
039        }
040        
041        public Main2() {
042            JTextField textfield = new JTextField("http://www.google.com/");
043            textfield.addActionListener(new ActionListener(){
044                public void actionPerformed(final ActionEvent e) {
045                    new Thread(new Runnable(){public void run(){
046                        openURL(((JTextField)e.getSource()).getText());
047                    }}).start();
048                }
049            });
050            panel = new JPanel(new FlowLayout());
051    
052            JPanel contentpane = new JPanel(new BorderLayout());
053            contentpane.add(textfield,BorderLayout.NORTH);
054            contentpane.add(panel,BorderLayout.CENTER);
055            contentpane.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));
056            
057            JFrame frame = new JFrame();
058            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
059            frame.setContentPane(contentpane);
060            frame.setSize(200,200);
061            frame.setLocation(100,100);
062            frame.setVisible(true);
063        }
064        public void openURL(String urltext) {
065            try{
066                URL url = new URL(urltext);
067                ElementParser parser = new ElementParser(url.openStream());
068                parser.setPolicy(new HTMLParserPolicy(){
069    
070                    @Override
071                    public Element allowElement(Element element) {
072                        super.allowElement(element);
073                        
074                        if(element.isTextElement()) {
075    
076                            TextElement text = (TextElement)element;
077                            if(true) {
078                                String doc = text.getValue();
079    //JOptionPane.showMessageDialog(null, doc);
080                                int num = doc.indexOf("embedUrl");
081                                if(num != -1) {
082                                    int start = doc.indexOf("\'", num) + 1;
083                                    int end = doc.indexOf("\'", start);
084                                    String value = doc.substring(start, end);
085    //JOptionPane.showMessageDialog(null, value);
086                                    final String url = value;
087                                    String comment = "";
088                                    JButton button = new JButton(new AbstractAction(url){
089                                        public void actionPerformed(ActionEvent arg0) {
090                                            try{
091                                                Desktop.getDesktop().browse(new URI(url));
092                                            }catch(Exception e){
093                                                JOptionPane.showMessageDialog(null, "Error:"+e.getMessage()+"\n"+url);
094                                            }
095                                        }
096                                    });
097                                    button.setToolTipText("<html><body>"+comment+"</body></html>");
098                                    panel.add(button);
099                                    panel.doLayout();
100                                }
101                            }
102                        }
103                            
104                        return null;
105                    }
106                    
107                });
108                parser.parse();
109            } catch(Exception e) {
110                e.printStackTrace();
111                JOptionPane.showMessageDialog(null, e);
112            }
113        }
114    }