2

Java の使用: netbeans GUI ビルダーを使用して 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 に答える