gpt4 book ai didi

java - Swing JMenu 表现得很奇怪

转载 作者:行者123 更新时间:2023-12-02 08:31:22 27 4
gpt4 key购买 nike

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

    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。那么我可以做些什么来解决这个问题吗?

最佳答案

不幸的是,it's an java issue with Cinnamon 。你无法避免它,除非你

  • 切换到 SWT(参见 Eclipse 本身,它工作得很好),
  • 切换到另一个操作系统(他们不运行 Cinnamon),
  • 切换到另一个窗口管理器。
  • 尽管可能性不大,但另一个 JVM 可能不存在此问题(例如另一个 OpenJDK 甚至 Oracle JVM 等)。

重点是(据我所知)Java 应该能够区分 Linux 中运行的大量窗口管理器但是只能识别其中的一些 - 在这个特定问题中不能识别 Cinnamon。

更令人难过的是:Mate 似乎也出现了这个问题。

关于java - Swing JMenu 表现得很奇怪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12357567/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com