Alguém já usou as classes do pacote javax.swing.text.html? Criamos uma implementação do browser aqui na nossa empresa. Entretanto estamos enfrentando um problema: As bordas das tabelas não estão sendo exibidas. Significa que se fizermos algo como
Os dados da tabela até aparecem, mas não sua borda.
Alguém sabe como contornar este problema? Seria um bug na implementação da Sun? Estamos usando o JDK 1.4.2. Haveria uma implementação alternativa e open-source de um browser HTML em Java?
Cara, não sei se esta informação ajuda, mas as classes desse pacote implementam a especificação HTML 2.0 :roll:
Dependendo do que vc quer fazer, talvez valha a pena antes de vc perder muito tempo, procurar um parser mais atualizado…
Rafael_Afonso
“om”:
Cara, não sei se esta informação ajuda, mas as classes desse pacote implementam a especificação HTML 2.0 :roll:
Na verdade é a versão 3.2 do HTML (veja aqui). Pelo menos na JDK 1.4.
De qualquer forma descobri dois browsers: o Jazilla e o XBrowser. Baixei o código fonte do último e - apesar de ainda usar o pacote javax.swing.text.html - as bordas das tabelas são exibidas corretamente. Resta descobrir como poderia usá-lo.
Grato,
Rafael_Afonso
Olá:
Consegui corrigir meu problema. Partindo deste código, criei um novo código e então as bordas das tabelas apareceram. Segue-se o código caso algém queri brincar um pouco:
importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.io.IOException;importjavax.swing.JEditorPane;importjavax.swing.JFrame;importjavax.swing.JMenu;importjavax.swing.JMenuBar;importjavax.swing.JMenuItem;importjavax.swing.JOptionPane;importjavax.swing.JSeparator;importjavax.swing.text.BadLocationException;importjavax.swing.text.html.HTML;importjavax.swing.text.html.HTMLDocument;importjavax.swing.text.html.HTMLEditorKit;/** * @author rafael * */publicclassTestEditorKitextendsHTMLEditorKit{privateJFrameframe;privateStringhtml;privatebooleanstandAlone;/** My HTML document */privateHTMLDocumentm_document=null;/** The editor pane */privateJEditorPanem_editorPane=null;/** The HTML edotor*/privateHTMLEditorKitm_htmlEditor=null;publicTestEditorKit(){this(false);}publicTestEditorKit(booleanstandAlone){this.standAlone=standAlone;m_htmlEditor=newHTMLEditorKit();m_document=(HTMLDocument)m_htmlEditor.createDefaultDocument();m_editorPane=newJEditorPane();m_editorPane.setContentType("text/html");m_editorPane.setEditorKitForContentType("text/html",this);m_editorPane.setEditorKit(this);m_editorPane.setEditable(false);m_editorPane.setDocument(m_document);m_editorPane.setPreferredSize(newjava.awt.Dimension(200,200));// Definição do Framethis.frame=newJFrame();this.frame.getContentPane().add(this.getEditor());if(this.standAlone){this.prepareStandAlone();}this.frame.pack();this.frame.setVisible(true);}privatevoidprepareStandAlone(){this.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);JMenuBarmenuBar=newJMenuBar();// Create a menuJMenumenu=newJMenu("Arquivo");menuBar.add(menu);JMenuItemmnuHtml=newJMenuItem("Entrar HTML");mnuHtml.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEventae){StringstrHtml=JOptionPane.showInputDialog(null,"Digite o Código HTML");if(strHtml!=null){TestEditorKit.this.setHtml(strHtml);}}});menu.add(mnuHtml);menu.add(newJSeparator());JMenuItemmnuSair=newJMenuItem("Sair");mnuSair.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEventae){System.exit(0);}});menu.add(mnuSair);// Install the menu bar in the frameframe.setJMenuBar(menuBar);}publicJEditorPanegetEditor(){returnm_editorPane;}/** * @return */publicStringgetHtml(){returnhtml;}/** * @param string */publicvoidsetHtml(Stringstring){html=string;try{super.insertHTML(m_document,0,html,0,0,HTML.Tag.HTML);}catch(BadLocationExceptione){// TODO Auto-generated catch blocke.printStackTrace();}catch(IOExceptione){// TODO Auto-generated catch blocke.printStackTrace();}}publicvoidinsertHTML(Stringtext){try{super.insertHTML(m_document,0,text,0,0,HTML.Tag.HTML);}catch(BadLocationExceptione){// TODO Auto-generated catch blocke.printStackTrace();}catch(IOExceptione){// TODO Auto-generated catch blocke.printStackTrace();}}/** * */publicvoiddispose(){if(!this.standAlone){frame.dispose();}}publicstaticvoidmain(String[]args){TestEditorKittestEditorKit=newTestEditorKit(true);}}
o código foi testado cmo JDK 1.4 e 1.3. Parece.me que a origem do problema estava no linha super.insertHTML(m_document, 0, html, 0, 0, HTML.Tag.HTML);. Mas isso é apenas minha suposição. :?