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 += "-";