Разделители пунктов меню не видны в среде GNOME (при использовании LAF "GTK") - PullRequest
1 голос
/ 24 декабря 2011

У меня есть настольное Java-приложение (редактор документов), для которого я недавно добавил строку меню, в которой, в свою очередь, есть пункты меню. Проблема в том, что - в моей рабочей среде GNOME (Ubuntu) разделители пунктов меню вообще не видны. Они видны, если я переключаю приложение L & F на Java (металлический) LaF по умолчанию или переключаю среду KDE среды рабочего стола в Ubuntu, но разделители пунктов меню никогда не видны в среде GNOME. Также я устанавливаю приложение L & F на «GTK». Если я заставлю L & F «мотивировать» разделители файлов, это будет хорошо видно.

Кто-нибудь еще сталкивался с подобной проблемой в среде Ubuntu GNOME? Я прилагаю приведенный ниже код - это просто и не думаю, что здесь есть какие-либо проблемы.

import java.awt.EventQueue;
import java.lang.reflect.InvocationTargetException;

import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class Test {
    static JFrame frame = null;
    static JMenuBar menubar = null;
    static JMenu filemenu = null;
    public static void main (String[] args) throws InterruptedException, 
        InvocationTargetException {
        EventQueue.invokeAndWait(new Runnable () {
            @Override
            public void run() {
                createAndShowGUI ();
            }
        });
    }

    private static void createAndShowGUI () {
        /* Set LAF to GTK LAF */
        try {
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.gtk.GTKLookAndFeel");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (UnsupportedLookAndFeelException e) {
            e.printStackTrace();
        }

        /* Create frame */
        frame = new JFrame ();
        frame.setLocation(50, 50);
        frame.setSize(400, 600);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);

        /* Add menu bar */
        addMenuBar ();
    }

    private static void addMenuBar () {
        /* Create menu bar and then file menu*/
        menubar = new JMenuBar ();
        filemenu = new JMenu ("File");

        /* Add three menu items to the file menu */
        JMenuItem newItem = new JMenuItem ("New       ");
        JMenuItem openItem = new JMenuItem ("Open      ");
        JMenuItem exitItem = new JMenuItem ("Exit     ");

        /* Add the menu items to the file menu. Also separate the last item
         * from the first two using a menu item separator */
        filemenu.add(newItem);
        filemenu.add(openItem);

        filemenu.addSeparator();
        filemenu.add(exitItem);

        /* Add the file menu to the menu bar */
        menubar.add(filemenu);

        /* Add menu bar to frame */
        frame.setJMenuBar(menubar);
    }
}

Итак, вопрос в том, нужно ли мне добавить больше настроек при использовании L & F "GTK" в среде GNOME, чтобы разделители пунктов меню снова были видны?

[Редактировать: сообщение было отредактировано, чтобы отразить sscce. Если вы хотите увидеть эффект Java LAF, закомментируйте строки внутри createAndShowGUI (), где LAF жестко закодирован в GTK LAF. Проблема исчезает с Java LAF, но остается при использовании GTK LAF]

...