Я пытаюсь вставить / отобразить вертикальный разделитель между значком и текстом компонентов JMenuItem в моих приложениях.Я создаю JMenuItem следующим образом (примерно):
JMenuItem cutMenuItem = new JMenuItem();
cutMenuItem.setName("cutMenuItem");
cutMenuItem.setRequestFocusEnabled(false);
cutMenuItem.setText("cut");
cutMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, KeyEvent.CTRL_MASK));
Когда я смотрю на элементы в меню, они выглядят следующим образом:
Интереснодостаточно, я заметил, что внешний вид компонентов JMenu по умолчанию соответствует желаемому виду:
Естественно, изменение всех моих компонентов JMenuItem на компоненты JMenu недопустиморешение.Как я могу получить компоненты JMenuItem в моем приложении с вертикальным разделителем / границей между значком и текстом?
Это зависит от L & F?Для записи, я нахожусь на машине с Windows 7.Я попытался установить LayoutManager для объектов JMenuItem в BorderLayout:
cutMenuItem.setLayout(new BorderLayout(5,0));
Ожидается увидеть горизонтальный разрыв между значком и текстом, но это, похоже, не имеет значения.
РЕДАКТИРОВАТЬ: Вот очень фундаментальный SSCCE
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.KeyStroke;
import javax.swing.UIManager;
import java.awt.Dimension;
import java.awt.event.KeyEvent;
public class FakeApp {
public static void main(String args[]) {
JFrame frame = new JFrame();
JMenuBar menuBar = new JMenuBar();
JMenu menu = new JMenu("Menu");
JMenuItem menuItem = new JMenuItem();
menuItem.setName("cutMenuItem");
menuItem.setRequestFocusEnabled(false);
menuItem.setText("cut");
menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, KeyEvent.CTRL_MASK));
menuItem.setIcon(UIManager.getIcon("OptionPane.errorIcon"));
menu.add(menuItem);
menuBar.add(menu);
frame.getRootPane().setJMenuBar(menuBar);
frame.add(new JPanel());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setPreferredSize(new Dimension(300, 300));
frame.pack();
frame.setVisible(true);
}
}