繁体   English   中英

当我处理并重新打开JFrame时,它什么也没有显示

[英]When I dispose and reopen a JFrame, it doesn't show anything

我有一个使用JFrames创建的相当简单的Java应用程序。 一个在我的计划不止一个JFrame的。 我在程序的开头启动了一个菜单。 浏览完菜单后,我将菜单JFrame放置了。

JFrame主菜单具有一个菜单按钮,稍后应会启动完全相同的菜单。 但是,当您从ActionListener内部启动菜单时(按菜单按钮时),JFrame无法正常启动。 没有任何组件出现,并且颜色熄灭。

但是,从ActionListener外部启动菜单时,JFrame会完美显示。 我尝试了多种方法来解决此问题,但没有一个起作用。

单击此处可获取我的完整程序代码。

  • 主要类是“ LetsMultiply5.java”。 此类还设置了ActionListener。
  • 导致问题的JFrame是“ MenuWindow.java”。
  • “ LetsMultiply5.java”调用“ Booter.java”类,然后该类调用“ MenuWindow.java”。
  • “ MainWindow.java”是具有“菜单”按钮的JFrame。
  • 为了证明这一点,“ SpeedModer.java”在处理后会调用菜单窗口并起作用。

================================编辑================= ===============

另外,我想告诉您,我意识到我的代码有点混乱。 我不确定该如何编写其他代码。

我被迫使用Thread.sleep(x); 因为Swing计时器不是我想要的。 当计时器关闭时,Swing计时器将激活ActionListener。 我需要一个在继续执行代码之前需要等待一秒钟的系统。

我意识到在里面的ActionListeners的while (repeater==0)循环看起来很疯狂,但这是我使其工作的唯一方法。 如果我放了一个ActionListener,只是有while循环而在里面没有任何代码,那么当我按下按钮时什么也不会发生。

正如MadProgrammer所说,我会:

建议:放弃当前的方法,然后重新开始。

但是,我当前编写程序的方式是我知道如何完成所需工作的唯一方式。 我阅读了这些教程,但是仍然不知道如何按照您告诉我的方式来改进代码。

我感谢每个人都试图告诉我改善糟糕的“ Java语法”,但是就我而言,我将在未来20年内不继续执行该程序,并从中受益。

我之前看过Swing计时器,并且了解了整个new Timer(speed, this); 概念,但我不明白这将如何使我的代码变得更好。

如果有人想告诉我如何修复我的ActionListeners或Thread.sleep(x); 行,请告诉我。 谢谢。

您正在使用Thread.sleep(3000);阻止事件调度线程Thread.sleep(3000); -请勿执行此操作,这将阻止绘制用户界面

有关该问题的更多详细信息,请参见Swing中的并发性;有关可能的解决方案,请参见如何使用Swing计时器

您可能还想考虑一下“使用多个JFrame,良好/不良做法”? 并考虑使用CardLayoutJTabbedPane

如果需要临时阻止用户(以显示错误消息或收集重要细节),请考虑使用模式JDialog 有关更多详细信息,请参见如何制作对话框

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM