2016-04-02 86 views
1

我有这个GUI应用程序,并且我想在用户打开应用程序时但在显示GUI后立即执行自定义操作。如何在显示JFrame后执行某些操作

于是,我把电话给行动统一到JFrame的public Main()这样的:

public Main() { 
    initComponents(); 
    ExecuteAfter(); 
} 

哪里ExecuteAfter()是包含acction的方法,或执行行动。

这工作正常,但不是我想要的方式。这样,在JFrame显示之前,即在应用程序窗口出现在屏幕之前,该操作始终执行。我想要的只是在显示JFrame之后执行操作,即在屏幕上出现应用程序窗口之后。

我试过把电话拨入public static void main(String args[]),因为这里有JFrame被创建和显示。但不起作用,因为该方法不是静态的,而且我也不能放置静态方法,因为它使用了已被IDE初始化为非静态的JFrame的一些组件。

那么,问题是:我需要在屏幕上显示JFrame后才能执行调用动作的地方?或者还有其他的方式呢?

在此先感谢!

+0

你有没有考虑尝试使用'WindowListener'?查看[如何编写窗口监听器](https://docs.oracle.com/javase/tutorial/uiswing/events/windowlistener.html)以获取更多详细信息。或者,您可以将调用包装在一个'SwingUtilities.invokeLater'调用中。我可能会试着做 – MadProgrammer

+0

@MadProgrammer谢谢!这解决了问题。我使用了一个'WindowListener'并且工作完美! – FiroKun

回答

1

我用了WindowListener并解决了这个问题。

而不是在构造函数public Main()或在主要public static void main(String args[])这是不能完成的呼叫,我配置WindowsListener做呼叫。像这样:

private void formWindowOpened(java.awt.event.WindowEvent evt) { 
    ExecuteAfter(); 
} 

并且以我想要的方式完美地工作。

感谢@MadProgrammer提示。

0

如果我理解你的问题,我为我的项目使用类似的情况。我需要在JFrame展示时启动计时器,所以我就是这么做的。

所以我使用2个方法和1个构造函数。第一种方法(exp。名称:prepare GUI),在这里你可以添加所有的想法来创建JFrame,JPanel ....以及我在构造函数中调用的那个方法。在第二种方法(exp。Name:start GUI)中,您将所有组件添加到JPanel/s,将JPanel/s添加到JFrame,并将JFrame设置为visible =(true),然后添加您的方法ExecuteAfter()。第二种方法(准备GUI)需要在主要方法中调用。我希望这会帮助你。

+0

我正在工作的IDE会自动创建一个构造函数,我在问题'Main Main()'中引用,其中“Main”是可以是任何名称的'JFrame'的名称;以及调用构造函数并显示窗口的'main',正确的''public static void main(String args [])'。问题是我不能在'main'上调用任何函数,因为它是'static',并且调用不会出于我在问题中解释的原因。 – FiroKun

+0

我已经用'WindowListener' @MadProgrammer答案解决了这个问题。谢谢! – FiroKun

相关问题