JProgressBar百分比不同進度條顏色不同
1、需求
需要做一個JProgressBar,1/3以下時為紅色,2/3以下時為黃色,以上為綠色有一點像預警系統
2、代碼實現GyrJProgressBar
GyrJProgressBar中利用自定義的ProgressBarUI來改變進度條的顏色
package org.noahx.ui.progressbar;
import javax.swing.*;
import javax.swing.plaf.basic.BasicProgressBarUI;
import java.awt.*;
/**
* Created with IntelliJ IDEA.
* User: noah
* Date: 7/24/12
* Time: 8:43 PM
* To change this template use File | Settings | File Templates.
*/
public class GyrJProgressBar extends JProgressBar {
private class GyrProgressUI extends BasicProgressBarUI {
private double greenOverPercent=(2d/3d)*100d;
private double yellowOverPercent=(1d/3d)*100d;
private JProgressBar jProgressBar;
private GyrProgressUI(JProgressBar jProgressBar) {
this.jProgressBar = jProgressBar;
}
@Override
protected void paintDeterminate(Graphics g, JComponent c) {
double percent=100d*this.jProgressBar.getValue()/(this.jProgressBar.getMaximum()-this.jProgressBar.getMinimum());
if (percent > this.greenOverPercent) {
this.jProgressBar.setForeground(Color.green);
} else if (percent > this.yellowOverPercent) {
this.jProgressBar.setForeground(Color.yellow);
} else {
this.jProgressBar.setForeground(Color.red);
}
super.paintDeterminate(g, c);
}
}
public GyrJProgressBar() {
init();
}
public GyrJProgressBar(int orient) {
super(orient);
init();
}
public GyrJProgressBar(int min, int max) {
super(min, max);
init();
}
public GyrJProgressBar(int orient, int min, int max) {
super(orient, min, max);
init();
}
public GyrJProgressBar(BoundedRangeModel newModel) {
super(newModel);
init();
}
private void init(){
this.setBorderPainted(false);
this.setUI(new GyrProgressUI(this));
}
}
3、效果

本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!