有没有任何方法可以在PApplet上设置默认的关闭操作?
我试图将PApplet嵌入到JFrame中,但它不能正确初始化,我需要将窗口设置为不要在退出时关闭,在JFrame中我可以将其设置为DO_NOTHING_ON_CLOSE,不知道如何在PApplet中执行。我正在实施一个确认退出对话框,我只想在确认时关闭。
PApplet已经有了一个框架,但它不是一个JFrame,所以我不能只调用setDefaultCloseOpreation。
我添加了一个窗口监听器来获取窗口关闭操作:
//frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent ev) {
int confirm = JOptionPane.showOptionDialog(frame,
"Want to save all unsaved data?",
"Exit confirmation", JOptionPane.YES_NO_CANCEL_OPTION,
JOptionPane.QUESTION_MESSAGE, null, null, null);
switch(confirm) {
case JOptionPane.YES_OPTION:
System.out.println("Data saved, closing...");
break;
case JOptionPane.NO_OPTION:
System.out.println("Data lost, closing...");
break;
case JOptionPane.CANCEL_OPTION:
System.out.println("Close canceled.");
break;
}
}
});
在取消选项中,我想关闭此对话框并继续打开应用程序,这样一来,如果没有“关闭时不做任何事情”我会选择关闭应用程序。
答案 0 :(得分:1)
在http://processing.org/reference/javadoc/core/processing/core/PApplet.html的PApplet的API文档显示了如何将PApplet嵌入到Frame中,并明确指出“... 没有什么可以阻止您将PApplet嵌入到JFrame中”。当您根据此处显示的ExampleFrame
使用模式(但扩展JFrame)时,您应该能够设置所需的默认关闭操作并附加您的监听器。
答案 1 :(得分:1)
前段时间我遇到了同样的问题。我不是肯定这个代码解决了它,但我觉得它有帮助吗?已经存在一些窗口侦听器,此代码将删除它们。我也模糊地回忆起必须在几帧之后运行它,因为它们没有被初始化或者程序启动后立即出现的东西。无论如何,你可以试一试:
WindowListener[] wls = frame.getWindowListeners();
println("Removing " + wls.length + " window listeners.");
for (int i = 0; i < wls.length; i++) {
frame.removeWindowListener(wls[i]);
}
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent we)
{
checkExit();
}
}
);
答案 2 :(得分:1)
解决了在JFrame上嵌入PApplet的问题,但是正如处理文档中的示例所示非常简单,它不能按预期工作。
以下代码正在运行:
public class Application extends PApplet {
public void setup() {
size(600, 480, JAVA2D);
}
public void draw() {
background(255);
}
public void closeApplication() {
exit();
}
public static void main(String _args[]) {
final JFrame frame = new JFrame("Embbed Applet");
frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
JPanel panel = new JPanel();
final Application applet = new Application();
applet.init();
panel.add(applet);
frame.add(panel);
frame.setSize(600, 510);
frame.setResizable(false);
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent ev) {
int confirm = JOptionPane.showOptionDialog(frame,
"Want to save all unsaved data?",
"Exit confirmation", JOptionPane.YES_NO_CANCEL_OPTION,
JOptionPane.QUESTION_MESSAGE, null, null, null);
switch(confirm) {
case JOptionPane.YES_OPTION:
// Save data
applet.closeApplication();
System.exit(0);
break;
case JOptionPane.NO_OPTION:
applet.closeApplication();
System.exit(0);
break;
case JOptionPane.CANCEL_OPTION:
// Do nothing
break;
}
}
});
frame.setVisible(true);
}