Ajuda com JEditorPane e JScrollPane -- para browser simples em java

6 respostas
nakrak

Pessoal…estava estudando um pouco alguns navegadores simples em java e resolvi fazer o meu…mas agora cheguei num ponto que nao enchergo onde esta o erro…

eu recebo o seguinte erro na compilacao

“”

run:

Exception in thread main java.lang.ClassCastException: javax.swing.JTextField cannot be cast to javax.swing.event.HyperlinkListener

at browser.Janela.(Janela.java:83)

at browser.Janela.main(Janela.java:169)

Java Result: 1

CONSTRUÍDO COM SUCESSO (tempo total: 1 segundo)

“”

O codigo segue abaixo

package browser;

import java.awt.BorderLayout;
import java.awt.Cursor;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;
import java.net.URL;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.event.HyperlinkEvent;
import javax.swing.event.HyperlinkListener;
import javax.swing.text.html.HTMLDocument;
import javax.swing.text.html.HTMLFrameHyperlinkEvent;

public class Janela {
    private JEditorPane saida;
    private JFrame janela;
    private JMenuBar menu;
    private JMenu arquivo;
    private JMenuItem fechar;
    private JTextField endereco;
    private JLabel l1;

    Janela(){




        janela=new JFrame ("Bowser");
        janela.setSize(1024, 768);
        janela.setLayout(null);
    	janela.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });

        //cria barra de menu
        menu=new JMenuBar();

        //cria aba do menu
        arquivo=new JMenu("Arquivo");

        //cria opcao
        fechar=new JMenuItem("Fechar");

        arquivo.add(fechar);
        menu.add(arquivo);

        //seta o menu como default da janela
        janela.setJMenuBar(menu);

        //campo de endereco
        endereco=new JTextField(35);

        //atributos do campo de endereco (distancia horizontal, distancia vertical, largura, altura
        endereco.setBounds(200,30,800,20);


        l1=new JLabel("Endereco :");
        l1.setBounds(130,30,100,20);
        janela.add(l1);

        //Cria a janela de exibicao da pagina
        saida=new JEditorPane();
        janela.add(saida);
        saida.setContentType("text/html");
        saida.setEditable(false);
        saida.addHyperlinkListener((HyperlinkListener)endereco);
        janela.getContentPane().add(new JScrollPane(saida), BorderLayout.CENTER);



        //coloca um evento no campo de endereco
        endereco.addKeyListener(new KeyAdapter() {
            
            public void keyReleased(KeyEvent e) {
                if (e.getKeyCode() == KeyEvent.VK_ENTER) {

                    URL url = criaUrl(endereco.getText());
                    if (url != null) {


                        try {
                            saida.setPage(url);
                        } catch (IOException ex) {
                            Logger.getLogger(Janela.class.getName()).log(Level.SEVERE, null, ex);
                        }finally {
                             endereco.setText(saida.getPage().toString());
                             janela.setCursor(Cursor.getDefaultCursor());
                         }



                    } else {
                        JOptionPane.showMessageDialog(null, "Erro");
                    }
                }
            }
        });

        janela.add(endereco);
        janela.setVisible(true);
    	janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }



    //cria um objeto url com o que o usuario digitar
     public URL criaUrl(String url) {
        // Testa se o endereco inicia com "http://"
        if (!url.toLowerCase().startsWith("http://")){
            return null;
        }


        // tenta criar um objeto url com a string
        URL enderecoAutenticado = null;
        try {
            enderecoAutenticado = new URL(url);
        } catch (Exception e) {
            return null;
        }

        return enderecoAutenticado;
    }



    public void hyperlinkUpdate(HyperlinkEvent evento) {
        HyperlinkEvent.EventType eventType = evento.getEventType();
        if (eventType == HyperlinkEvent.EventType.ACTIVATED) {
            if (evento instanceof HTMLFrameHyperlinkEvent) {
                HTMLFrameHyperlinkEvent linkEvent = (HTMLFrameHyperlinkEvent) evento;
                HTMLDocument document = (HTMLDocument) saida.getDocument();
                document.processHTMLFrameHyperlinkEvent(linkEvent);
            } else {
                        try {
                            saida.setPage(evento.getURL());
                        } catch (IOException ex) {
                            Logger.getLogger(Janela.class.getName()).log(Level.SEVERE, null, ex);
                        }finally {
                             endereco.setText(saida.getPage().toString());
                             janela.setCursor(Cursor.getDefaultCursor());
                        }

            }
        }
    }




    public static void main(String[] args) {
        Janela bowser = new Janela();
    }



}

Agradeço se alguem puder me dar alguma dica

6 Respostas

Eder_Peixoto

Erro de coerção. :smiley:

Você está fazendo um cast de JTextField para HyperlinkListener na linha 81. Como JTextField NÃO é uma instância de HyperlinkListener, uma exception é disparada.

nakrak

valew kra…eu editei meu codigo e coloquei isso

saida.setBounds(0, 50, 800, 600);
        HyperlinkListener link = new HyperlinkListener(){
            public void hyperlinkUpdate(HyperlinkEvent e){
                if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
                try {
                    saida.setPage(e.getURL());
                }
                catch (IOException ioe){
                    ioe.printStackTrace();
                }
            }
            }
            };
            saida.addHyperlinkListener(link);

O projeto roda agora…

Vou acrecentar mais coisas dai posto de volta aqui

nakrak

Agora o problema surgiu com a barra de rolagem na linha 102… :roll:

package browser;

import java.awt.BorderLayout;
import java.awt.Cursor;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;
import java.net.URL;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.JTextPane;
import javax.swing.event.HyperlinkEvent;
import javax.swing.event.HyperlinkListener;
import javax.swing.text.html.HTMLDocument;
import javax.swing.text.html.HTMLFrameHyperlinkEvent;

public class Janela {
    private JEditorPane saida;
    private JFrame janela;
    private JMenuBar menu;
    private JMenu arquivo;
    private JMenuItem fechar;
    private JTextField endereco;
    private JLabel l1;
    
    Janela(){
        
        
        janela=new JFrame ("Bowser");
        janela.setSize(1024, 768);
        janela.setLayout(null);
    	janela.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });

        //cria barra de menu
        menu=new JMenuBar();

        //cria aba do menu
        arquivo=new JMenu("Arquivo");

        //cria opcao
        fechar=new JMenuItem("Fechar");

        arquivo.add(fechar);
        menu.add(arquivo);

        //seta o menu como default da janela
        janela.setJMenuBar(menu);

        //campo de endereco
        endereco=new JTextField();

        //atributos do campo de endereco (distancia horizontal, distancia vertical, largura, altura
        endereco.setBounds(200,30,800,20);


        l1=new JLabel("Endereco :");
        l1.setBounds(130,30,100,20);
        janela.add(l1);

        //Cria a janela de exibicao da pagina
        saida=new JEditorPane();
        saida.setContentType("text/html");
        saida.setEditable(false);
        saida.setBounds(0,50,800,800);
        
        
        
        HyperlinkListener link = new HyperlinkListener(){
            public void hyperlinkUpdate(HyperlinkEvent e){
                if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
                try {
                    saida.setPage(e.getURL());
                    endereco.setText(saida.getPage().toString());
                }
                catch (IOException ioe){
                    ioe.printStackTrace();
                }
            }
            }
            };


            saida.addHyperlinkListener(link);

        try{
            janela.add(endereco);
            janela.add(saida);
            //janela.add(new JScrollPane(saida));

        }catch(Exception e) {
            System.err.println("Error");
        }
        
        


        //coloca um evento no campo de endereco
        endereco.addKeyListener(new KeyAdapter() {
            public void keyReleased(KeyEvent e) {
                if (e.getKeyCode() == KeyEvent.VK_ENTER) {

                    URL url = criaUrl(endereco.getText());
                    if (url != null) {


                        try {
                            saida.setPage(url);
                            endereco.setText(saida.getPage().toString());
                        } catch (IOException ex) {
                            Logger.getLogger(Janela.class.getName()).log(Level.SEVERE, null, ex);
                        }finally {
                             
                             janela.setCursor(Cursor.getDefaultCursor());
                         }
                    } else {
                        JOptionPane.showMessageDialog(null, "Erro");
                    }
                }
            }
        });

        janela.setVisible(true);
    	janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }



    //cria um objeto url com o que o usuario digitar
     public URL criaUrl(String url) {
        // Testa se o endereco inicia com "http://"
        if (!url.toLowerCase().startsWith("http://")){
            return null;
        }


        // tenta criar um objeto url com a string
        URL enderecoAutenticado = null;
        try {
            enderecoAutenticado = new URL(url);
        } catch (Exception e) {
            return null;
        }

        return enderecoAutenticado;
    }



    public void hyperlinkUpdate(HyperlinkEvent evento) {
        HyperlinkEvent.EventType eventType = evento.getEventType();
        if (eventType == HyperlinkEvent.EventType.ACTIVATED) {
            if (evento instanceof HTMLFrameHyperlinkEvent) {
                HTMLFrameHyperlinkEvent linkEvent = (HTMLFrameHyperlinkEvent) evento;
                HTMLDocument document = (HTMLDocument) saida.getDocument();
                document.processHTMLFrameHyperlinkEvent(linkEvent);
            } else {
                        try {
                            saida.setPage(evento.getURL());
                        } catch (IOException ex) {
                            Logger.getLogger(Janela.class.getName()).log(Level.SEVERE, null, ex);
                        }finally {
                             endereco.setText(saida.getPage().toString());
                             janela.setCursor(Cursor.getDefaultCursor());
                        }

            }
        }
    }




    public static void main(String[] args) {
        Janela bowser = new Janela();
    }



}

alguem sabe como deixar o JEditorPane redimensionavel ao aumentar o tamanho da tela?
e a barra de rolagem nao aparece …ela simplesmente nao aparece… :roll: :roll: :roll: :roll: :roll:

nakrak

up!

:smiley: :smiley:

nakrak

up2 8)

nakrak

Como ninguem respondeu eu mesmo vou me responder :smiley: :smiley:

consegui arrumar as barras de rolagem

segue o fonte completo abaixo

package browser;

import java.awt.BorderLayout;
import java.awt.Cursor;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;
import java.net.URL;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.event.HyperlinkEvent;
import javax.swing.event.HyperlinkListener;
import javax.swing.text.html.HTMLDocument;
import javax.swing.text.html.HTMLFrameHyperlinkEvent;

public class Janela {
    private JEditorPane saida;
    private JFrame janela;
    private JMenuBar menu;
    private JMenu arquivo;
    private JMenuItem fechar;
    private JTextField endereco;
    private JLabel l1;
    private JScrollPane scroll;
    Janela(){
        
        
        janela=new JFrame ("Bowser");
        janela.setSize(1024, 768);
        janela.setLayout(null);
    	janela.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });

        //cria barra de menu
        menu=new JMenuBar();

        //cria aba do menu
        arquivo=new JMenu("Arquivo");

        //cria opcao
        fechar=new JMenuItem("Fechar");

        arquivo.add(fechar);
        menu.add(arquivo);

        //seta o menu como default da janela
        janela.setJMenuBar(menu);

        //campo de endereco
        endereco=new JTextField();

        //atributos do campo de endereco (distancia horizontal, distancia vertical, largura, altura
        endereco.setBounds(200,30,800,20);


        l1=new JLabel("Endereco :");
        l1.setBounds(130,30,100,20);
        janela.add(l1);

        //Cria a janela de exibicao da pagina
        saida=new javax.swing.JEditorPane();
        saida.setContentType("text/html");
        saida.setEditable(false);
        scroll=new JScrollPane(saida);
        scroll.setSize(1000,600);
        scroll.setLocation(0,100);
        
        HyperlinkListener link = new HyperlinkListener(){
            public void hyperlinkUpdate(HyperlinkEvent e){
                if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
                try {
                    saida.setPage(e.getURL());
                    endereco.setText(saida.getPage().toString());
                }
                catch (IOException ioe){
                    ioe.printStackTrace();
                }
            }
            }
            };

            saida.addHyperlinkListener(link);
            janela.add(endereco);
            
            janela.add(scroll);

        
        
        


        //coloca um evento no campo de endereco
        endereco.addKeyListener(new KeyAdapter() {
            public void keyReleased(KeyEvent e) {
                if (e.getKeyCode() == KeyEvent.VK_ENTER) {

                    URL url = criaUrl(endereco.getText());
                    if (url != null) {


                        try {
                            saida.setPage(url);
                            endereco.setText(saida.getPage().toString());
                        } catch (IOException ex) {
                            Logger.getLogger(Janela.class.getName()).log(Level.SEVERE, null, ex);
                        }finally {
                             
                             janela.setCursor(Cursor.getDefaultCursor());
                         }
                    } else {
                        JOptionPane.showMessageDialog(null, "Erro");
                    }
                }
            }
        });

        janela.setVisible(true);
    	janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }



    //cria um objeto url com o que o usuario digitar
     public URL criaUrl(String url) {
        // Testa se o endereco inicia com "http://"
        if (!url.toLowerCase().startsWith("http://")){
            return null;
        }


        // tenta criar um objeto url com a string
        URL enderecoAutenticado = null;
        try {
            enderecoAutenticado = new URL(url);
        } catch (Exception e) {
            return null;
        }

        return enderecoAutenticado;
    }



    public void hyperlinkUpdate(HyperlinkEvent evento) {
        HyperlinkEvent.EventType eventType = evento.getEventType();
        if (eventType == HyperlinkEvent.EventType.ACTIVATED) {
            if (evento instanceof HTMLFrameHyperlinkEvent) {
                HTMLFrameHyperlinkEvent linkEvent = (HTMLFrameHyperlinkEvent) evento;
                HTMLDocument document = (HTMLDocument) saida.getDocument();
                document.processHTMLFrameHyperlinkEvent(linkEvent);
            } else {
                        try {
                            saida.setPage(evento.getURL());
                        } catch (IOException ex) {
                            Logger.getLogger(Janela.class.getName()).log(Level.SEVERE, null, ex);
                        }finally {
                             endereco.setText(saida.getPage().toString());
                             janela.setCursor(Cursor.getDefaultCursor());
                        }

            }
        }
    }




    public static void main(String[] args) {
        Janela bowser = new Janela();
    }



}

Obrigado a todos

Criado 29 de julho de 2009
Ultima resposta 1 de ago. de 2009
Respostas 6
Participantes 2