私はこのテストコードをCustomUIPanelクラスに記述しました。
public static void main(String[] args) {
final JDialog dialog = CustomUIPanel.createDialog(null,
CustomUIPanel.selectFile());
dialog.addWindowListener(new WindowAdapter() {
@Override public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
CustomUIPanel.main()
プログラムのエントリポイントである場合は正しく動作しますが、何か不思議に思わCustomUIPanel.main()
れます。別のクラスがテストを要求した場合はどうなりますか?その後、私の呼び出しSystem.exit(0)
は正しくありません。
トップレベルウィンドウがない場合にSwingイベントディスパッチスレッドに自動的に終了するように指示する方法はありますか?
そうでない場合、すべての最上位ウィンドウが閉じられたときにプログラムを終了することが目的である場合、JDialog / JFrameが閉じるときに何をするのが正しいでしょうか。
のsetDefaultCloseOperation()
メソッドを使用してJDialog
、以下を指定できますDISPOSE_ON_CLOSE
。
setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
「12.8プログラムの終了」も参照してください。
補遺:@camickrの役立つ答えを取り入れて、この例はウィンドウが閉じられるか閉じるボタンが押されると終了します。
import java.awt.EventQueue;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.WindowEvent;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
/** @see http://stackoverflow.com/questions/5540354 */
public class DialogClose extends JDialog {
public DialogClose() {
this.setLayout(new GridLayout(0, 1));
this.add(new JLabel("Dialog close test.", JLabel.CENTER));
this.add(new JButton(new AbstractAction("Close") {
@Override
public void actionPerformed(ActionEvent e) {
DialogClose.this.setVisible(false);
DialogClose.this.dispatchEvent(new WindowEvent(
DialogClose.this, WindowEvent.WINDOW_CLOSING));
}
}));
}
private void display() {
this.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
this.pack();
this.setLocationRelativeTo(null);
this.setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new DialogClose().display();
}
});
}
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加