0

I am making a simple messaging app with Java . I want to display messages both left and right side of my textArea like all whatsapp, messenger etc. Changing orientation changes all texts orientation so its not useful.

Many thanks

Ilkin
  • 386
  • 3
  • 17
  • 1
    This is not a duplicate of [Java - Align JTextArea to the Right](http://stackoverflow.com/questions/24315757/java-align-jtextarea-to-the-right). If Im not wrong @Ilkin needs some text aligned left and some right, in the same text area. Having said that... the answer to that question has the answer to this question as well except that the alignment has to be changed for each paragraph that the user types/adds. – Pradhan May 21 '16 at 17:41
  • Agree with the above comment. The answer is about changing the alignment for the entire text pane, not individual lines of text. A better example might have been: http://stackoverflow.com/questions/36409784/how-can-i-align-text-to-the-right-in-a-jtextarea/36410566#36410566. Since that example is not executable I have re-opened this question so a complete SSCCE can be posted. – camickr May 21 '16 at 19:44
  • Yes, @MadPiranha , I already mentioned that – Ilkin May 22 '16 at 13:43

1 Answers1

3

You can't use a JTextArea.

One solution is to use a JTextPane and set the attributes for each line of text you insert:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.*;

public class TextPaneChat
{
    private static void createAndShowGUI()
    {
        JTextPane textPane = new JTextPane();

        StyledDocument doc = textPane.getStyledDocument();

        SimpleAttributeSet left = new SimpleAttributeSet();
        StyleConstants.setAlignment(left, StyleConstants.ALIGN_LEFT);
        StyleConstants.setForeground(left, Color.RED);

        SimpleAttributeSet right = new SimpleAttributeSet();
        StyleConstants.setAlignment(right, StyleConstants.ALIGN_RIGHT);
        StyleConstants.setForeground(right, Color.BLUE);

        try
        {
            doc.insertString(doc.getLength(), "Are you busy tonight?", left );
            doc.setParagraphAttributes(doc.getLength(), 1, left, false);
            doc.insertString(doc.getLength(), "\nNo", right );
            doc.setParagraphAttributes(doc.getLength(), 1, right, false);
            doc.insertString(doc.getLength(), "\nFeel like going to a movie?", left );
            doc.setParagraphAttributes(doc.getLength(), 1, left, false);
            doc.insertString(doc.getLength(), "\nSure", right );
            doc.setParagraphAttributes(doc.getLength(), 1, right, false);
        }
        catch(Exception e) { System.out.println(e); }

        JFrame frame = new JFrame("Text Pane Chat");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add( new JScrollPane( textPane ) );
        frame.setLocationByPlatform( true );
        frame.setSize(200, 200);
        frame.setVisible( true );
    }

    public static void main(String[] args)
    {
        EventQueue.invokeLater( () -> createAndShowGUI() );
/*
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                createAndShowGUI();
            }
        });
*/
    }
}
camickr
  • 321,443
  • 19
  • 166
  • 288