Configurar jEditorPanel no NetBeans para HTML

Oi gente.
Estou com muitas dúvidas do jEditorPanel, é a 1º vez que uso ele.
Fiquei mexendo nele, ele ja funciona com String e faz o mesmo rabalho do jTextArea.
Agora preciso que ele interprete HTML.

Estou usando a interface-builder do netbeans 7.

Alguém pode me dar uma dica? Sò pra eu poder saber aonde ir ou que fazer?

Comece por aqui: http://docs.oracle.com/javase/tutorial/uiswing/components/editorpane.html

OK, eu tenho que mudar o EditorKit , correto ?
Aqui no netbeans ele pede pra colocar o Editorkit…

public void initializeHTML() { EditorKit ek = new HTMLEditorKit(); jEditorPane_Chat.setEditorKit(ek); }

Assim?

Não, é só dar o comando:

jEditorPane.setContentType( "text/html" );

[quote=ViniGodoy]Não, é só dar o comando:

jEditorPane.setContentType( "text/html" );

[/quote]

Deu certo!!!

Mas como vou poder fazer tratamento de erros, por exemplo, se eu digitar errado :

Ele simplesmente nao escreve na tela…

Como posso fazer essas restrições e tratamentos?

O ideal é você fornecer um editor para seu usuário, não deixa-lo ele mesmo digitar o HTML.

Mas e se ele digitar "<"b> oi </“b>” na mensagem… ?
Esse editor , seria como se fosse um protocolo, igual aquele que voce me ensinou do chat???

No que ele digita, o ideal é usar alguma biblioteca como a da Apache para fazer o escape dos códigos especiais. Assim, se ele digitar oi, a biblioteca transforma em &ltoi&gt e as chaves serão enviadas na forma de texto, não de formatação.

Entendi, mas o que seria o escape e o unescape?

Um Transforma em código HTML e o outro passa como String ?

Sequência de escape são essas sequencias especias que tem no texto.
Fazer escape num HTML é justamente pegar os caracteres especiais, como >, e gerar as sequencias de escape que geram esses caracteres, como &gt;
Fazer o unescape é fazer o caminho inverso. Ou seja, é com base num texto escapado, gerar o texto final, que o HTML iria desenhar.

[quote=ViniGodoy]Sequência de escape são essas sequencias especias que tem no texto.
Fazer escape num HTML é justamente pegar os caracteres especiais, como >, e gerar as sequencias de escape que geram esses caracteres, como &gt;
Fazer o unescape é fazer o caminho inverso. Ou seja, é com base num texto escapado, gerar o texto final, que o HTML iria desenhar.[/quote]

Entendi!!!
Desculpa a demora pra responder, mas nao recebi o email do GUJ falando que voce tinha respondido, ou entao passou batido.Estava esperandoa resposta kkk.
Vou tentar agora, vamos ver o que acontece.

AAAAA

Isso aqui não funciona com jEditorPane

[code] private void jButton_SendMessageActionPerformed(java.awt.event.ActionEvent evt) {
String text = jTextField_MessageText.getText();
String oldText = jEditorPane_Chat.getText();

    jEditorPane_Chat.setText(oldText +"\n"+text);
    
}[/code]

[quote]run:
Old Text<html>
<head>

</head>
<body>

</p>

</body>
</html>

Text oi
CONSTRUÍDO COM SUCESSO (tempo total: 4 segundos)
[/quote]

Estou baixando a API enquanto isso.
AA
como que faz o maldito Append?

A append adiciona o texto passado por parâmetro ao final. Seria como se fosse o += da classe String.

Entendi, mas aqui quanto tento pegar o texto pra fazer append , ele vem em código HTML, eu tenho que fazer o escape?

Existe o método append nesses componentes.

http://docs.oracle.com/javase/6/docs/api/javax/swing/JEditorPane.html

Viny, nao consegui.
Pesquisei na net e também nao achei.

[code] private void jButton_SendMessageActionPerformed(java.awt.event.ActionEvent evt) {
String text = jTextField_MessageText.getText();
String oldText = jEditorPane_Chat.getText();

    String escapeHtml4 = StringEscapeUtils.escapeHtml4(text);
    
    
    //jEditorPane_Chat.append(""); // Isso aqui nao funciona
    

}[/code]

Teria isso aqui :
http://www.tutorialspoint.com/java/stringbuffer_append.htm

Mas acho que ja saquei, eu tenho que dar escape no texto antigo pra depois jogar ele na tela de novo… Vou tentar isso agora…

Viny, deu mais ou menos Certo…

[code] private void jButton_SendMessageActionPerformed(java.awt.event.ActionEvent evt) {
String message = jTextField_MessageText.getText();
String oldText = jEditorPane_Chat.getText();

    String escapeHtml4 = StringEscapeUtils.escapeHtml4(message);
    
    System.out.println("Message :" + message);
    
    oldText = StringEscapeUtils.escapeHtml4(oldText);
    System.out.println("Old Text : " + oldText);
    
    
    jEditorPane_Chat.setText(oldText + "\n" + message);
    
    //jEditorPane_Chat.append("");
    
}[/code]

Mas olha o console depois de dar uns sends :

[quote]run:
Message :oi
Old Text : <html>
<head>

</head>
<body>
<p style="margin-top: 0">

&lt;/p&gt;

</body>
</html>

Message :oi
Old Text : <html>
<head>

</head>
<body>
&lt;html&gt; &lt;head&gt; &lt;/head&gt; &lt;body&gt; &lt;p style=&quot;margin-top: 0&quot;&gt; &lt;/p&gt; &lt;/body&gt;
&lt;/html&gt; oi
</body>
</html>

Message :oi
Old Text : <html>
<head>

</head>
<body>
&lt;html&gt; &lt;head&gt; &lt;/head&gt; &lt;body&gt; &amp;lt;html&amp;gt; &amp;lt;head&amp;gt; &amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt; &amp;lt;p style=&amp;quot;margin-top: 0&amp;quot;&amp;gt; &amp;lt;/p&amp;gt;
&amp;lt;/body&amp;gt; &amp;lt;/html&amp;gt; oi &lt;/body&gt; &lt;/html&gt; oi
</body>
</html>

Message :oi
Old Text : <html>
<head>

</head>
<body>
&lt;html&gt; &lt;head&gt; &lt;/head&gt; &lt;body&gt; &amp;lt;html&amp;gt; &amp;lt;head&amp;gt; &amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt; &amp;amp;lt;html&amp;amp;gt; &amp;amp;lt;head&amp;amp;gt;
&amp;amp;lt;/head&amp;amp;gt; &amp;amp;lt;body&amp;amp;gt; &amp;amp;lt;p
style=&amp;amp;quot;margin-top: 0&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;/p&amp;amp;gt;
&amp;amp;lt;/body&amp;amp;gt; &amp;amp;lt;/html&amp;amp;gt; oi &amp;lt;/body&amp;gt; &amp;lt;/html&amp;gt;
oi &lt;/body&gt; &lt;/html&gt; oi
</body>
</html>

CONSTRUÍDO COM SUCESSO (tempo total: 15 segundos)
[/quote]

Eu fiz uma classe pra testar esse jEditorPanel no netbeans
Amigo meu Conseguiu fazer desse jeito :

[code]package View;

import org.apache.commons.lang3.StringEscapeUtils;

public class ClientViewImproved extends javax.swing.JFrame {

private String sup;
private String dup;
private String msg;

public ClientViewImproved() {
    initComponents();
    
    sup = "<html><head></head><body>";
    dup = "</body></html>";
    msg = "";
}

@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">                          
private void initComponents() {

    jLabel_ConnectedTo = new javax.swing.JLabel();
    jScrollPane2 = new javax.swing.JScrollPane();
    jTable_UsersOnline = new javax.swing.JTable();
    jTextField_MessageText = new javax.swing.JTextField();
    jButton_SendMessage = new javax.swing.JButton();
    jButton_Exit = new javax.swing.JButton();
    jPanel1 = new javax.swing.JPanel();
    jPanel2 = new javax.swing.JPanel();
    jScrollPane1 = new javax.swing.JScrollPane();
    jEditorPane_Chat = new javax.swing.JEditorPane();
    jMenuBar1 = new javax.swing.JMenuBar();
    jMenu1 = new javax.swing.JMenu();
    jMenu2 = new javax.swing.JMenu();
    jMenu3 = new javax.swing.JMenu();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

    jLabel_ConnectedTo.setText("Connected To : ");

    jTable_UsersOnline.setModel(new javax.swing.table.DefaultTableModel(
        new Object [][] {
            {null},
            {null},
            {null},
            {null},
            {null},
            {null},
            {null},
            {null},
            {null},
            {null},
            {null},
            {null},
            {null},
            {null},
            {null},
            {null},
            {null},
            {null},
            {null},
            {null},
            {null},
            {null},
            {null},
            {null},
            {null},
            {null},
            {null},
            {null},
            {null},
            {null},
            {null},
            {null},
            {null},
            {null},
            {null},
            {null},
            {null},
            {null},
            {null},
            {null},
            {null},
            {null},
            {null},
            {null},
            {null},
            {null},
            {null},
            {null},
            {null},
            {null}
        },
        new String [] {
            "Users On-Line"
        }
    ) {
        Class[] types = new Class [] {
            java.lang.String.class
        };
        boolean[] canEdit = new boolean [] {
            false
        };

        public Class getColumnClass(int columnIndex) {
            return types [columnIndex];
        }

        public boolean isCellEditable(int rowIndex, int columnIndex) {
            return canEdit [columnIndex];
        }
    });
    jScrollPane2.setViewportView(jTable_UsersOnline);

    jButton_SendMessage.setText("Send");
    jButton_SendMessage.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jButton_SendMessageActionPerformed(evt);
        }
    });

    jButton_Exit.setText("Exit");

    javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
    jPanel2.setLayout(jPanel2Layout);
    jPanel2Layout.setHorizontalGroup(
        jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGap(0, 0, Short.MAX_VALUE)
    );
    jPanel2Layout.setVerticalGroup(
        jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGap(0, 0, Short.MAX_VALUE)
    );

    jEditorPane_Chat.setEditable(false);
    jEditorPane_Chat.setContentType("text/html"); // NOI18N
    jScrollPane1.setViewportView(jEditorPane_Chat);

    javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
    jPanel1.setLayout(jPanel1Layout);
    jPanel1Layout.setHorizontalGroup(
        jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(jPanel1Layout.createSequentialGroup()
            .addContainerGap()
            .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGroup(jPanel1Layout.createSequentialGroup()
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 592, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGap(0, 0, Short.MAX_VALUE)))
            .addContainerGap())
    );
    jPanel1Layout.setVerticalGroup(
        jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(jPanel1Layout.createSequentialGroup()
            .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 384, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
            .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addContainerGap())
    );

    jMenu1.setText("File");
    jMenuBar1.add(jMenu1);

    jMenu2.setText("Configurations");
    jMenuBar1.add(jMenu2);

    jMenu3.setText("Help");
    jMenuBar1.add(jMenu3);

    setJMenuBar(jMenuBar1);

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addContainerGap()
                    .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addGroup(layout.createSequentialGroup()
                    .addGap(20, 20, 20)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addComponent(jLabel_ConnectedTo, javax.swing.GroupLayout.PREFERRED_SIZE, 276, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGroup(layout.createSequentialGroup()
                            .addComponent(jTextField_MessageText, javax.swing.GroupLayout.PREFERRED_SIZE, 510, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                            .addComponent(jButton_SendMessage, javax.swing.GroupLayout.PREFERRED_SIZE, 65, javax.swing.GroupLayout.PREFERRED_SIZE)))
                    .addGap(0, 0, Short.MAX_VALUE)))
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 279, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addComponent(jButton_Exit, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE))
            .addGap(86, 86, 86))
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addContainerGap()
                    .addComponent(jLabel_ConnectedTo, javax.swing.GroupLayout.PREFERRED_SIZE, 24, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                    .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addGroup(layout.createSequentialGroup()
                    .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGap(0, 0, Short.MAX_VALUE)))
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                .addComponent(jButton_Exit, javax.swing.GroupLayout.DEFAULT_SIZE, 33, Short.MAX_VALUE)
                .addComponent(jTextField_MessageText)
                .addComponent(jButton_SendMessage, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
            .addGap(20, 20, 20))
    );

    pack();
}// </editor-fold>                        

private void jButton_SendMessageActionPerformed(java.awt.event.ActionEvent evt) {                                                    

    // Pega a mensagem digitada
    String message = jTextField_MessageText.getText();
    
    // Evita que as tags digitadas pelo usuário senha interpretadas pelo chat
    message = StringEscapeUtils.escapeHtml4(message);

    // <br> = pula linha em html
    msg = msg + message + "<br>";
    
    // Monta o html e monstra
    String html = sup + msg + dup;
    jEditorPane_Chat.setText(html);
}                                                   

public static void main(String args[]) {

    //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
    /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
     * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
     */
    try {
        for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
            if ("Nimbus".equals(info.getName())) {
                javax.swing.UIManager.setLookAndFeel(info.getClassName());
                break;
            }
        }
    } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | javax.swing.UnsupportedLookAndFeelException ex) {
        java.util.logging.Logger.getLogger(ClientViewImproved.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    }
    //</editor-fold>

    java.awt.EventQueue.invokeLater(new Runnable() {
        @Override
        public void run() {
            new ClientViewImproved().setVisible(true);
        }
    });
}
// Variables declaration - do not modify                     
private javax.swing.JButton jButton_Exit;
private javax.swing.JButton jButton_SendMessage;
private javax.swing.JEditorPane jEditorPane_Chat;
private javax.swing.JLabel jLabel_ConnectedTo;
private javax.swing.JMenu jMenu1;
private javax.swing.JMenu jMenu2;
private javax.swing.JMenu jMenu3;
private javax.swing.JMenuBar jMenuBar1;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JTable jTable_UsersOnline;
private javax.swing.JTextField jTextField_MessageText;
// End of variables declaration                   

}
[/code]