Java Swing JTextArea write both left and right

后端 未结 1 1936
旧巷少年郎
旧巷少年郎 2021-01-26 08:53

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

相关标签:
1条回答
  • 2021-01-26 09:25

    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();
                }
            });
    */
        }
    }
    
    0 讨论(0)
提交回复
热议问题