本範例展示使用 Java Swing 建立桌面計算機應用程式,採用標準 MVC 概念分離:
class CalculatorPanel extends JPanel implements ActionListener {
private JTextField display;
private double arg = 0;
private String op = "=";
private boolean start = true;
public CalculatorPanel() {
setLayout(new BorderLayout());
display = new JTextField("0");
display.setEditable(false);
add(display, BorderLayout.NORTH);
JPanel p = new JPanel();
p.setLayout(new GridLayout(4, 4));
String buttons = "789/456*123-0.=+";
for (int i = 0; i < buttons.length(); i++) {
addButton(p, buttons.substring(i, i + 1));
}
add(p, BorderLayout.CENTER);
}
private void addButton(Container c, String s) {
JButton b = new JButton(s);
c.add(b);
b.addActionListener(this);
}
// ... 事件處理與計算邏輯見下
}
actionPerformed(ActionEvent evt) 依按鍵類型分派:
start 標記控制是否為新輸入,決定覆蓋或追加顯示calculate() 執行前一運算,更新 op 為新運算子,設 start=true 準備下一輸入public void calculate(double n) {
if (op.equals("+")) arg += n;
else if (op.equals("-")) arg -= n;
else if (op.equals("*")) arg *= n;
else if (op.equals("/")) arg /= n;
else if (op.equals("=")) arg = n;
display.setText("" + arg);
}
累加器 arg 保存運算中間結果,op 記錄待執行運算子,模擬傳統計算機即時運算模式。
class CalculatorFrame extends JFrame {
public CalculatorFrame() {
setTitle("Calculator");
setSize(200, 200);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
getContentPane().add(new CalculatorPanel());
}
}
public class Calculator {
public static void main(String[] args) {
JFrame frame = new CalculatorFrame();
frame.show(); // 注意:show() 已棄用,建議改用 setVisible(true)
}
}

setVisible(true) 取代棄用的 show()BigDecimal 避免浮點數精度問題ActionListener)