Java BeautyEye外观和感觉空JMenuBar项目
我正在Java桌面程序中使用look-and-feel,但最近发现JMenuBar显示empy JMenuItems,如下面的屏幕截图所示 正如您所看到的,菜单区域在那里,但颜色与Jframe contentPane相同,并且没有可见的菜单文本 测试此功能的示例程序(从下载BeautyEye库)为:Java BeautyEye外观和感觉空JMenuBar项目,java,linux,swing,java-8,look-and-feel,Java,Linux,Swing,Java 8,Look And Feel,我正在Java桌面程序中使用look-and-feel,但最近发现JMenuBar显示empy JMenuItems,如下面的屏幕截图所示 正如您所看到的,菜单区域在那里,但颜色与Jframe contentPane相同,并且没有可见的菜单文本 测试此功能的示例程序(从下载BeautyEye库)为: 我是BeautyEye项目的作者 需要注意的几点: BeautyEye已经迁移到 GitHub:,您可以找到 那里的最新版本。但是我很抱歉,这里没有英语 导言 因为JDK版本更新太快,我只是 用j
我是BeautyEye项目的作者 需要注意的几点:
你可以通过163.com与我联系,我希望你能解决这个问题。我已经用jdk 1.8_u45调试过了,在Windows平台上是正常的。 我想这可能是linux平台java1.8_45的一个bug
您的代码在这里正常工作。Win7、Java 7和beautyeye\u lnf\u v3.5\u all\u in\u one.zip的PLAF。Linux、Java 8和beautyeye\u lnf\u v3.5\u all\u in\u one.zip的PLAF不工作:(此问题是否也出现在演示应用程序中请注意,您的SSCE会替换背景线程上的外观,而不是EDT上的外观。在EDT上执行所有操作时,您是否存在相同的问题?@saimiris_-devel我会在Gnome 3环境中运行您的示例。如果我使用OpenJRE 8,我的问题与您在屏幕截图中显示的问题相同。如果我使用racle JRE 8菜单按预期显示。我获取了最新的源代码,并在GNU/Linux和Java 1.8下编译了我的示例,它似乎得到了修复!我在构建项目的dist jar时遇到问题,根据Oracle常见问题解答,它给出了编译错误,如“错误:包sun.swing.table不存在”“直接调用sun.*包的Java程序不保证在所有Java兼容平台上都能工作。”
import java.awt.*;
import javax.swing.*;
import org.jb2011.lnf.beautyeye.BeautyEyeLNFHelper;
public class JavaMenuBarExample implements Runnable
{
private JFrame frame;
private JMenuBar menuBar;
private JMenu fileMenu;
private JMenuItem openMenuItem;
public static void main(String[] args)
{
try
{
BeautyEyeLNFHelper.frameBorderStyle = BeautyEyeLNFHelper.FrameBorderStyle.osLookAndFeelDecorated;
org.jb2011.lnf.beautyeye.BeautyEyeLNFHelper.launchBeautyEyeLNF();
UIManager.put("RootPane.setupButtonVisible", Boolean.FALSE);
}
catch (Exception ex)
{
ex.printStackTrace();
}
// the proper way to show a jframe (invokeLater)
SwingUtilities.invokeLater(new JavaMenuBarExample());
}
@Override
public void run()
{
frame = new JFrame("Java Menubar Example");
menuBar = new JMenuBar();
fileMenu = new JMenu("File");
openMenuItem = new JMenuItem("Open");
fileMenu.add(openMenuItem);
// add menus to menubar
menuBar.add(fileMenu);
// put the menubar on the frame
frame.setJMenuBar(menuBar);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setPreferredSize(new Dimension(400, 300));
frame.pack();
frame.setVisible(true);
}
}