2

使用 Java:我有一个使用 netbeans GUI builder 构建的 GUI。

GUI 类是通过扩展 jFrame 创建的

public class ArduinoGUI extends javax.swing.JFrame

并使用以下方式显示 GUI:

java.awt.EventQueue.invokeLater(new Runnable() {
    public void run() {                    
        new ArduinoGUI().setVisible(true);                    
    }
}

因此,我没有要调用的实际框架对象frame.,那么在这种情况下,我该如何覆盖该windowClosed函数,因为我必须在应用程序退出之前调用一个特定的函数来整理串行连接。

编辑:这是明确的代码,如下所示:

@Override
public void processWindowEvent(WindowEvent e) {
    if (e.getID() == WindowEvent.WINDOW_CLOSING) {
        arduino.close();
        System.out.println("Arduino Close()");
        dispose();
    }
4

2 回答 2

4

您可以在 windowClosing 方法上调用您的函数..

import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.WindowConstants;

class WindowEventHandler extends WindowAdapter {
  public void windowClosing(WindowEvent evt) {
    System.out.println("Call your method here"); 
  }
}

public class TJFrame {

  public static void main(String[] args) {
    JFrame frame = new JFrame("Swing Frame");

    JTextBox label = new JLabel("This is a Swing frame", JLabel.CENTER);

    frame.add(label);

    frame.addWindowListener(new WindowEventHandler());
    frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    frame.setSize(350, 200); // width=350, height=200
    frame.setVisible(true); // Display the frame
  }

}
于 2013-03-19T12:37:05.597 回答
2

如果您还没有完成,请在您的类(它是 JFRame 的子类)中创建“processWindowEvent”方法。该方法将 WindowEvent 对象作为参数。在该方法中添加一个 if 块,如下所示:

if(e.getID() == WindowEvent.WINDOW_CLOSING){

    //...Do what you need to do just before closing

}

e 是 WindowEvent 对象传递给方法的参数。

于 2013-03-19T12:34:22.607 回答