Вставка вертикального разделителя между значком и текстом в JMenuItem - PullRequest
3 голосов
/ 16 марта 2012

Я пытаюсь вставить / отобразить вертикальный разделитель между значком и текстом компонентов 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));

Когда я смотрю на элементы в меню, они выглядят следующим образом:

Current look of menu items

Интереснодостаточно, я заметил, что внешний вид компонентов JMenu по умолчанию соответствует желаемому виду:

enter image description here

Естественно, изменение всех моих компонентов 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);
    }

}

1 Ответ

3 голосов
/ 16 марта 2012

Если вы просто установите L & F на системный L & F в Windows 7, вы получите желаемый эффект:

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

Или вы хотите это на всех платформах / L & F?

...