diff --git a/src/java.desktop/windows/classes/com/sun/java/swing/plaf/windows/WindowsProgressBarUI.java b/src/java.desktop/windows/classes/com/sun/java/swing/plaf/windows/WindowsProgressBarUI.java index e53cc798e61d0..08b6854f17e5c 100644 --- a/src/java.desktop/windows/classes/com/sun/java/swing/plaf/windows/WindowsProgressBarUI.java +++ b/src/java.desktop/windows/classes/com/sun/java/swing/plaf/windows/WindowsProgressBarUI.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2020, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -139,8 +139,6 @@ protected void paintDeterminate(Graphics g, JComponent c) { // Do not paint the standard stripes from the skin, because they obscure // the text g.setColor(progressBar.getForeground()); - barRectHeight -= 2; - barRectWidth -= 2; if (barRectWidth <= 0 || barRectHeight <= 0) { return; @@ -151,8 +149,8 @@ protected void paintDeterminate(Graphics g, JComponent c) { BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL)); if (!vertical) { if (isLeftToRight) { - g2.drawLine(2, barRectHeight / 2 + 1, - amountFull - 2, barRectHeight / 2 + 1); + g2.drawLine(0, barRectHeight / 2, + amountFull, barRectHeight / 2); } else { g2.drawLine(2 + barRectWidth, barRectHeight / 2 + 1, diff --git a/test/jdk/javax/swing/JProgressBar/TestProgressBarUI.java b/test/jdk/javax/swing/JProgressBar/TestProgressBarUI.java new file mode 100644 index 0000000000000..c545baa8de5d3 --- /dev/null +++ b/test/jdk/javax/swing/JProgressBar/TestProgressBarUI.java @@ -0,0 +1,97 @@ +/* + * Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8318577 + * @summary Tests that tab movement is correct in RTL component orientation. + * @requires (os.family == "windows") + * @library /java/awt/regtesthelpers + * @build PassFailJFrame + * @run main/manual TestProgressBarUI + */ + +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.FlowLayout; + +import javax.swing.JComponent; +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.JProgressBar; +import javax.swing.SwingUtilities; +import javax.swing.UIManager; + +public class TestProgressBarUI { + + private static final String instructionsText = """ + Two progressbar "Good" and "Bad" + will be shown with different preferred size, + If the "Bad" progressbar is rendered at the same + height as "Good" progressbar, + without any difference in padding internally + the test passes, otherwise fails. """; + + public static void main(String[] args) throws Exception { + System.setProperty("sun.java2d.uiScale", "2.0"); + UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); + PassFailJFrame.builder() + .title("ProgressBar Instructions") + .instructions(instructionsText) + .rows(9) + .columns(36) + .testUI(TestProgressBarUI::doTest) + .build() + .awaitAndCheck(); + } + + public static JFrame doTest() { + JFrame frame = new JFrame("JProgressBar"); + + JPanel panel = new JPanel(new FlowLayout(20, 20, FlowLayout.LEADING)); + panel.setBackground(Color.white); + + JProgressBar p1 = new JProgressBar(0, 100); + p1.setValue(50); + p1.setStringPainted(true); + p1.setString("GOOD"); + p1.setPreferredSize(new Dimension(100, 21)); + panel.add(p1); + + JProgressBar p2 = new JProgressBar(0, 100); + p2.setValue(50); + p2.setStringPainted(true); + p2.setString("BAD"); + + p2.setPreferredSize(new Dimension(100, 22)); + panel.add(p2); + + JComponent c = (JComponent) frame.getContentPane(); + c.add(panel, BorderLayout.CENTER); + + frame.pack(); + frame.setLocationByPlatform(true); + return frame; + } +}