摇摆JMenu表演奇怪

时间:2012-09-10 18:38:40

标签: java swing user-interface

我最近开始在java中使用swing(使用eclipse WindowBuilder)制作类似扫雷的游戏,并且在应用程序中有一个带有JMenu的普通JFrame,其中包含选项。它可以正常工作,直到调整窗口大小。然后,当我点击菜单显示它时,它只会显示,直到我释放鼠标按钮,然后它消失,好像我点击了其他地方。但是当我通过键盘快捷键访问菜单时,它可以正常工作。有谁知道问题会在哪里? 菜单代码:

    JMenu mnHelp = new JMenu( "Help" );
    mnHelp.setMnemonic( 'h' );
    menuBar.add( mnHelp );

    JMenuItem mntmControls = new JMenuItem( "Controls" );
    mntmControls.setMnemonic( 'c' );
    mntmControls.setIcon( new ImageIcon( Main.class
            .getResource( "/org/img/menu-help.png" ) ) );
    mnHelp.add( mntmControls );

    JSeparator separator_1 = new JSeparator();
    mnHelp.add( separator_1 );

    JMenuItem mntmAbout = new JMenuItem( "About" );
    mntmAbout.setMnemonic( 'g' );
    mntmAbout.setIcon( new ImageIcon( Main.class
            .getResource( "/org/img/menu-about.png" ) ) );
    mnHelp.add( mntmAbout );

修改

我做了一些实验,结果发现这不是我程序中某些东西造成的问题,而是在java或eclipse中,因为即使是最简单的程序,比如我将在此处粘贴的代码也有同样的问题: `

package testpack;

import java.awt.Dimension;
import javax.swing.*;

public class Main {

    public static void main( String[] args ) {
        JFrame jfr = new JFrame( "" );
        jfr.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
        JMenuBar jmb = new JMenuBar();
        JMenu jm = new JMenu( "Hello" );
        JMenuItem jmi = new JMenuItem( "Hi" );
        jm.add( jmi );
        jmb.add( jm );
        jfr.setJMenuBar( jmb );
        jfr.setMinimumSize( new Dimension( 400, 400 ) );
        jfr.setVisible( true );
    }
}

`(这是整个来源)

我正在使用Mint Cinnamon 13和Eclipse 4.2。那么我有什么办法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

不幸的是,it's an java issue with Cinnamon。除非你

,否则你无法避免
  • 切换到SWT(参见Eclipse本身,工作正常),
  • 切换到另一个操作系统(他们不会运行Cinnamon),
  • 切换到另一个窗口管理器。
  • 虽然不太可能,但另一个JVM可能没有这个问题(相反,另一个OpenJDK甚至是Oracle JVM或类似的)。

关键是(afaik)Java应该区分在linux 中运行的大量窗口管理器,但只识别其中的一些 - 在这个特定问题中不是Cinnamon。

更令人伤心的是:问题似乎也出现在Mate身上。