Java Swing:进度条字体颜色修改
2017-07-31 21:17
330 查看
最近无聊想玩一玩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里面获取,那么颜色的修改应该也是在这里修改。尝试了一下,果然有效,下面是关键的两行代码:
效果图片:
注意一点:这两行代码要在放在实例化JProgressBar之前,否则需要在这两行代码后面加上JProgressBar对象的repaint()方法来刷新该组件。
相关代码:
后来去查看各种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(); } }
相关文章推荐
- Word 中修改字体、字体大小、字体颜色的源代码
- IOS修改标题栏字体颜色、修改导航栏字体颜色
- QTextEdit中选中文本修改字体与颜色,全部文本修改字体与颜色
- iOS-修改UITextField的placeholder字体颜色、大小
- iOS修改UITextField的placeholder的字体颜色大小
- 修改进度条颜色记录
- eclipse的字体颜色修改
- 使用selector修改TextView中字体的颜色
- Ext.Net 1.x_Ext.Net_修改grid行或者列的背景颜色和字体颜色
- 修改UITextfield的Placeholder字体的颜色
- 使用selector修改TextView中字体的颜色
- 在textarea里面插入图片,修改字体大小和颜色(文本富编辑)接上一篇
- ios7 修改searchbar 取消 字体 颜色
- vc修改列表框LISTBOX的背景颜色及字体颜色及其使用方法
- Android NumberPicker控件修改分割线颜色及字体颜色大小
- 终端修改字体颜色和背景色
- 通过js修改input、select默认字体颜色
- MFC中修改静态文本框中文字的字体、颜色
- 修改背景颜色&字体&窗口标题及大小
- 修改文件夹的背景图片和文件名字体颜色