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