2014-05-01 80 views
1

试图编写一个简单的程序来显示用按钮键入的电话号码。每按一次按钮,我都会设置一个计数器,以在第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

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