2016-06-14 3 views
-4

아래 그림과 같은 간단한 계산기를 만들려고합니다. 그러나 나는 쓰고 싶은 :자바에서 효율적으로 만드는 방법

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) 
{           
     number1 = Integer.parseInt(n1.getText()); 
     number2 = Integer.parseInt(n2.getText()); 
     JOptionPane.showMessageDialog(null,(number1+number2)); 

나는 일반적인 장소

enter image description here

+1

추상 클래스를 만들고 상속을 사용합니다. 또는 클래스를 만들고 컴포지션을 사용합니다. 또는 관찰자 패턴을 사용하십시오. 아니면 데코레이터 패턴. 아니면 전략 패턴 (오, 그 작곡 기다). 선택의 여지가 많습니다. 나의 충고; 구성과 전략 패턴을 조사하십시오. 머리 첫 번째 디자인 패턴 책에서 상세하고 간단하게 작성되었습니다. 내 전화에 예제를 작성할 수 없습니다. 죄송합니다 – Randy

답변

2

에 선언함으로써 그것을 할 수 어떻게 모든 버튼에이 코드를 어떻게 몇 가지 간단한 도우미 방법에 대한?

private int getNumber1() { 
    return Integer.parseInt(n1.getText()); 
} 
private int getNumber2() { 
    return Integer.parseInt(n2.getText()); 
} 

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) 
{           
    JOptionPane.showMessageDialog(null, getNumber1() + getNumber2()); 
} 
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) 
{           
    JOptionPane.showMessageDialog(null, getNumber1() - getNumber2()); 
} 
private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) 
{           
    JOptionPane.showMessageDialog(null, getNumber1() * getNumber2()); 
} 
private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) 
{           
    JOptionPane.showMessageDialog(null, getNumber1()/getNumber2()); 
} 
1

동작에 대한 ENUM을 정의

enum Operation { 
    PLUS { 
    @Override int operate(int a, int b) { return a + b; } 
    }, 
    MINUS { 
    @Override int operate(int a, int b) { return a - b; } 
    }, 
    // etc, for others. 
    ; 

    abstract int operate(int a, int b); 
} 

을 그런 매개 변수로 Operation을 취하는 ActionListener 서브 클래스를 정의

class MyActionListener implements ActionListener { 
    final Operation operation; 

    MyActionListener(Operation operation) { 
    this.operation = operation; 
    } 

    @Override public void actionPerformed(ActionEvent evt) { 
    int a = Integer.parseInt(n1.getText()); 
    int b = Integer.parseInt(n2.getText()); 
    int result = operation.operate(a, b); 
    JOptionPane.showMessageDialog(null, result); 
    } 
} 

는 그런 다음,이 클래스의 인스턴스를 추가 각 버튼의 이벤트 리스너 :

jButton1.addActionListener(new MyActionListener(Operation.PLUS)); 
jButton2.addActionListener(new MyActionListener(Operation.MINUS)); 
관련 문제