按钮计数器不更新

时间:2014-05-01 17:36:13

标签: java button

尝试编写一个简单的程序来显示使用按钮输入的电话号码。每按一次按钮,我都会设置一个计数器,以自动插入" - "在第3和第6个数字输入之后。我的计数器似乎没有更新按钮按下。我不明白为什么。它可能很简单但我非常感谢任何帮助。

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class BorderPanel extends JPanel
{

    //variables
    int counter = 0;
    int total;
    Object source = new Object();
    String display = "";
    String s;

        //buttons
    JButton b1 = new JButton("1");
    JButton b2 = new JButton("2");
    JButton b3 = new JButton("3");
    JButton b4 = new JButton("4");
    JButton b5 = new JButton("5");
    JButton b6 = new JButton("6");
    JButton b7 = new JButton("7");
    JButton b8 = new JButton("8");
    JButton b9 = new JButton("9");
    JButton b0 = new JButton("0");
    JButton bstar = new JButton("*");
    JButton blb = new JButton("#");

    JButton resetB = new JButton("RESET");

        //layout managers
    BorderLayout layoutB = new BorderLayout();
    GridLayout layoutG = new GridLayout(4,3);

        //panels
    JPanel bigP = new JPanel(layoutB);
    JPanel numberP = new JPanel(layoutG);

        //JLabel
    JLabel displayL = new JLabel();
    JLabel counterL = new JLabel();

        //listener
    ButtonListener buttonListener = new ButtonListener();

public BorderPanel()
{
    /****************START**********************/

    displayL.setText(display);

    numberP.add(b1);
    b1.addActionListener(buttonListener);
    numberP.add(b2);
    b2.addActionListener(buttonListener);
    numberP.add(b3);
    b3.addActionListener(buttonListener);
    numberP.add(b4);
    b4.addActionListener(buttonListener);
    numberP.add(b5);
    b5.addActionListener(buttonListener);
    numberP.add(b6);
    b6.addActionListener(buttonListener);
    numberP.add(b7);
    b7.addActionListener(buttonListener);
    numberP.add(b8);
    b8.addActionListener(buttonListener);
    numberP.add(b9);
    b9.addActionListener(buttonListener);
    numberP.add(bstar);
    bstar.addActionListener(buttonListener);
    numberP.add(b0);
    b0.addActionListener(buttonListener);
    numberP.add(blb);
    blb.addActionListener(buttonListener);
    resetB.addActionListener(buttonListener);

    bigP.add(displayL, layoutB.SOUTH);
    bigP.add(resetB, layoutB.EAST);
    bigP.add(numberP, layoutB.CENTER);
    add(counterL);
    add(bigP);
}

private class ButtonListener implements ActionListener
{
    public void actionPerformed(ActionEvent event)
    {
        counter ++;

        if (total == 3)
            display += "-";

        if (total == 6)
            display += "-";

        source = event.getSource();

        if (source == b1)
            display += "1";

        if (source == b2)
            display += "2";

        if (source == b3)
            display += "3";

        if (source == b4)
            display += "4";

        if (source == b5)
            display += "5";

        if (source == b6)
            display += "6";

        if (source == b7)
            display += "7";

        if (source == b8)
            display += "8";

        if (source == b9)
            display += "9";

        if (source == b0)
            display += "0";

        if (source == bstar)
            display += "*";

        if (source == blb)
            display += "#";

        if (source == resetB)
            display = "";
            counter = 0;

        displayL.setText(display);
        counterL.setText("" + counter);
    }
}
}

1 个答案:

答案 0 :(得分:0)

您需要为此if语句包含大括号,否则始终会执行counter = 0。如果不对控制结构使用大括号,它只包含结构范围内的下一个语句。

所以你的代码

   if (source == resetB)
        display = "";
        counter = 0;

实际上相当于

   if (source == resetB)
   {
        display = "";
   }

   counter = 0; 

您需要将两个语句括在大括号中。这就是为什么你应该养成使用大括号控制结构(if/else/for/while等)的习惯,除非你确定它不会引起任何混淆。即使这样,你也会冒这样的风险。

   if (source == resetB)
   {
        display = "";
        counter = 0;
   }

此外,您正在设置total但从未使用它,因此虽然它会添加到counter,但它不会显示连字符。

您需要将total的使用更改为counter并在将数字添加到显示后将其移动,否则您将获得00-000-00000 000-000-0000

所以它看起来像:

    if (source == b1)
        display += "1";

    //...etc

    if (source == blb)
        display += "#";

    if (source == resetB)
    {
        display = "";
        counter = 0;
    }

    if (counter == 3)
        display += "-";

    if (counter == 6)
        display += "-";