TL;DR
Есть ли способ избавиться от разрыва значка между границей MenuItem и определенным текстом? Он появляется, как только я создаю пункт меню, даже если я не устанавливаю значок, а также если я устанавливаю значок на ноль.
Длинная версия
Java-приложение, которое мы разрабатываем в нашей компании, существует с 90-х годов. В 2000-х он подвергся рестайлингу и использовал одну из этих ужасных, эхм, я имею в виду причудливых и красочных тем Synthetica. Так что теперь пришло время стать немного более серьезным и авторитетным, создать более элегантный и современный L&F. Вот почему я перешел с SyntheticaLookAndFeel
на встроенный SystemLookAndFeel
.
Хорошо, это было не так просто, как я думал раньше, но в любом случае... Я на правильном пути ;)
Единственное, что я изо всех сил пытаюсь заставить работать должным образом, это эти MenuItems
. Обычно в Java, если вы создаете простое меню или PopMenu и добавляете JMenuItem, оно должно выглядеть как обычное меню, содержащее только текст. В нашем приложении я могу делать все, что захочу, оно ВСЕГДА показывает пробел слева от каждого пункта меню.
Я обыскал все рабочее пространство в поисках (неправильной) предустановленной конфигурации. Я проверил UIManager и попробовал разные способы установки значков пунктов меню, но ничего полезного не нашел. Я даже создал новый класс EmptyIcon
, который задает значок шириной 1 пиксель и устанавливает его в качестве предустановки в моем UIManager.
// The empty icon class
public class EmptyIcon implements Icon {
private int width = 1, height = 0;
@Override
public void paintIcon(Component c, Graphics g, int x, int y) {}
@Override
public int getIconWidth() {
return width;
}
@Override
public int getIconHeight() {
return height;
}
}
// set this config in the gui configuration file
UIManager.put("MenuItem.arrowIcon", new EmptyIcon());
UIManager.put("MenuItem.checkIcon", new EmptyIcon());
Пока ничего не помогло. Кто-нибудь знает, откуда такое поведение? Где я должен искать, чтобы найти эту неправильную конфигурацию?
Есть ли способ заставить пользовательский интерфейс избавиться от этих значков?
Чтобы получить лучшее представление, вы можете найти несколько фотографий ниже. Это строка главного меню:
Это простое всплывающее меню, которое я только что создал:
И это код, который я пытался использовать, чтобы удалить пробел:
jMenuItem1.setIcon(null);
jMenuItem1.setHorizontalAlignment(JMenuItem.LEFT);
jMenuItem1.setHorizontalTextPosition(JMenuItem.LEFT);
jMenuItem1.setIconTextGap(0);
jMenuItem1.setMargin(new Insets(0, 0, 0, 0));
jMenuItem1.setPressedIcon(null);
jMenuItem1.setText("TEST TEST TEST");
JMenuItem
объекты вJMenu
. Вы можете добавить любойJComponent
. См. этот ответ для примера. - person Abra   schedule 30.10.2020