【问题标题】:JProgressBar background color does not appearJProgressBar 背景色不出现
【发布时间】:2017-11-28 06:06:34
【问题描述】:

我为我的JProgressBar 制作了一个自定义用户界面,如下所示:

public class BarUI extends BasicProgressBarUI {
    private Rectangle r = new Rectangle();
    @Override
    protected void paintIndeterminate(Graphics g, JComponent c) {
        Graphics2D G2D = (Graphics2D) g;
        G2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
            RenderingHints.VALUE_ANTIALIAS_ON);
        //r = getBox(r);
        //g.setColor(c.getForeground());
        //g.fillRect(r.x,r.y,r.width,r.height);
    }
}

这很好用,并将进度条的前景色更改为所需的颜色。问题是我无法更改其背景颜色。 我尝试了以下选项,但都不起作用:
选项 1:
c.setBackground(new Color(184, 184, 184,255));
选项 2:
((Graphics2D) g).setBackground(new Color(184, 184, 184,255));

为什么这不能正常工作?
更新
我对代码进行了更多修改,并从 BarUI 类中删除了最后 3 行,因为它们不需要它们。这也是我用来在框架内制作实际进度条的代码:

Bar.setUI(new BarUI());
Bar.setSize(new Dimension(180,2));
Bar.setBackground(new Color(184, 184, 184,255));
Bar.setForeground(new Color(0, 126, 255,255));

【问题讨论】:

  • 为什么不呢,使用g.setColor(c.getBackground()) 然后用它填充组件,然后绘制前景? r 是否有可能填充整个组件?
  • @MadProgrammer 我不明白你想说什么。我也更新了问题。
  • 我想说的是,您是否真的尝试过自己(paintIndeterminate)使用与绘制框相同的技术来绘制背景
  • @MadProgrammer 你的想法奏效了,非常感谢。

标签: java swing colors jprogressbar


【解决方案1】:

它会“显示”JProgressBar 的默认 opaquefalse,默认情况下进度条是透明的

所以,如果我在代码中添加bar.setOpaque(true);,背景就会被绘制

import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.plaf.basic.BasicProgressBarUI;

public class Test {

    public static void main(String[] args) {
        new Test();
    }

    public Test() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(new TestPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class TestPane extends JPanel {

        private JProgressBar bar;

        public TestPane() {
            bar = new JProgressBar();
            bar.setIndeterminate(true);
            bar.setOpaque(true);
            bar.setUI(new BarUI());
            bar.setPreferredSize(new Dimension(180, 10));
            bar.setBackground(new Color(184, 184, 184, 255));
            bar.setForeground(new Color(0, 126, 255, 255));
            add(bar);
        }

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(200, 200);
        }

    }

    public class BarUI extends BasicProgressBarUI {

        private Rectangle r = new Rectangle();

        @Override
        protected void paintIndeterminate(Graphics g, JComponent c) {
            Graphics2D G2D = (Graphics2D) g;
            G2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                                                     RenderingHints.VALUE_ANTIALIAS_ON);
            r = getBox(r);
            g.setColor(c.getForeground());
            g.fillRect(r.x,r.y,r.width,r.height);
        }
    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多