【问题标题】:How to set a string's color [closed]如何设置字符串的颜色[关闭]
【发布时间】:2009-02-19 13:13:19
【问题描述】:

有谁知道我将如何设置将使用System.out 打印的字符串的颜色?
这是我目前拥有的代码:

System.out.println("TEXT THAT NEEDS TO BE A DIFFERENT COLOR.");

【问题讨论】:

  • 字符串没有颜色信息。请指定您要执行的操作。它是一个 Swing 应用程序吗?还是您需要在终端屏幕上显示 ANSI 颜色?
  • 只是纯文本。我有一个带有分配编号的字符串列表。我要做的是根据该数字设置字符串的颜色,因此如果数字为 2,则在打印到屏幕之前将该字符串的颜色设置为红色。
  • 还不清楚要在哪里打印字符串
  • 我很确定他们想把它发送到控制台。
  • 我建议不要关闭这个问题,而是更改标题/内容。这是谷歌搜索“java print red color console”时的第三次点击。

标签: java colors system.out


【解决方案1】:

对于 linux (bash),以下代码适用于我:

System.out.print("\033[31mERROR  \033[0m");

\033[31m 将颜色切换为红色,\033[0m 将其切换回正常。

【讨论】:

  • 但是windows呢,我试过这个代码它在命令提示符下不起作用
【解决方案2】:

如果您要打印到标准输出,这取决于您要打印到的终端。您可以在 xterms 和其他类似的终端仿真器上使用 ansi 转义码。 这是一个 bash 代码 sn-p,它将打印 xterm、putty 和 Konsole 支持的所有 255 种颜色:

 for ((i=0;i<256;i++)); do echo -en "\e[38;5;"$i"m"$i" "; done

您可以在任何编程语言中使用这些转义码。最好依赖一个库来决定使用哪些代码,具体取决于架构和 TERM 环境变量的内容。

【讨论】:

    【解决方案3】:

    控制台

    请参阅Wikipedia page on ANSI escapes 了解完整的序列集合,包括颜色。

    但是对于 Java 中的一个简单示例(以红色打印)(您将其标记为 Java):

    System.out.println("\u001B31;1mhello world!");
    

    3 表示改变颜色,第一个 1 表示红色(绿色将是 2),第二个 1 表示在“明亮”模式下进行。

    图形界面

    但是,如果您想打印到 GUI,最简单的方法是使用 html:

    JEditorPane pane = new new JEditorPane();
    pane.setText("<html><font color=\"red\">hello world!</font></html>");
    

    有关此类事情的更多详细信息,请参阅the Swing Tutorial。也可以通过在 JTextPane 中使用样式。 Here is a helpful example 的代码可以使用 JTextPane 轻松完成此操作(从有用的评论中添加)。

    JTextArea 是一个single coloured Text component, as described here。它只能以一种颜色显示。您可以像这样为整个 JTextArea 设置颜色:

    JTextArea area = new JTextArea("hello world");
    area.setForeground(Color.red)
    

    【讨论】:

    • 刚刚试过这个。它只打印一个黑色方块,然后打印 31;1mhello world!黑色。
    • 我使用了“result.append("\u001B31;1mhello world!");"相反,结果是 JTextArea。那会有什么不同吗?
    • 此代码用于输出到文本窗口,并且只有在安装了 ANSI.sys 的情况下才能在 Windows/DOS 机器上工作。我刚刚添加了一个 swing 方法,因为您使用的是 GUI
    • 你能在 JTextArea 上使用它吗? (您使用编辑器窗格给出的示例)
    • Java 不喜欢您的 gui 示例中的术语“红色”,因为它不在引号中,并且它无法识别这样的术语。
    【解决方案4】:

    Google 显然有一个此类库: http://code.google.com/p/jlibs/wiki/AnsiColoring

    还有一篇 Javaworld 文章可以解决您的问题: http://www.javaworld.com/javaworld/javaqa/2002-12/02-qa-1220-console.html

    【讨论】:

    • 它在 googlecode 上,不是 by google。
    【解决方案5】:

    设置颜色()。假设您在 AWT 上下文中使用 Graphics g。

    更多信息请参考the documentation

    【讨论】:

      【解决方案6】:

      下载 jansi-1.4.jar 并设置类路径并尝试此代码 100% 工作:

      import org.fusesource.jansi.AnsiConsole;
      import static org.fusesource.jansi.Ansi.*;
      import static org.fusesource.jansi.Ansi.Color.*;
      
      public class SampleColour
      {
        public static void main(String[] args)
        {
          AnsiConsole.systemInstall();
      
          System.out.println(ansi().fg(RED).a("Hello World").reset());
          System.out.println("My Name is Raman");
      
          AnsiConsole.systemUninstall();
        }
      }
      

      【讨论】:

        【解决方案7】:

        我创建了一个名为 JCDP 的 API,以前的 JPrinter 代表 Java Colored Debug Printer。对于 Linux,它使用 WhiteFang 提到的 ANSI 转义码,但使用单词而不是更直观的代码来抽象它们。对于 Windows,它实际上包含 JAnsi 库,但在其上创建了一个抽象层,保持为 Linux 创建的直观和简单的界面。

        这个库是在MIT License 下获得许可的,所以请随意使用它。

        看看JCDP's github repository

        【讨论】:

          【解决方案8】:

          字符串不封装颜色信息。您是在考虑在控制台还是在 GUI 中设置颜色?

          【讨论】:

            【解决方案9】:
            public class colorString
            {
            
            public static void main( String[] args )
            {
                new colorString();   
            
            }
            
            public colorString( )
            {
                kFrame f = new kFrame();
                f.setSize( 400, 400 );
                f.setVisible( true );
            }
            
            private static class kFrame extends JFrame
            {
                @Override
                public void paint(Graphics g) 
                {
                    super.paint( g );
                    Graphics2D g2d = (Graphics2D)g;
                    g2d.setColor( new Color(255, 0, 0) );
                    g2d.drawString("red red red red red", 100, 100 );
                }
            }
            }
            

            【讨论】:

            • 这是一个好主意,但是否有可能让它在我已经创建的 Jframe 中设置字符串的颜色(而不是在新的 JFrame 中),因为我正在处理的类是一个 gui 和我想为文本着色并将其打印到 JTextArea?
            猜你喜欢
            • 2016-09-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-02-23
            • 1970-01-01
            • 1970-01-01
            • 2015-02-22
            相关资源
            最近更新 更多