JDK-8152981 : Double icons with JMenuItem setHorizontalTextPosition on Win 10
  • Type: Bug
  • Component: client-libs
  • Sub-Component: javax.swing
  • Affected Version: 8u66,9
  • Priority: P4
  • Status: Resolved
  • Resolution: Fixed
  • OS: windows_7,windows_10
  • CPU: x86_64
  • Submitted: 2016-02-16
  • Updated: 2025-08-11
  • Resolved: 2016-05-25
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
JDK 8 JDK 9
8u121Fixed 9 b124Fixed
Related Reports
Causes :  
Relates :  
Description
FULL PRODUCT VERSION :
java version "1.8.0_66"
Java(TM) SE Runtime Environment (build 1.8.0_66-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.66-b17, mixed mode)


ADDITIONAL OS VERSION INFORMATION :
Microsoft Windows [Version 10.0.10586]

A DESCRIPTION OF THE PROBLEM :
The icon appears twice, on the left AND the right when you change the default position in a JMenuItem using setHorizontalTextPosition() with Windows Look and Feel.

STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
See self contained test below. 

Or just create a JMenuItem with an icon and text, then change the default position of the icon using setHorizontalTextPosition(SwingConstants.LEFT)

EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Can change the icon position in a JMenuItem using setHorizontalTextPosition() 
ACTUAL -
The icon appears twice, on the left and the right side of the JMenuItem

REPRODUCIBILITY :
This bug can be reproduced always.

---------- BEGIN SOURCE ----------
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.BufferedImage;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.SwingConstants;
import javax.swing.UIManager;


public class WinMenuItemIcon {

	public static void main(String[] args) {
		
		//NOTE: Bug happens with Windows L&F
        String name = UIManager.getSystemLookAndFeelClassName();
        try {
			UIManager.setLookAndFeel( name );
		} catch (Exception e) {
			e.printStackTrace();
		}

		JFrame frame = new JFrame();
		frame.setTitle("Test");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		JMenuBar menuBar = new JMenuBar();
		JMenu menu = new JMenu("Menu");
		
		ImageIcon icon = createIcon();
		
		JMenuItem menuItem = new JMenuItem("Command", icon);
		menuItem.setHorizontalTextPosition(SwingConstants.LEFT);
		menu.add(menuItem);
		menuBar.add(menu);

		frame.setJMenuBar(menuBar);
		frame.setPreferredSize(new Dimension(500, 500));
		frame.pack();
		frame.setVisible(true);
	}
	
	protected static ImageIcon createIcon() {
		BufferedImage bi = new BufferedImage(25,25,BufferedImage.TYPE_INT_ARGB);
		Graphics g = bi.createGraphics();
		g.setColor(Color.RED);
		g.fillOval(0,0, 25, 25);
		return new ImageIcon(bi);
	}
	
}




---------- END SOURCE ----------

CUSTOMER SUBMITTED WORKAROUND :
Don't use Windows Look and Feel. Works fine with default Java look and feel.


Comments
URL: http://hg.openjdk.java.net/jdk9/jdk9/jdk/rev/5fb24aaf6945 User: lana Date: 2016-06-22 19:53:10 +0000
22-06-2016

URL: http://hg.openjdk.java.net/jdk9/client/jdk/rev/5fb24aaf6945 User: psadhukhan Date: 2016-05-25 09:29:38 +0000
25-05-2016

Issue reproduces with JDK9, Win7. Icon is displayed twice on left and right of MenuItem text, refer attached screenshot. Issue occurs only If this call is present, menuItem.setHorizontalTextPosition(SwingConstants.LEFT)
12-04-2016

does it affect 9 ?
29-03-2016