Swing菜单 Java 7 Mac OSX

4
我一直在mac os x上测试我的Swing应用程序,它运行在applet中。
当我在浏览器中运行这个applet时,我注意到JMenus/JMenuItems的鼠标悬停不正确。
这是一个小程序来重现这个问题:
package com.macosx.tests;

import java.applet.Applet;
import java.awt.event.*;
import java.awt.*;

import javax.swing.*;

public class Example extends JApplet {

    JMenuBar bar;
    JMenu file, edit;
    JMenuItem new1, save, close;

    private void doStart() {
        bar = new JMenuBar();

        file = new JMenu("File");
        edit = new JMenu("Edit");

        new1 = new JMenuItem("New");
        save = new JMenuItem("Save");
        close = new JMenuItem("Close");

        setJMenuBar(bar);
        bar.add(file);
        bar.add(edit);
        file.add(new1);
        file.add(save);
        file.add(close);
    }

    @Override
    public void start() {
        try {
            SwingUtilities.invokeAndWait(new Runnable() {
                public void run() {
                    doStart();
                }
            });
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

使用这段代码生成一个.jar文件。在Eclipse中,您可以使用导出功能,并确保将Main-Class定义为上面的类。
一旦您拥有了jar文件,就可以创建一个包含以下内容的html文件:
<html>
<head>
<title>Menu test Applet</title>
</head>
<body>
<applet id="appletID" height="800" width="600" 
  code="com.macosx.tests.Example" 
  archive="tests.jar">
</applet>
</div>
</body>
</html>  

在这之后,运行html文件并检查菜单:它们不应该接收鼠标悬停事件。我做错了什么吗?这是Java的一个bug吗?有没有Mac用户测试这个问题? 我正在运行Mac OSX 10.7.4,安装了最新的Oracle JRE for Mac(http://www.oracle.com/technetwork/java/javase/downloads/jre7-downloads-1637588.html)。使用Firefox进行测试。
java.vendor     Oracle Corporation
java.version    1.7.0_06
os.name         Mac OS X
os.version      10.7.4

谢谢


1
不要轻易混合使用Swing和AWT组件,除非你有充分的理由和谨慎的考虑。请始终使用Swing。更多详情请参见混合使用重量级和轻量级组件 - Andrew Thompson
请问您能否提供您提交的错误报告链接? - martinez314
@whiskeyspider:http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7194878 老实说,我认为他们永远解决不了这个问题。苹果公司也在试图从其系统中移除Java,因此如果您想在小程序中运行应用程序,还会遇到许多其他问题。 - Luis Gonçalves
1个回答

4
代码在这里能正常运行。我怀疑这是JRE中的一个bug。请按如下步骤更改代码:
  1. 输出java.versionjava.vendor
  2. 删除main函数(它只会让事情变得混乱) - 然后...
  3. 提交一个缺陷报告。

测试机器详细信息

从此属性小程序获取详细信息:

Name            Value
java.vendor     Oracle Corporation
java.version    1.7.0_05
os.name         Windows 7
os.version      6.1

浏览器:火狐浏览器 15.0


出于好奇,您使用了哪个JRE?您是否在浏览器中运行小程序?如果我将程序作为应用程序运行,则可以正常工作。问题只会在您在浏览器中运行小程序时出现。 顺便说一句,如果您使用重量级弹出窗口,这也会发生在jre6u33上,根据http://mail.openjdk.java.net/pipermail/swing-dev/2012-March/001963.html的说法,这是Java 7中的默认设置。 - Luis Gonçalves
1
这个问题在我测试的任何Windows或Linux上的JRE版本中都没有发生。这只会在mac OS X上发生。 我为此问题提出了一个错误报告。谢谢。 - Luis Gonçalves
好的。请随时告知您的进展和消息。 - Andrew Thompson
1
我在JComboBox中遇到了同样的问题。当鼠标悬停在Mac applet上的项目上时,该项目不会被突出显示。在Windows上它工作得很完美。您可以在Windows和Mac上运行此在线swing applet演示链接,并查看不同之处。为了解决这个问题,我使用了实现鼠标悬停事件的代码。 - Amos N.
谢谢您的反馈。您应该把那个评论变成一个答案。 - Andrew Thompson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接