- ベストアンサー
Java GUIについて質問です
Javaの初心者でswingを用いたプログラムの書き方を勉強中です。今、ボタンを何回クリックしたかを表示させるプログラムを書こうと思っているのですが、actionPerformedの中で++を用いようとしてもうまくいかず、詰まってしまっています。どうしたらいいのか教えていただきたいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
指摘箇所が多すぎて、手を入れました。 class MyFrame6 extends JFrame { public static void main(String args[]){ JFrame frame = new MyFrame6("タイトル"); frame.setVisible(true); //mainメソッドのとじ忘れ。 } int counter = 0; //結果表示用のラベル。ボタンを押した後、actionPerformedメソッドから見えるようにフィールド変数に。 JLabel label; public void plusOne(){ counter++; } public int getNum(){ return counter; } MyFrame6(String title){ setTitle(title); setBounds(100,100,100,100); //設定する値は参考URLを参照 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel p = new JPanel(); //ラベルの初期値を設定するため、下記の位置へ移動 //クラス名だったMyFrame6をインスタンスへ変更。 int a = this.getNum(); label = new JLabel("押した回数: " + a + "回"); JButton btn = new JButton(); btn.addActionListener( new ActionListener(){ public void actionPerformed(ActionEvent e){ //ボタンが押される度に、plusOneするが、結果を表示していない。 //またメソッドをインスタンスから実行 plusOne(); //結果表示 //メソッドをインスタンスから実行 int a = getNum(); label.setText("押した回数: " + a + "回"); } } ); p.add(label); p.add(btn); //NORTHへ配置したいようなので、変更。 add(p,BorderLayout.NORTH); } } GUIよりも先に、クラスとインスタンスの違い、クラス変数とフィールド変数の違いを 学習されたほうが良いです。 あと、時間があるようなら、JavaAPIのドキュメントを参照してください。
その他の回答 (1)
- LancerVII
- ベストアンサー率51% (1060/2054)
こんにちは。 どのような感じに作っているか載っていないのでわかりませんが、メンバ変数にカウント用の変数を用意してactionPerformedの中でボタンのイベントで加算すれば良いです。 いま、どのようなソースになっているのか載せられたら補足ください。
補足
返事が少し遅くなってすいません。以下のように書こうとしているのですがコンパイルができず、全く別の手段を用いたほうがよいのではと模索していたところです import java.awt.*; import java.awt.event.*; import javax.swing.*; class MyFrame6 extends JFrame { public static void main(String args[]){ JFrame frame = new MyFrame6("タイトル"); frame.setVisible(true); int counter = 0; public void plusOne(){ counter++; } public int getNum(){ return counter; } MyFrame6(String title){ setTitle(title); setBounds(100,100,100,100); setDefaultCloseOperation(JFrame.BorderLayout.NORTH); JPanel p = new JPanel(); JButton btn = new JButton(); btn.addActionListener( new ActionListener(){ public void actionPerformed(ActionEvent e){ MyFrame6.plusOne(); } } ); int a = MyFrame6.getNum(); JLabel label = new JLabel("押した回数: " + a + "回"); p.add(label); p.add(btn); add(p,JFrame.BorderLayout.NORTH); } }
お礼
ありがとうございます。自分がいかに理解不足かがわかりました。もう一度勉強して出直してきます。