我最近开始使用Java和Swing(使用Eclipse WindowBuilder)制作了一个类似扫雷的游戏,并在应用程序中有一个普通的JFrame,其中包含一个选项卡式的JMenu。它一切正常,直到调整窗口大小。然后,当我单击菜单以显示它时,它只会显示到我释放鼠标按钮为止,然后它就会消失,就好像我单击了其他地方一样。但是当我使用键盘快捷键访问菜单时,它可以正常工作。有人知道问题可能出在哪里吗?
菜单代码:
我使用的是Mint Cinnamon 13和Eclipse 4.2。那么我能做些什么来解决这个问题吗?
菜单代码:
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。那么我能做些什么来解决这个问题吗?
jfr.pack()
替代setMinimumSize()
,并遵循 Istao 的建议。 - trashgod