Java Project – 如何冻结Frame

美好的一天!

我正在用Java做游戏。 我的菜单按钮包括New Game,HighScore,About和Quit。 但在用户进入主游戏之前,他需要先输入他的名字。 我用这个代码如下:

private void btnNewGameMouseClicked(java.awt.event.MouseEvent evt) { Player p1 = new Player(); this.setVisible(false); // I must replace this code p1.setVisible(true); } 

我的问题是,我不想隐藏主菜单。 我希望它冻结,并且在询问玩家姓名时无法访问。

我的主菜单框架比播放器框架大..当然,我可以删除代码this.setVisible(false)但问题是我仍然可以在点击时访问主菜单…我希望主菜单冻结播放器框架弹出时无法访问..(见下图)请帮助我。 谢谢。

示例图像

你想要做的是让你的播放器框架成为一个modal dialog 。 您可能希望将它作为JDialog的子类而不是JFrame或您正在使用的setModal类,并使用其setModal方法或使用JDialog的构造函数将其设置为模态。 例如:

 public Player(JFrame owner) { super(owner, true); // makes the dialog modal // ... } 

然后你可以从主框架创建对话框,如:

 Player p1 = new Player(this); 

当你调用p1.setVisible(true) ,主框架将被阻止并且不可点击。

 private void btnNewGameMouseClicked(java.awt.event.MouseEvent evt) { Player p1 = new Player(); p1.setVisible(true); setEnabled(false); } /* setEnabled(boolean b) (java.​awt.​Component) Enables or disables this component, depending on the value of the parameter b. An enabled component can respond to user input and generate events. Components are enabled initially bydefault.enter code here */