Две иконки отображаются при использовании JMenuItem
setHorizontalTextPosition(SwingConstants.LEFT)
с Windows Look and Feel. Он отлично работает со стандартным Java Look и Feel.Двойные значки с JMenuItem setHorizontalTextPosition на Win
Я только что написал отчет об ошибке Java, разместив здесь для кого-либо другого, имеющего ту же проблему.
У кого-нибудь есть обходное решение? Благодарю.
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);
}
}
Может быть полезно опубликовать скриншот! а также ссылку на страницу отчета об ошибке, если она у вас есть! – flakes