是否可以在这样的操作中隐藏我的JFrame
窗口并从另一个类启动主方法?
这里是动作的代码:
private AbstractAction start = new AbstractAction("start") {
@Override
public void actionPerformed(ActionEvent arg0) {
}
};
JFrame 有一个 setVisible 方法,可以根据需要隐藏窗口。
您可以静态调用其他类中的 main 方法,尽管这有点混乱。最好让您的 main 方法和 Action 调用另一个方法来执行您想要的任务。
因为您将 JFrame 设置为在动作中可见,而您的其他方法可能需要一些时间,您可能需要使用 SwingWorker 线程,否则您的界面将挂起(使用绘制 Frame 的同一线程调用动作)并且它会在操作方法存在之前不会变得不可见。见这里:http ://docs.oracle.com/javase/7/docs/api/javax/swing/SwingWorker.html
我一直在做一些与你想要完成的事情几乎相似的事情。我有一个 GUI,用户在其中输入值,然后单击开始按钮来运行程序(使用这些值作为输入)。当程序启动时,我可以选择:
在这两种情况下,当我想启动程序时,我都会创建一个新的 java 线程。
以下是对我有用的资源:
用于创建在新线程中启动程序的操作侦听器的代码:
//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);
}
};