2

ボタンのクリック回数をGUIでカウントしたい。

私はこのコードを行いました:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) 
 {                                         
  int clicked = 0;
  clicked++;
  System.out.println(clicked);
 }    

しかし、ボタンをクリックするたびに出力「1」が表示されます。

ボタンをクリックするたびにカウントを表示したい。

例: ボタンを 2 回クリックすると、「2」が出力されます。

4

8 に答える 8

7

アクションメソッド内で変数を定義しているため、クリックするたびにカウンターをリセットしています。そうしないようにしてください。

int clicked = 0; // move this outside
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) 
{                                         
    // int clicked = 0; -- this resets it to 0 each time
    clicked++;
    System.out.println(clicked);
}
于 2013-02-21T10:05:01.077 に答える
4

clickedに初期化されたローカル変数として宣言しました0。それ以外のものにすることはできません1

clicked代わりにクラスレベルの変数を作成してください...

private int clicked = 0;

//...

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) 
{                                         
    clicked++;
    System.out.println(clicked);
} 
于 2013-02-21T10:06:03.023 に答える
4

以下のコードを試してください

int clicked = 0;
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) 
 {                                         

  clicked++;
  System.out.println(clicked);
 } 
于 2013-02-21T10:06:07.537 に答える
2

起動するたびjButton1ActionPerformedに、クリックされた変数がインスタンス化されて 0 に戻るため、常に 1 の値が返されます。clicked変数をそのメソッドの外に移動する必要があります。

//Somewhere in your class
private intClicked = 0;
//More methods here.

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) 
 {                                         
  clicked++;
  System.out.println(clicked);
 }
于 2013-02-21T10:38:58.837 に答える
2

変化する

int clicked = 0;

あなたのクラスのメンバーになること。これにより、ボタンを押すたびにゼロに設定されることはありません。

于 2013-02-21T10:05:26.317 に答える
2

count内で変数を宣言しましたActionListener。ブロックの外で宣言してください。

int clicked = 0;  //make it as your class member.
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) 
{                                         

  clicked++;
  System.out.println(clicked);
}    
于 2013-02-21T10:06:23.637 に答える
2

このクラスをインスタンス化する方法に応じてclicked、フィールド レベルまたはクラス変数レベルで変数を宣言する必要があります。現在、clicked変数のスコープはメソッドに対してローカルです。

オプション1

int clicked = 0;

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) 
 {                                         
  clicked++;
  System.out.println(clicked);
 }  

オプション 2

static int clicked = 0;

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) 
 {                                         
  clicked++;
  System.out.println(clicked);
 } 

使用するオプションは、インスタンス化によって異なります。2 番目のオプションは、可能であれば避ける必要があります。

于 2013-02-21T10:06:33.103 に答える
0
import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;


public class Threading extends JFrame {

    private JPanel contentPane;
    private JTextField DisplayOne;
    private JTextField DisplayTwo;

    int count;
    int count1;
    int count2;


    /**
     * Launch the application.
     */

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() 
            {
                  try {
                    Threading frame = new Threading();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */


    public Threading() 
    {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        contentPane.setLayout(new BorderLayout(0, 0));
        setContentPane(contentPane);

        JPanel panel = new JPanel();
        contentPane.add(panel, BorderLayout.CENTER);

        DisplayOne = new JTextField();
        panel.add(DisplayOne);
        DisplayOne.setColumns(10);

        DisplayTwo = new JTextField();
        panel.add(DisplayTwo);
        DisplayTwo.setColumns(10);

        JButton btnCountOne = new JButton("Count 1");
        count1=0;
        btnCountOne.addActionListener(new ActionListener() {                
                public void actionPerformed(ActionEvent arg0) 
                {   
                    DisplayOne.setText(Integer.toString(count1++));
                }
        });
        panel.add(btnCountOne);

        JButton btnCountTwo = new JButton("Count 2");
        count2=0;
        btnCountTwo.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) 
            {
                DisplayTwo.setText(Integer.toString(count2++));
            }
        });
        panel.add(btnCountTwo);

        JButton btnCountBoth = new JButton("Count Both");
        count=0;
        btnCountBoth.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) 
            {
                while (count < 10)
                {
                DisplayOne.setText(Integer.toString(++count));
                DisplayTwo.setText(Integer.toString(count));
                }
            }
        });
        panel.add(btnCountBoth);
    }

}
于 2013-03-16T07:33:41.283 に答える