diff --git a/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicTabbedPaneUI.java b/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicTabbedPaneUI.java index 80377239e6e..02df5fa9845 100644 --- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicTabbedPaneUI.java +++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicTabbedPaneUI.java @@ -1138,7 +1138,11 @@ public class BasicTabbedPaneUI extends TabbedPaneUI implements SwingConstants { int tabIndex, Icon icon, Rectangle iconRect, boolean isSelected ) { if (icon != null) { + // Clip the icon within iconRect bounds + Shape oldClip = g.getClip(); + ((Graphics2D)g).clip(iconRect); icon.paintIcon(tabPane, g, iconRect.x, iconRect.y); + g.setClip(oldClip); } } diff --git a/jdk/src/java.desktop/share/classes/javax/swing/plaf/synth/SynthGraphicsUtils.java b/jdk/src/java.desktop/share/classes/javax/swing/plaf/synth/SynthGraphicsUtils.java index e91257ed0f0..844120bb3eb 100644 --- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/synth/SynthGraphicsUtils.java +++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/synth/SynthGraphicsUtils.java @@ -326,7 +326,11 @@ public class SynthGraphicsUtils { */ public void paintText(SynthContext ss, Graphics g, String text, Rectangle bounds, int mnemonicIndex) { + // Clip the text within textRect bounds + Shape oldClip = g.getClip(); + ((Graphics2D)g).clip(bounds); paintText(ss, g, text, bounds.x, bounds.y, mnemonicIndex); + g.setClip(oldClip); } /** diff --git a/jdk/src/java.desktop/share/classes/javax/swing/plaf/synth/SynthTabbedPaneUI.java b/jdk/src/java.desktop/share/classes/javax/swing/plaf/synth/SynthTabbedPaneUI.java index 8e59afe9342..606cf19418c 100644 --- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/synth/SynthTabbedPaneUI.java +++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/synth/SynthTabbedPaneUI.java @@ -621,15 +621,17 @@ public class SynthTabbedPaneUI extends BasicTabbedPaneUI if (tabPane.getTabComponentAt(tabIndex) == null) { String title = tabPane.getTitleAt(tabIndex); + String clippedTitle = title; Font font = ss.getStyle().getFont(ss); FontMetrics metrics = SwingUtilities2.getFontMetrics(tabPane, g, font); Icon icon = getIconForTab(tabIndex); layoutLabel(ss, tabPlacement, metrics, tabIndex, title, icon, tabRect, iconRect, textRect, isSelected); - + clippedTitle = SwingUtilities2.clipStringIfNecessary(null, metrics, + title, textRect.width); paintText(ss, g, tabPlacement, font, metrics, - tabIndex, title, textRect, isSelected); + tabIndex, clippedTitle, textRect, isSelected); paintIcon(g, tabPlacement, tabIndex, icon, iconRect, isSelected); } diff --git a/jdk/test/javax/swing/JTabbedPane/4310381/bug4310381.java b/jdk/test/javax/swing/JTabbedPane/4310381/bug4310381.java index ccc3bc094c2..aa41d5c4c03 100644 --- a/jdk/test/javax/swing/JTabbedPane/4310381/bug4310381.java +++ b/jdk/test/javax/swing/JTabbedPane/4310381/bug4310381.java @@ -27,7 +27,7 @@ /* * @test - * @bug 4310381 + * @bug 4310381 8075918 * @summary Text in multi-row/col JTabbedPane tabs can be truncated/clipped * @author Charles Lee @run applet/manual=yesno bug4310381.html