Java 按钮计数器未升级

Java 按钮计数器未升级,java,button,Java,Button,尝试编写一个简单的程序来显示用按钮键入的电话号码。我有一个计数器,每次按下一个按钮,在第三和第六个数字输入后自动插入“-”。按下按钮后,我的计数器似乎没有更新。我不明白为什么。这可能很简单,但我将非常感谢任何帮助 import javax.swing.*; import java.awt.*; import java.awt.event.*; public class BorderPanel extends JPanel { //variables int counter =

尝试编写一个简单的程序来显示用按钮键入的电话号码。我有一个计数器,每次按下一个按钮,在第三和第六个数字输入后自动插入“-”。按下按钮后,我的计数器似乎没有更新。我不明白为什么。这可能很简单,但我将非常感谢任何帮助

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);
    }
}
}

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

所以你的代码

   if (source == resetB)
        display = "";
        counter = 0;
实际上相当于

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

   counter = 0; 
您需要将这两条语句用大括号括起来。这就是为什么你应该养成在控制结构中使用大括号的习惯(
if/else/for/while
etc),除非你确信它不会引起任何混乱。即使这样,你也有可能发生类似的事情

   if (source == resetB)
   {
        display = "";
        counter = 0;
   }
此外,您正在设置
total
,但从未使用它,因此尽管它将添加到
计数器中,但它不会显示连字符

您需要将
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 += "-";