最近在学Java,可能有同学和我一样想整点花活,下面给出控制台打印出颜色的代码
//\33[%d;%d;%dm可以更改输出样式,改变的内容包括字体颜色、背景颜色、样式(粗体、斜体、下划线)
//\33[%d;%d;%dm的第一个数字是前景色(字体颜色),范围30-38;第二个数字是背景色,范围40-47;第三个数字是样式,取值1,3,4
//使用\33[%d;%d;%dm更改样式后,以后的输出会按照更改的样式进行输出。再输出一个"\33[0m"恢复默认的样式
System.err.print("err");//打印红色
System.out.println("right");
//输出绿底行
System.out.print("\33[40;1m"+"文字1"+"\33[0m");
System.out.print("\33[41;1m"+"文字2"+"\33[0m");
System.out.print("\33[42;1m"+"文字3"+"\33[0m");
System.out.print("\33[43;1m"+"文字4"+"\33[0m");
System.out.print("\33[44;1m"+"文字5"+"\33[0m");
System.out.print("\33[45;1m"+"文字6"+"\33[0m");
System.out.print("\33[46;1m"+"文字7"+"\n\33[0m");
System.out.print("\33[47;1m"+"文字8"+"\n\33[0m");//斜杠n可以维持状态到本行结尾
System.out.println("\33[47;1m"+"文字test1");
System.out.println("文字test2");
// 背景色 +"\n\33[0m"
System.out.print("\33[30;48;1m"+"文字11"+"\n\33[0m");
System.out.print(""+"\33[31;49;1m"+"文字12"+"\n\33[0m"+"");
System.out.print("\33[32;50;1m"+"文字13"+"\n\33[0m");
System.out.print(""+"\33[33;50;1m"+"文字14"+"\n\33[0m");
System.out.print(""+"\33[34;50;1m"+"文字15"+"\n\33[0m"+"");
System.out.print("\33[35;50;1m"+"文字16"+"\n\33[0m");
System.out.print(""+"\33[36;50;1m"+"文字17"+"\33[0m"+"");
System.out.println("\33[37;50;1m"+"文字18"+"\n\33[0m");
System.out.println("\33[37;50;2m"+"文字19"+"\n\33[0m");
System.out.println("\33[37;50;3m"+"文字20"+"\33[0m");
System.out.println("\33[38;50;4m"+"文字21"+"\33[0m");
//字体颜色
System.out.println("\33[31;42;4m"+"test文字21"+"\33[0m");
以上来是原理,取材于本站大佬,直接在上面更改文字也是可以的,考虑到使用不够简单,以下是写的工具类
/** 颜色使用:(1)只需将此工具类【复制到同一个模块】内,直接调用方法即可,例子可以直接复制
例一:ColorChange.blue();System.out.println("Java 是世界上最美丽的语言,这句话是蓝色的");
例二:ColorChange.blue("Java 是世界上最美丽的语言,这句话是蓝色的");//版本新增【new】
(2)new ColorChange对象,这样调用的时候可以更改名字
例一:ColorChange cg=new ColorChange;
cg.blue();System.out.println("Java 是世界上最美丽的语言,这句话是蓝色的");
例二:ColorChange cg=new ColorChange;
cg.blue("Java 是世界上最美丽的语言,这句话是蓝色的");//版本新增【new】
(3)后台进程,随机改变main方法打印的颜色//版本新增【new】
例一:new ColorChange().start();
ColorChange.testWords();//测试打印语句
例二:ColorChange cg=new ColorChange();
cg.start();
*///ColorChange帮助文档
public class ColorChange extends Thread{
public ColorChange() {
}
@Override
public synchronized void start() {
super.setDaemon(true);
super.setPriority(10);
super.start();
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public ColorChange(String name) {
super(name);
}
public static void testWords(){ System.out.println("Java 是世界上最美丽的语言1");System.out.println("Java 是世界上最美丽的语言2");System.out.println("Java 是世界上最美丽的语言3");System.out.println("Java 是世界上最美丽的语言4");System.out.println("Java 是世界上最美丽的语言5");System.out.println("Java 是世界上最美丽的语言6");System.out.println("Java 是世界上最美丽的语言7");System.out.println("Java 是世界上最美丽的语言8");}
private static final String[] color = {"\33[30;48;1m",//黑色
"\33[31;49;1m",//红色
"\33[32;49;1m",//绿色
"\33[33;49;1m",//黄色
"\33[34;49;1m",//蓝色
"\33[35;49;1m",//紫色
"\33[36;49;1m",//蓝绿色
"\33[38;49;1m",//灰色
"\33[39;49;1m",//白色
"\33[0m"};//还原
private static int a = 0;
private static Random r = new Random();
public static void random() { System.out.print(color[r.nextInt(color.length)]); }
public static void common() { a = (a + 1) % color.length;System.out.print(color[a]); }
public static void common(int i) { a = (a + i) % color.length;System.out.print(color[a]); }
public static void black() { System.out.print("\33[30;48;1m"); }
public static void red() { System.out.print("\33[31;49;1m"); }
public static void green() { System.out.print("\33[32;50;1m"); }
public static void yellow() { System.out.print("\33[33;50;1m"); }
public static void blue() { System.out.print("\33[34;50;1m"); }
public static void purple() { System.out.print("\33[35;50;1m"); }
public static void blueGreen() { System.out.print("\33[36;50;1m"); }
public static void gray() { System.out.print("\33[37;50;1m"); }
public static void recover() { System.out.print("\33[0m"); }
public static void Black(String s) { System.out.print("\33[30;48;1m" + s + "\33[0m"); }
public static void Red(String s) { System.out.print("\33[31;48;1m" + s + "\33[0m");}
public static void Green(String s) { System.out.print("\33[32;48;1m" + s + "\33[0m"); }
public static void Yellow(String s) { System.out.print("\33[33;48;1m" + s + "\33[0m"); }
public static void Blue(String s) { System.out.print("\33[34;48;1m" + s + "\33[0m"); }
public static void Purple(String s) { System.out.print("\33[35;48;1m" + s + "\33[0m");}
public static void BlueGreen(String s) { System.out.print("\33[36;48;1m" + s + "\33[0m"); }
public static void Gray(String s) { System.out.print("\33[37;48;1m" + s + "\33[0m"); }
public static void Recover(String s) { System.out.print("\33[38;48;1m" + s + "\33[0m"); }
public static String getBlack(String s) { return ("\33[30;48;1m" + s + "\33[0m"); }
public static String getRed(String s) { return ("\33[31;48;1m" + s + "\33[0m"); }
public static String getGreen(String s) { return ("\33[32;48;1m" + s + "\33[0m"); }
public static String getYellow(String s) { return ("\33[33;48;1m" + s + "\33[0m"); }
public static String getBlue(String s) { return ("\33[34;48;1m" + s + "\33[0m"); }
public static String getPurple(String s) { return ("\33[35;48;1m" + s + "\33[0m");}
public static String getBlueGreen(String s) { return ("\33[36;48;1m" + s + "\33[0m"); }
public static String getGray(String s) { return ("\33[37;48;1m" + s + "\33[0m"); }
public static String getRecover(String s) { return ("\33[38;48;1m" + s + "\33[0m"); }
@Override
public void run() { while (true){common();
//System.out.println("default");
try {
Thread.sleep(0);
} catch (InterruptedException e) {
e.printStackTrace();
}}
}
}
/*
//拓展颜色代码
System.out.print("\33[40;1m"+"文字1"+"\33[0m");//直接在所需文字边上添加颜色代码(左)和颜色恢复代码(右)
System.out.print("\33[41;1m"+"文字2"+"\33[0m");
System.out.print("\33[42;1m"+"文字3"+"\33[0m");
System.out.print("\33[43;1m"+"文字4"+"\33[0m");
System.out.print("\33[44;1m"+"文字5"+"\33[0m");
System.out.print("\33[45;1m"+"文字6"+"\33[0m");
System.out.print("\33[46;1m"+"文字7"+"\33[0m");
System.out.print("\33[47;1m"+"文字8"+"\33[0m");
System.out.println("\33[47;1m"+"文字test1");//也可以不添加恢复代码
System.out.println("文字test2");//继承颜色
【23-3-25__】1)增加了setColor(s)方法二,可以将传入的String类型变颜色打印;(在【23-4-02 11:17:__】已优化为Color())
2)增加了getColor(s),可以将传入的String 对象添加颜色代码,并return;
【23-4-02 11:17:__】1)优化了setColor()方法,以重载方式,归类到了Color()方法,代码更加简洁,使用方法见方法一
2)增加了进程后台更改颜色,只需要启动线程,之后打印的语句都会随机变色
——写这个会显得更高级一点
*/
使用方法是在同一个Module(模块)下新建一个java类文件,命名为ColorChange.java,然后复制上文代码,就可以在需要的java文件中写ColorChange.blue();就可以将之后的打印语句改为蓝色,同理可以改成其他颜色。
ColorChange.blue();System.out.println("Java 是世界上最美丽的语言,这句话是蓝色的");//更改之后颜色
ColorChange.blue("Java 是世界上最美丽的语言,这句话也是蓝色的");//更改本次颜色
以上只能改一个颜色有点麻烦,考虑到有时想来回换颜色,ColorChange类有改色common方法和random方法,可以在for循环中使用,这样可以每次换一个颜色
for(int i=0;i<=5;i++){
ColorChange.common();//顺序换色
System.out.println("Java是世界上最美丽的语言~");
}
for(int i=0;i<=5;i++){
ColorChange.random();//随机换色
System.out.println("Java是世界上最美丽的语言~");
}
考虑到这样还是很麻烦,只能在循环中使用,最近学习了多线程,刚好写了个线程方法,可以在后台让ColorChange改色线程一直执行 ,并设置为保护线程,可伴随着main方法结束而结束,使用方法如下:
new ColorChange().start();//可后台随机改色
由于线程改色频率不固定,这种方法很简单但是大约每 8行输出才看得到效果……但是如果用启动多个线程去改色效果会更好一点点,大约每4行以上改色一次,或许
new ColorChange().start();//1
new ColorChange().start();//2
new ColorChange().start();//3 启动3个线程改色
目前ColorChange工具类里只能改文字前景色,后续或许会增加文字背景色的更改