2016-06-14 32 views
-4

我嘗試製作一個簡單的計算器,如下圖所示。但我想寫:如何使它在java中高效

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

這段代碼在每個按鈕i那麼,如何可以通過在一個共同的地方

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 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); 
} 

然後定義一個ActionListener子類它接受一個Operation作爲參數:

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));