2012-03-28 1 views
0

Из вышеизложенного, я сделал простое приложение для Windows, подобное MSN и Yahoo Messenger. Когда пользователь печатает сообщение и нажимает кнопку «Отправить», ниже код присоединяет имя пользователя и сообщения для текстового поля:java swing: возможно ли изменить цвет определенной строковой переменной?

textArea_ChatLog.append(chatName + "\n" + " " + msgChat + "\n"); 

Что бы отобразить в этом формате:

Username 
Message the user typed. 

ли есть решение изменить цвет «chatName»? Единственная информация, которую я нашел, касается изменения цвета всех компонентов (чего я не хочу).

+7

Строка не имеет цвета. Вы спрашиваете о пользовательском интерфейсе. – SLaks

+2

@SLaks Вот почему я положил «java swing:» и спросил, возможно ли это. – SpicyWeenie

ответ

5

Вы можете использовать HTML-теги и стиль с компонентами swing. Взгляните на этот урок - How to Use HTML in Swing Components.

+0

Я проверил его, но ничего не изменил внешний вид для отдельных строковых переменных, таких как мои. Мои имена строк не могут быть жестко закодированы, потому что они связаны с любым именем, которое я использую для входа. – SpicyWeenie

1

Похоже, что вы должны использовать это JTextPane/JEditorPane, для изменения цвета случайных строковых литералов, попробовать свои руки на этом коде, кажется, это то, что вы хотели :-)

import java.awt.*; 

import java.awt.event.*; 

import javax.swing.*; 

import javax.swing.border.*; 

import javax.swing.text.AttributeSet; 
import javax.swing.text.SimpleAttributeSet; 
import javax.swing.text.StyleConstants; 
import javax.swing.text.StyleContext; 

public class TextPaneTest extends JFrame 
{ 
    private JPanel topPanel; 
    private JTextPane tPane; 
    private JTextField tfield; 
    private String username = null; 

    public TextPaneTest() 
    { 
     topPanel = new JPanel(); 
     topPanel.setLayout(new BorderLayout(5, 5)); 

     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setLocationRelativeTo(null);    

     EmptyBorder eb = new EmptyBorder(new Insets(10, 10, 10, 10)); 

     tPane = new JTextPane();     
     tPane.setBorder(eb); 
     //tPane.setBorder(BorderFactory.createLineBorder(Color.DARK_GRAY)); 
     tPane.setMargin(new Insets(5, 5, 5, 5)); 
     JScrollPane scrollPane = new JScrollPane(tPane); 

     topPanel.add(scrollPane, BorderLayout.CENTER); 

     tfield = new JTextField(10); 
     tfield.addActionListener(new ActionListener() 
     { 
      public void actionPerformed(ActionEvent ae) 
      { 
       if (tfield.getDocument().getLength() > 0) 
       { 
        appendToPane(tPane, username + " : ", Color.MAGENTA); 
        appendToPane(tPane, tfield.getText() + "\n", Color.DARK_GRAY); 
        tfield.selectAll(); 
       } 
      } 
     });  
     topPanel.add(tfield, BorderLayout.PAGE_END);   

     getContentPane().add(topPanel);  

     setSize(200, 100); 
     setVisible(true);   

     while (username == null) 
     { 
      username = JOptionPane.showInputDialog(null, "Please Enter USERNAME : "); 
     } 
     tfield.requestFocusInWindow(); 
    } 

    private void appendToPane(JTextPane tp, String msg, Color c) 
    { 
     StyleContext sc = StyleContext.getDefaultStyleContext(); 
     AttributeSet aset = sc.addAttribute(SimpleAttributeSet.EMPTY, StyleConstants.Foreground, c); 

     aset = sc.addAttribute(aset, StyleConstants.FontFamily, "Lucida Console"); 
     aset = sc.addAttribute(aset, StyleConstants.Alignment, StyleConstants.ALIGN_JUSTIFIED); 

     int len = tp.getDocument().getLength(); 
     tp.setCaretPosition(len); 
     tp.setCharacterAttributes(aset, false); 
     tp.replaceSelection(msg); 
    } 

    public static void main(String... args) 
    { 
     SwingUtilities.invokeLater(new Runnable() 
      { 
       public void run() 
       { 
        new TextPaneTest(); 
       } 
      }); 
    } 
} 
+0

Возможно, правильный путь, +1 – mKorbel

+0

Хе-хе, благодарю, надеюсь, тоже :-) –

Смежные вопросы