0

是否可以在这样的操作中隐藏我的JFrame窗口并从另一个类启动主方法?

这里是动作的代码:

private AbstractAction start = new AbstractAction("start") {

       @Override
       public void actionPerformed(ActionEvent arg0) {


       }
};
4

2 回答 2

0

JFrame 有一个 setVisible 方法,可以根据需要隐藏窗口。

您可以静态调用其他类中的 main 方法,尽管这有点混乱。最好让您的 main 方法和 Action 调用另一个方法来执行您想要的任务。

因为您将 JFrame 设置为在动作中可见,而您的其他方法可能需要一些时间,您可能需要使用 SwingWorker 线程,否则您的界面将挂起(使用绘制 Frame 的同一线程调用动作)并且它会在操作方法存在之前不会变得不可见。见这里:http ://docs.oracle.com/javase/7/docs/api/javax/swing/SwingWorker.html

于 2013-09-12T16:11:53.500 回答
0

我一直在做一些与你想要完成的事情几乎相似的事情。我有一个 GUI,用户在其中输入值,然后单击开始按钮来运行程序(使用这些值作为输入)。当程序启动时,我可以选择:

  • 隐藏 GUI 并启动程序或...
  • 隐藏输入字段并显示一个日志文本框,显示程序运行时的程序状态。

在这两种情况下,当我想启动程序时,我都会创建一个新的 java 线程。

以下是对我有用的资源:

  • 创建文件选择器 GUI 的代码:http: //docs.oracle.com/javase/tutorial/uiswing/examples/components/FileChooserDemoProject/src/components/FileChooserDemo.java
  • 创建输入对话框的代码http://docs.oracle.com/javase/tutorial/uiswing/components/dialog.html#joptionpaneapi
  • 用于创建在新线程中启动程序的操作侦听器的代码:

    //Handle LAUNCH action.
    else if (e.getSource() == launchButton) 
    {
        JFrame launchConfirmationFrame = new JFrame("Launch Confirmation");
        launchConfirmationFrame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
        int answer;
    
        launchConfirmationFrame.pack();
        //downloadDateframe.setVisible(true);
    
            //if answer=0 its yes, if its =1 its no!
            answer = JOptionPane.showConfirmDialog(
                    launchConfirmationFrame
                    ,"^^^^ ARE YOU SURE YOU WOULD LIKE TO PROCEED? ^^^^"
                    ,"TITLE"
                    ,JOptionPane.YES_NO_OPTION);
    
            if(answer==0)
            {
                buttonPanel.removeAll();
                optionsFrame.repaint();
                optionsFrame.setVisible(true); // THIS HIDES THE GUI FRAME if it is set to false. 
    
                System.out.println("Launching YOURPROGRAM...");
    
                //THIS CREATES AND STARTS THE THREAD WITH YOUR PROGRAM TO BE LAUNCHED
                    //More info on threads here http://docs.oracle.com/javase/tutorial/essential/concurrency/runthread.html
                Thread t = new Thread(new Runnable() {
                    public void run() {
                        //Turn off metal's use of bold fonts
                        UIManager.put("swing.boldMetal", Boolean.FALSE); 
                        launchYOURPROGRAM();
                    }
                });
    
                t.start();
            }
    
            else if (answer==1)
            {
                optionsFrame.setVisible(false);
                optionsFrame.setVisible(true);
                System.out.println("Returning to GUI Frame...");
            }
        }'
    

记住让你的 Jframe(这里我称之为 optionsFrame)是静态的,这样当你在 YOURPROGRAM 中时,你可以决定是再次显示它还是隐藏它。

从您的程序中,您可以调用:

private AbstractAction start = new AbstractAction("start") {

       @Override
       public void actionPerformed(ActionEvent arg0) 
       {
            optionsFrame.setVisible(false);

       }
};
于 2013-09-13T14:22:09.643 回答