void (Graphics g, JComponent c) { Graphics2D g2 = (Graphics2D)g.create(); try { g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_NORMALIZE); Rectangle r = new Rectangle(progressBar.getSize()); if (c.isOpaque() && c.getParent() != null) { g2.setColor(c.getParent().getBackground()); g2.fill(r); } Insets i = progressBar.getInsets(); JBInsets.removeFrom(r, i); int amountFull = getAmountFull(i, r.width, r.height); Shape fullShape, coloredShape; int orientation = progressBar.getOrientation(); if (orientation == SwingConstants.HORIZONTAL) { int pHeight = progressBar.getPreferredSize().height; int yOffset = r.y + (r.height - pHeight) / 2; fullShape = getShapedRect(r.x, yOffset, r.width, pHeight, pHeight); coloredShape = getShapedRect(r.x, yOffset, amountFull, pHeight, pHeight); } else { int pWidth = progressBar.getPreferredSize().width; int xOffset = r.x + (r.width - pWidth) / 2; fullShape = getShapedRect(xOffset, r.y, pWidth, r.height, pWidth); coloredShape = getShapedRect(xOffset, r.y, pWidth, amountFull, pWidth); } g2.setColor(getRemainderColor()); g2.fill(fullShape); // Use foreground color as a reference, don't use it directly. This is done for compatibility reason. // Colors are hardcoded in UI delegates by design. If more colors are needed contact designers. Color foreground = progressBar.getForeground(); if (foreground == ColorProgressBar.RED) { g2.setColor(FAILED_COLOR); } else if (foreground == ColorProgressBar.GREEN) { g2.setColor(PASSED_COLOR); } else if (foreground == ColorProgressBar.YELLOW) { g2.setColor(WARNING_COLOR); } else { g2.setColor(getFinishedColor(c)); } g2.fill(coloredShape); // Paint text if (progressBar.isStringPainted()) { paintString(g, i.left, i.top, r.width, r.height, amountFull, i); } } finally { g2.dispose(); } }