在PApplet上设置默认关闭操作(处理)

时间:2014-01-17 14:56:57

标签: java processing

有没有任何方法可以在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;
            }
        }
    });

在取消选项中,我想关闭此对话框并继续打开应用程序,这样一来,如果没有“关闭时不做任何事情”我会选择关闭应用程序。

3 个答案:

答案 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);

}