user3675761
user3675761

Reputation: 13

Apply color for Selected Text using JTextPane

I want to display selected text with user selected text color.I had select some text and click on settextcolor it was applied to all the text present in JTextPane not selected text.I want apply the color to selected text only.Please help me.. Here is my code:

public class SetTextColor extends javax.swing.JFrame {

    int i=0;
    JTextPane textPane;
    JScrollPane scrollPane;

    public SetTextColor() {
        initComponents();
    }

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

        tabbedPane = new javax.swing.JTabbedPane();
        jMenuBar1 = new javax.swing.JMenuBar();
        jMenu1 = new javax.swing.JMenu();
        Create = new javax.swing.JMenuItem();
        SetTextColor = new javax.swing.JMenuItem();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jMenu1.setText("File");

        Create.setText("Create");
        Create.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                CreateActionPerformed(evt);
            }
        });
        jMenu1.add(Create);

        SetTextColor.setText("SetTextColor");
        SetTextColor.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                SetTextColorActionPerformed(evt);
            }
        });
        jMenu1.add(SetTextColor);

        jMenuBar1.add(jMenu1);

        setJMenuBar(jMenuBar1);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(tabbedPane, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 400, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(tabbedPane, javax.swing.GroupLayout.DEFAULT_SIZE, 298, Short.MAX_VALUE)
        );

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

    private void CreateActionPerformed(java.awt.event.ActionEvent evt) {                                       
       final JInternalFrame internalFrame = new JInternalFrame("");
        i++;
        internalFrame.setName("Document"+i);
        internalFrame.setClosable(true);
        internalFrame.setAutoscrolls(true);
        textPane=new JTextPane();
        textPane.setFont(new java.awt.Font("Miriam Fixed", 0, 13));
        scrollPane=new JScrollPane(textPane);
        internalFrame.add(scrollPane);
        tabbedPane.add(internalFrame);
        internalFrame.setSize(internalFrame.getMaximumSize());
        internalFrame.pack();
        internalFrame.setVisible(true);
    }                                      

    private void SetTextColorActionPerformed(java.awt.event.ActionEvent evt) {                                             
       Color color = JColorChooser.showDialog(this, "Colors",Color.BLUE);
        StyledDocument doc = textPane.getStyledDocument();
        String text=textPane.getSelectedText();
        Style style = textPane.addStyle("I'm a Style", null);
        StyleConstants.setForeground(style, color);
        textPane.setForeground(color);
    }                                            
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<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 ex) {
            java.util.logging.Logger.getLogger(SetTextColor.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(SetTextColor.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(SetTextColor.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(SetTextColor.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                new SetTextColor().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify                     
    private javax.swing.JMenuItem Create;
    private javax.swing.JMenuItem SetTextColor;
    private javax.swing.JMenu jMenu1;
    private javax.swing.JMenuBar jMenuBar1;
    private javax.swing.JTabbedPane tabbedPane;
    // End of variables declaration                   
}

Upvotes: 0

Views: 1153

Answers (1)

oliholz
oliholz

Reputation: 7507

Thats because you setting the text color of your TextPane with

textPane.setForeground(color);

If you want to set your Style only for a Paragraph or some Character you have to use:

StyledDocument.setParagraphAttributes(offset, length, s, replace);

or

StyledDocument.setCharacterAttributes(offset, length, s, replace);

Like this:

private void SetTextColorActionPerformed(java.awt.event.ActionEvent evt) {                                             
    Color color = JColorChooser.showDialog(this, "Colors",Color.BLUE);
    StyledDocument doc = textPane.getStyledDocument();
    int from = textPane.getSelectionStart();
    int to = textPane.getSelectionEnd();
    Style style = textPane.addStyle("I'm a Style", null);
    StyleConstants.setForeground(style, color);
    doc.setCharacterAttributes(from, to-from, style, true);
} 

Upvotes: 2

Related Questions