Different font color in a JTextField

筅森魡賤 提交于 2019-12-05 01:51:42

问题


How to display a text in a JTextField ot jLabel with 2 colors.

for example:

1 0 0 0 1 1 1 0 1

textField.setForeground(Color.RED ,BLUE);

Positioning individual RED for example


回答1:


Different font color in a JTextField

You can't achieve it with JTextField instead use JEditorPane or JTextPane.

Read more about How to Use Editor Panes and Text Panes


Sample code using JTextPane directly from HERE

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

public class StylesExample12 {
    public static void main(String[] args) {
        JFrame f = new JFrame("Styles Example 1");

        // Create the StyleContext, the document and the pane
        StyleContext sc = new StyleContext();
        final DefaultStyledDocument doc = new DefaultStyledDocument(sc);
        JTextPane pane = new JTextPane(doc);

        // Create and add the style
        final Style heading2Style = sc.addStyle("Heading2", null);
        heading2Style.addAttribute(StyleConstants.Foreground, Color.red);
        heading2Style.addAttribute(StyleConstants.FontSize, new Integer(16));
        heading2Style.addAttribute(StyleConstants.FontFamily, "serif");
        heading2Style.addAttribute(StyleConstants.Bold, new Boolean(true));

        try {
            SwingUtilities.invokeAndWait(new Runnable() {
                public void run() {
                    try {
                        // Add the text to the document
                        doc.insertString(0, text, null);

                        // Finally, apply the style to the heading
                        doc.setParagraphAttributes(0, 1, heading2Style, false);
                    } catch (BadLocationException e) {
                    }
                }
            });
        } catch (Exception e) {
            System.out.println("Exception when constructing document: " + e);
            System.exit(1);
        }

        f.getContentPane().add(new JScrollPane(pane));
        f.setSize(400, 300);
        f.setVisible(true);
    }

    public static final String text = "Attributes, Styles and Style Contexts\n"
            + "The simple PlainDocument class that you saw in the previous "
            + "chapter is only capable of holding text. The more complex text "
            + "components use a more sophisticated model that implements the "
            + "StyledDocument interface. StyledDocument is a sub-interface of "
            + "Document that contains methods for manipulating attributes that "
            + "control the way in which the text in the document is displayed. "
            + "The Swing text package contains a concrete implementation of "
            + "StyledDocument called DefaultStyledDocument that is used as the "
            + "default model for JTextPane and is also the base class from which "
            + "more specific models, such as the HTMLDocument class that handles "
            + "input in HTML format, can be created. In order to make use of "
            + "DefaultStyledDocument and JTextPane, you need to understand how "
            + "Swing represents and uses attributes.\n";

}

snapshot:


EDIT

As per your question try this sample code: (change it as per your requirement)

    // Create and add the style
    final Style redStyle = sc.addStyle("RED", null);
    redStyle.addAttribute(StyleConstants.Foreground, Color.red);
    redStyle.addAttribute(StyleConstants.FontSize, new Integer(16));

    final Style blueStyle = sc.addStyle("BLUE", null);
    blueStyle.addAttribute(StyleConstants.Foreground, Color.blue);
    blueStyle.addAttribute(StyleConstants.FontSize, new Integer(14));
    blueStyle.addAttribute(StyleConstants.Bold, new Boolean(true));

    try {
        SwingUtilities.invokeAndWait(new Runnable() {
            public void run() {
                try {
                    String[] text = { "1a", "0b", "0c", "0d", "1e", "1f", "1g", "0h", "1i" };
                    for (int i = 0; i < text.length; i++) {
                        String s = text[i];

                        // Finally, apply the style to the heading
                        int start = pane.getText().length();
                        Style style = null;
                        if (i % 2 == 0) {
                            style = redStyle;
                        } else {
                            style = blueStyle;
                        }
                        // Add the text to the document
                        doc.insertString(start, s + " ", style);
                    }
                } catch (BadLocationException e) {
                }
            }
        });
    } catch (Exception e) {
        System.out.println("Exception when constructing document: " + e);
        System.exit(1);
    }

snapshot:



来源:https://stackoverflow.com/questions/24104928/different-font-color-in-a-jtextfield

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!