質問: javaで右上の閉じるボタンではなく、JButtonでボタンを実装し、そのボタンを押すとウインドウを閉じるプログラムを作りたいのですが、その場合イベントリスナーの部分はどのように記述されるのでしょうか? 作成するボタンの名前をButton1とするとどのように書けるのでしょうか?
回答: ### 編集前の質問に対する回答 解説だけ回答します。 * コンパイルを通して実行できるコードを貼りましょう + `if(e.getSource()==b6) {`に対応する閉じ括弧`}`がない + クラス名は`Counter`なのにコンストラクタがExCounterになっている * コンストラクタ`ExCounter()`で初期表示をしましょう + 1などの数字を出す処理は全て`actionPerformed(ActionEvent e)`内の`f1.setText`メソッドで行っています。つまりコンストラクタ(初期化処理)で`f1`ラベルを作った後にこのメソッドを呼んであげれば... * 変数を理解してクリアしましょう + クリアは他の足し算の応用です。`actionPerformed(ActionEvent e)`内の`if`文で何の変数にどのようにpriceの値を足し算しているか理解すればクリアする方法も分かるはずです * ググりましょう + 「JFrame 閉じる」で検索するとアプリケーションを終了する方法がたくさん出てきます * アラートに応用しましょう + 変数とif文による比較方法が分かり、swingでのアラートダイアログの使い方をWeb検索できれば実装できます 足し算が実装できたならばあと少し応用すれば答えにたどり着けるはずです。 頑張ってください。 エラー表示は最後にやらなくちゃいけない気がしますし、変数の数が多くなると混乱しますね。 かなり良い線まで行っていると思いまので、落ち着いて条件分岐と変数の意味を見直してみましょう。 if文による条件分岐の中で`price=1;`や`price=1000;`を代入することで、price変数には*押したボタンの値*が入っています。 その後に`keisan=keisan+price;`することで、keisan変数には*過去の合計にpriceを足した値*が入ります。 if文を使って「priceとkeisanの合計が1万未満の時にはpriceを加算する」そうでなければ「警告を表示する」ようにすれば目的を達成できそうです。 疑似コードで表現すると... ``` price = 1; // priceに押したボタンの値をセットする if (priceとkeisanの合計が1万未満) { keisan = keisan + price; f1.setText(...); } そうでなければ { 警告を表示する } (中略) // 計算と警告表示がすでに終わっていて不要ならこれ以降は削除する if(keisan >= 9999) { (後略) ``` ### 編集後の質問に対する回答 ええと...? 質問が大幅に書き換えられて別サイトで2011年に上がった質問と類似した質問になっているようですが、リンク先の回答では解決しない問題を新たに質問したい意図による改変でしょうか。 解決済みの質問を変更すると、質問と回答がかみ合わなくなったり新しい回答がつきにくくなったりするので、追加質問は新しい質問として別途投稿していただくことをお勧めします。 さて追加の質問から字義通りの回答をいたしますと、JFrameのインスタンスに対してdispose)メソッドを呼び出します。 ``` import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; public class Sample1 extends JFrame implements ActionListener{ public Sample1() { JButton button = new JButton("Close"); button.addActionListener(this); getContentPane().add(button); pack(); } @Override public void actionPerformed(ActionEvent e) { dispose(); // この画面を終了する } public static void main(String args[]){ Sample1 sample1 = new Sample1(); sample1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); sample1.setVisible(true); } } ```