如何设置字符串的颜色

16

请问如何设置将使用System.out打印的字符串的颜色?
这是我目前的代码:

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

字符串没有颜色信息。请指明您想要做什么。这是一个Swing应用程序吗?还是您需要在终端屏幕上使用ANSI颜色? - Rolf
这只是普通文本。我有一组带有指定编号的字符串列表。我要做的是根据该编号设置字符串的颜色,因此如果编号为2,则在打印到屏幕上之前将该字符串的颜色设置为红色。 - guess who
你想要在哪里打印这个字符串还不清楚。 - basszero
4
我很确定他们想要把它发送到控制台。 - Tim Frey
2
我建议修改这个问题的标题/内容,而不是关闭它。当在谷歌搜索“java print red color console”时,这是第三个结果。 - Christophe De Troyer
9个回答

23

控制台

有关ANSI转义序列的完整集合,包括颜色,请参见维基百科页面

但以Java为例(因为您标记了此问题),以下是一个简单的示例(打印红色文本):

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

其中的3表示改变颜色,第一个1表示红色(绿色为2),第二个1表示在“亮”模式下执行。

图形用户界面(GUI)

然而,如果你想要打印到GUI界面上,最简单的方法是使用HTML:

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

想要了解更多相关信息,请参考Swing教程。如果使用JTextPane中的样式,也可以实现这种效果。这里提供了一个有用的代码示例,可以轻松地在JTextPane中实现彩色文本(通过评论添加)。

JTextArea是一个单一颜色的文本组件,如此处所述。它只能显示一种颜色。您可以像这样设置整个JTextArea的颜色:

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

1
刚试了一下,它只打印一个黑色的正方形,然后是黑色的31;1mhello world!。 - guess who
我使用了"result.append("\u001B31;1mhello world!");",其中result是一个JTextArea。这样做会有什么区别吗? - guess who
1
此代码用于输出到文本窗口,在 Windows/DOS 计算机上只有在安装了 ANSI.sys 的情况下才能正常工作。我刚刚添加了一个 swing 方法,因为您正在使用 GUI。 - Nick Fortescue
你能在JTextArea上使用这个吗?(你给出的示例使用了编辑器面板) - guess who
如果我们想在控制台中打印字符串,该怎么办? - msc87
显示剩余6条评论

12

对于Linux(bash),以下代码对我有效:

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

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


但是对于Windows呢?我尝试了这段代码,但在命令提示符中它不起作用。 - Pankaj Nimgade

4

2
它在Google Code上,但它不是由Google开发的。 - weston

1
如果您要打印到标准输出(stdout),则取决于您要打印到的终端。您可以在xterms和其他类似的终端模拟器上使用ansi转义代码。 以下是一个bash代码片段,它将打印由xterm、putty和Konsole支持的所有255种颜色:
 for ((i=0;i<256;i++)); do echo -en "\e[38;5;"$i"m"$i" "; done

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


1

下载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();
  }
}

1

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

请参阅文档以获取更多信息。


1
我创建了一个名为JCDP(前身为JPrinter)的API,它代表着Java彩色调试打印机。对于Linux系统,它使用WhiteFang提到的ANSI转义码,但是使用单词来抽象化而不是代码,这样更加直观易懂。对于Windows系统,它实际上包含了JAnsi库,但是在其上创建了一个抽象层,保持了为Linux创建的直观简单界面。
该库基于MIT许可证授权,所以请放心使用。
请查看JCDP的Github存储库

0
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中? - guess who

0

字符串通常是一系列字符,可以是字面常量或某种变量。后者可能允许其元素被改变并且长度被更改,或者它可能是固定的(在创建后)。

根据您的问题,不清楚您实际想要什么。但是您可以将颜色信息存储到字符串变量中。您是否考虑将颜色设置为字符串变量?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接