2012-03-28 82 views
0

上記の質問から、MSNとYahoo Messengerに似た簡単なウィンドウアプリを作った。ユーザーがメッセージとは、「送信」ボタンを押したときに、以下のコードはにtextAreaに、ユーザーの名前やメッセージを追加:この形式で表示していました java swing:特定の文字列変数の色を変更できますか?

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

は:

Username 
Message the user typed. 

はです"chatName?"の色を変更する解決策がありますか?私が見つけた唯一の情報は、コンポーネント全体の色を変更することです(これは私が望まないものです)。

+7

文字列が持っていないようです色。あなたはUIについて質問しています。 – SLaks

+2

@SLaksそれで「java swing:」を入れて「可能か」と尋ねました。 – SpicyWeenie

答えて

5

スイングコンポーネントでHTMLタグとスタイルを使用できます。このチュートリアル - 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

Hehe、ありがとう、私もそうだね:-) –

関連する問題