Java Swing:进度条字体颜色修改
程序员文章站
2024-02-02 11:56:13
...
最近无聊想玩一玩gui,在自定义进度条时发现了一个小问题,进度条的背景颜色和前景颜色都可以使用JProgressBar本身自带的方法修改,但是前面的字体颜色却修改不了,造成修改背景颜色后字体的颜色会和背景颜色相互对冲,整个外观非常的丑陋。一开始去百度了一堆发现好像没有一个真正的解决方法。
后来去查看各种API,发现javax.swing.plaf.basic包中BasicProgressBarUI类和进度条的颜色有些关联,然后去看了下该类的源代码(位置在JRE System Library/rt.jar/javax.swing.plaf.basic/BasicProgressBarUI),里面果然发现了跟颜色有关的变量
注释的意思大概是一个字体颜色是初始颜色,另一个字体颜色是进度条覆盖字体时的颜色,具体看下我的截图就知道了。
接着找下关于该变量的信息,在这个类里查找这两个变量,定位到如下部分:
再去UIManager类里面找到了一个put(Object key, Object value)方法,既然颜色从UIManager里面获取,那么颜色的修改应该也是在这里修改。尝试了一下,果然有效,下面是关键的两行代码:
//未覆盖前的进度条颜色
UIManager.put("ProgressBar.selectionBackground",Color.RED);
//覆盖后的进度条颜色
UIManager.put("ProgressBar.selectionForeground",Color.BLACK)
效果图片:
注意一点:这两行代码要在放在实例化JProgressBar之前,否则需要在这两行代码后面加上JProgressBar对象的repaint()方法来刷新该组件。
相关代码:
package com.hlx.JProgressBar;
import java.awt.Color;
import javax.swing.JProgressBar;
public class MyJProgressBar extends JProgressBar{
public MyJProgressBar(){
this.setSize(300, 100);
this.setValue(100);
this.setForeground(new Color(252,221,219));
this.setBounds(249, 237, 300, 100);
this.setVisible(true);
}
}
package com.hlx.JFrame;
import javax.swing.JFrame;
public class MyFrame extends JFrame {
public MyFrame(){
initFrame();
}
private void initFrame() {
this.setVisible(false);
this.setSize(800, 600);
this.setTitle("MyFrame");
this.setResizable(false);
this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
this.setLocationRelativeTo(null);
}
}
package com.hlx.JProgressBar;
import java.awt.Color;
import javax.swing.UIManager;
import com.hlx.JFrame.MyFrame;
public class JProgressBarTest {
public static void main(String[] args) {
MyFrame frame = new MyFrame();
//未覆盖前的进度条颜色
UIManager.put("ProgressBar.selectionBackground",Color.RED);
//覆盖后的进度条颜色
UIManager.put("ProgressBar.selectionForeground",Color.BLACK);
frame.getContentPane().setLayout(null);
MyJProgressBar myproBar = new MyJProgressBar();
frame.getContentPane().add(myproBar);
frame.setVisible(true);
frame.setVisible(true);
myproBar.setStringPainted(true);
new Thread(){
public void run(){
for(int i=0;i<=100;i++){
try{
Thread.sleep(100);
}catch(InterruptedException e){
e.printStackTrace();
}
myproBar.setValue(i);
}
myproBar.setString("升级完成!");
}
}.start();
}
}
上一篇: 揭秘FMX进度条样式修改
下一篇: php_mysqli.dll的有关问题
推荐阅读
-
Java Swing创建自定义闪屏:在闪屏上画进度条(一)
-
Java Swing:进度条字体颜色修改
-
Java Swing创建自定义闪屏:在闪屏上添加Swing进度条控件(二)
-
Java swing实现音乐播放器桌面歌词字体变色效果
-
WKWebView修改网页默认字体的字体,大小,颜色
-
如何修改pptv视频字幕大小 pptv修改视频字幕大小、颜色与字体教程
-
Android TextView 在java代码中改变字体的颜色的方法
-
Android使用selector修改TextView中字体颜色和背景色的方法
-
Android实现修改状态栏背景、字体和图标颜色的方法
-
iOS 修改alertViewController弹框的字体颜色及字体的方法