我有一个Java桌面应用程序(文档编辑器),我最近添加了一个菜单栏,其菜单又包含菜单项。问题是 - 在我的GNOME桌面环境(Ubuntu)中,菜单项分隔符根本不可见。如果我将应用程序L& F切换到默认Java(金属)LaF或在Ubuntu上切换桌面环境KDE环境,它们是可见的,但菜单项分隔符在GNOME环境下永远不可见。我也将应用程序L& F设置为“GTK”。如果我强制L& F为“motif”,则可以清楚地看到文件分隔符。
在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);
}
}
所以问题是 - 在GNOME环境中使用“GTK”L& F时是否需要添加更多自定义,以便菜单项分隔符再次可见?
[编辑:现在已对帖子进行了编辑以反映sscce。如果你想看看Java LAF的效果那么请注释掉createAndShowGUI()里面的行,其中LAF被硬编码为GTK LAF。 Java LAF问题消失了,但在使用GTK LAF时仍然存在]