尝试编写一个简单的程序来显示使用按钮输入的电话号码。每按一次按钮,我都会设置一个计数器,以自动插入" - "在第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);
}
}
}
答案 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 += "-";