Configurar jEditorPanel no NetBeans para HTML

18 respostas
S

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?

18 Respostas

V

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

S

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

S

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

Assim?

V

Não, é só dar o comando:

jEditorPane.setContentType( "text/html" );
S

ViniGodoy:
Não, é só dar o comando:

jEditorPane.setContentType( "text/html" );

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?

V

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

S

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???

V

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.

S

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

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

V

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.

S

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.

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.

S

AAAAA

Isso aqui não funciona com jEditorPane

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);
        
    }
run: Old Text<html> <head>

</head>
<body>




</body>
</html>

Text oi
CONSTRUÍDO COM SUCESSO (tempo total: 4 segundos)

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

V

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

S

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

V

Existe o método append nesses componentes.

S
ViniGodoy:
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.

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
        

    }

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..

S

Viny, deu mais ou menos Certo...

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("");
        
    }

Mas olha o console depois de dar uns sends :

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

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

</p>
</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)

S

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

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                   
}
Criado 21 de janeiro de 2013
Ultima resposta 1 de fev. de 2013
Respostas 18
Participantes 2