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?
[quote=“om”]Cara, não sei se esta informação ajuda, mas as classes desse pacote implementam a especificação HTML 2.0 :roll:
[/quote]
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.
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:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JSeparator;
import javax.swing.text.BadLocationException;
import javax.swing.text.html.HTML;
import javax.swing.text.html.HTMLDocument;
import javax.swing.text.html.HTMLEditorKit;
/**
* @author rafael
*
*/
public class TestEditorKit extends HTMLEditorKit {
private JFrame frame;
private String html;
private boolean standAlone;
/** My HTML document */
private HTMLDocument m_document = null;
/** The editor pane */
private JEditorPane m_editorPane = null;
/** The HTML edotor*/
private HTMLEditorKit m_htmlEditor = null;
public TestEditorKit() {
this(false);
}
public TestEditorKit(boolean standAlone) {
this.standAlone = standAlone;
m_htmlEditor = new HTMLEditorKit();
m_document = (HTMLDocument) m_htmlEditor.createDefaultDocument();
m_editorPane = new JEditorPane();
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(new java.awt.Dimension(200, 200));
// Definição do Frame
this.frame = new JFrame();
this.frame.getContentPane().add(this.getEditor());
if (this.standAlone) {
this.prepareStandAlone();
}
this.frame.pack();
this.frame.setVisible(true);
}
private void prepareStandAlone() {
this.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JMenuBar menuBar = new JMenuBar();
// Create a menu
JMenu menu = new JMenu("Arquivo");
menuBar.add(menu);
JMenuItem mnuHtml = new JMenuItem("Entrar HTML");
mnuHtml.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
String strHtml =
JOptionPane.showInputDialog(null, "Digite o Código HTML");
if(strHtml != null) {
TestEditorKit.this.setHtml(strHtml);
}
}
});
menu.add(mnuHtml);
menu.add(new JSeparator());
JMenuItem mnuSair = new JMenuItem("Sair");
mnuSair.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
System.exit(0);
}
});
menu.add(mnuSair);
// Install the menu bar in the frame
frame.setJMenuBar(menuBar);
}
public JEditorPane getEditor() {
return m_editorPane;
}
/**
* @return
*/
public String getHtml() {
return html;
}
/**
* @param string
*/
public void setHtml(String string) {
html = string;
try {
super.insertHTML(m_document, 0, html, 0, 0, HTML.Tag.HTML);
} catch (BadLocationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void insertHTML(String text) {
try {
super.insertHTML(m_document, 0, text, 0, 0, HTML.Tag.HTML);
} catch (BadLocationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
*
*/
public void dispose() {
if(!this.standAlone) {
frame.dispose();
}
}
public static void main(String[] args) {
TestEditorKit testEditorKit = new TestEditorKit(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. :?