2012-03-28 4 views
1

저는 계산기를 Java 애플릿으로 만들고 있습니다. 모든 JButton에 대한 actionListener 등록은 물론 레이아웃을 성공적으로 만들었습니다.getActionCommand()와 일치하는 String 값을 비교할 수없는 이유는 무엇입니까?

String buttonClicked = e.getActionCommand(); 
// for number buttons 
for(int i = 0; i <= 9; i++) 
{ 
if(i == Integer.parseInt(buttonClicked)) 
answer.setText(answer.getText() + e.getActionCommand()); 
} 

... 제대로 작동 :

그래서, ActionListener를 구현 내 수업에서 나는 숫자 버튼의 모든 코드를 가지고있다. 그럼, 왜 코드가 작동 않습니다

if(buttonClicked.equals("/")) 
{ 
answer.setText(answer.getText() + e.getActionCommand()); 
} 

는 ... 우리는 할 수하지 getActionCommand() 문자열의 내용으로 문자열을 비교하는거야? 아니면 제가해야 할 일을 가져 오지 않았습니까? 당신은 "/"에에서는 parseInt을 시도하는

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

public class Part_C extends Applet 
{ 
    // answer field here (no panel; JTextField is 100% width without panel) 
    private JTextField answer = new JTextField(); 
    //answer.setHorizontalAlignment(JTextField.RIGHT); // align input to the right 

    // JButton array 
    private JButton[] buttons = 
    { 
     // (panel 1) backspace, clear entry, and clear buttons here 
     new JButton("backspace"), 
     new JButton("CE"), 
     new JButton("C"), 

     // (panel 2, row 1) numbers 7 - 9, divide, and sqare-root buttons here 
     new JButton("7"), 
     new JButton("8"), 
     new JButton("9"), 
     new JButton("/"), 
     new JButton("sqrt"), 

     // (panel 2, row 2) numbers 4 - 6, multiply, and percent buttons here 
     new JButton("4"), 
     new JButton("5"), 
     new JButton("6"), 
     new JButton("X"), 
     new JButton("%"), 

     // (panel 2, row 3) numbers 1 - 3, subtract, and inverse buttons here 
     new JButton("1"), 
     new JButton("2"), 
     new JButton("3"), 
     new JButton("-"), 
     new JButton("1/x"), 

     // (panel 2, row 4) number 0, positive/negative, decimal, addition, and equals buttons here 
     new JButton("0"), 
     new JButton("+/-"), 
     new JButton("."), 
     new JButton("+"), 
     new JButton("="), 

    }; // end of JButton array 

    // constructor for class Part_C 
    public Part_C() 
    { 
     // first panel for backspace, clear entry, and clear buttons 
     JPanel panel1 = new JPanel(); 
     panel1.setLayout(new GridLayout(1, 3)); 
     for(int i = 0; i < 3; i++) 
      panel1.add(buttons[i]); 

     // second panel for operators and operands 
     JPanel panel2 = new JPanel(); 
     panel2.setLayout(new GridLayout(4, 5)); 
     for(int i = 3; i < buttons.length; i++) 
      panel2.add(buttons[i]); 

     // third panel for BorderLayout of answer JTextField, and first 2 panels 
     JPanel panel3 = new JPanel(new BorderLayout()); 
     panel3.add(answer, BorderLayout.NORTH); 
     panel3.add(panel1, BorderLayout.CENTER); 
     panel3.add(panel2, BorderLayout.SOUTH); 
     add(panel3); // add panel3 to the JFrame 

     // action listener created here 
     ButtonListener listener = new ButtonListener(); 

     // action listener is added to all JButtons here 
     for (int i = 0; i < buttons.length; i++) 
      buttons[i].addActionListener(listener); 
    } 

    /* overriding the init() method of Applet; 
    * ...in an Applet, init() is used instead 
    * of the "main" method */ 
    public void init() 
    { 
     // create JFrame 
     Part_C frame = new Part_C(); 

     // the applet stops when the window/tab is closed 
     //frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 

    // inner class ButtonListener 
    public class ButtonListener implements ActionListener 
    { 
     public void actionPerformed(ActionEvent e) 
     { 
      String buttonClicked = e.getActionCommand(); 

      // for number buttons 
      for(int i = 0; i <= 9; i++) 
      { 
       if(i == Integer.parseInt(buttonClicked)) 
        answer.setText(answer.getText() + e.getActionCommand()); 
      } 

      // for operators 
      if(buttonClicked.equals("/")) 
      { 
       answer.setText(answer.getText() + e.getActionCommand()); 
      } 
      else if(buttonClicked.equals("sqrt")) 
      { 
       answer.setText(answer.getText() + e.getActionCommand()); 
      } 
      else if(buttonClicked.equals("X")) 
      { 
       answer.setText(answer.getText() + e.getActionCommand()); 
      } 
      else if(buttonClicked.equals("%")) 
      { 
       answer.setText(e.getActionCommand()); 
      } 
      else if(buttonClicked.equals("-")) 
      { 
       answer.setText(answer.getText() + e.getActionCommand()); 
      } 
      else if(buttonClicked.equals("1/x")) 
      { 
       answer.setText(e.getActionCommand()); 
      } 
      else if(buttonClicked.equals("+/-")) 
      { 
       answer.setText(e.getActionCommand()); 
      } 
      else if(buttonClicked.equals(".")) 
      { 
       answer.setText(answer.getText() + e.getActionCommand()); 
      } 
      else if(buttonClicked.equals("+")) 
      { 
       answer.setText(e.getActionCommand()); 
      } 

      // for data-clearing operations 
      if(buttonClicked.equals("backspace")) 
      { 
       answer.setText(answer.getText().substring(0, answer.getText().length() - 1)); 
      } 
      else if(buttonClicked.equals("CE")) 
      { 

      } 
      else if(buttonClicked.equals("C")) 
      { 
       answer.setText(""); 
      } 

      // for the equals button 
      if(buttonClicked.equals("=")) 
      { 

      } 
     } 
    } // end of inner class buttonListener 
} // end of Part_C 
+0

실제로 버튼을 actionCommand로 설정 하시겠습니까? 코드가 없으면 내가 생각할 수있는 것입니다. * 편집 : 맞춤법 : P * – mcfinnigan

+0

아냐, 내가 아는 한 "getActionCommand()"를 올바르게 사용하지 않는 설정 ... 위의 전체 코드를 추가했습니다 : –

+1

'.. 애플릿 ../JButton array' Don ' 스윙과 AWT 컴포넌트를 섞는다. 대신에 'JApplet'을 사용하십시오. 또는 더 나은 방법으로, 'JFrame'을 사용하고 필요한 경우 [Java Web Start] (http://stackoverflow.com/tags/java-web-start/info)를 사용하여 링크를 시작하십시오. –

답변

1

: -

편집 여기 내 전체 코드입니다. NumberFormatException을 throw합니다. 문자열을 정수로 변환 할 수없는 경우 코드가 for 루프를 넘을 수 없습니다.

+0

아니요, 저는 정수로 구문 분석 될 수있는 문자열, 계산기의 버튼 0-9에 JButton에서 parseInt를 수행하고 있습니다 ... 그리고 그 부분은 실제로 작동하지만 getActionCommand (), 작동하지 않는 정수로 구문 분석 할 수없는 String 값을 가진 JButton (예 : "/"의 경우, parseInt를 사용하지 않는 경우). –

+0

당신의 for 루프 'for (int i = 0; i <= 9; i ++)'는 푸시 된 버튼에 관계없이 매 시간마다 실행됩니다. 그 루프 내에서 'Integer.parseInt (buttonClicked)'는 숫자가 아닌 다른 것을 클릭 할 때마다 NumberFormatException을 제공합니다. 약속 할께. – Mike

+0

아 맞아! 그 점을 지적 해 주셔서 고마워요. 잠시 동안 Java를 수행하지 않았습니다.이 상황에서 예외 처리를 수행하는 것으로 기억되어 지금 작동하게되었습니다. 다음은 해당 세그먼트의 코드입니다. String buttonClicked = ""; 시도 { int number = Integer.parseInt (e.getActionCommand()); 숫자 버튼 위한 // 찾는 INT (I = 0; I <= 9는, I ++) { 경우 (I == 번호) answer.setText (answer.getText() + e.getActionCommand()); } } catch (NumberFormatException err) { buttonClicked = e.getActionCommand(); } –

관련 문제