java Swing框架應用,計算器的設計實現

本計算器的實現最基本的四則運算及開方、求倒數的功能。

計算器的基本框架使用java swing包中組件就行實現

需要用到的控件跟變量

<span style="white-space:pre">	</span>private JPanel jp1, jp2, jp3;//需要3個面板,一個放置文本框,一個放置復位、退格鍵,一個放置按鈕組組件
	private JButton[] jButtons;//1~9數字跟四則運算符,開方運算符,求倒數運算符
	private JButton jb1, jb2, jb3;//退格按鈕,復位按鈕
	private JTextField jTextField;//顯示文本框
	private JMenuBar jBar;//次要設置菜單功能(沒有實現功能)
	private JMenu edit,show,help;
	private JMenuItem copy,niantie,biaozhun,science,math,net,about;
	
	private String flag;//當點擊運算符是,臨時標記運算符用
	private String aa = "";//拼接數字型字符串是所用
	private LinkedList<Object> text = new LinkedList<Object>();//存放點擊的數字按鈕時獲得的數字用
	private double num1, num2, result;//運算時的變量
	private String[] num = { "7", "8", "9", "/", "sqrt", "4", "5", "6", "*",
			"%", "1", "2", "3", "-", "1/x", "0", "+/-", ".", "+", "=" };


主界面的組件代碼:

public Calculator() {
		super();
		
		jBar = new JMenuBar();
		edit = new JMenu("編輯");
		jBar.add(edit);
		copy = new JMenuItem("複製");
		niantie = new JMenuItem("粘貼");
		edit.add(copy);
		edit.add(niantie);
		
		show = new JMenu("查看");
		jBar.add(show);
		help = new JMenu("幫助");
		jBar.add(help);
		setJMenuBar(jBar);
		
		jp1 = new JPanel();
		jTextField = new JTextField("0.", 16);
		jTextField.setHorizontalAlignment(JTextField.RIGHT);
		jTextField.setEditable(false);
		jp1.setLayout(new FlowLayout());
		jp1.add(jTextField);
		add(jp1);
		
		jp3 = new JPanel();
		jp3.setLayout(new FlowLayout());
		jb1 = new JButton("BackSpace");
		jb2 = new JButton("CE");
		jb3 = new JButton("C");
		jb1.addActionListener(this);
		jb2.addActionListener(this);
		jb3.addActionListener(this);
		jp3.add(jb1);
		jp3.add(jb2);
		jp3.add(jb3);
		add(jp3);

		GridLayout GL = new GridLayout(4, 4, 3, 3);

		jp2 = new JPanel();
		jp2.setLayout(GL);
		jButtons = new JButton[20];
		for (int i = 0; i < num.length; i++) {
			jButtons[i] = new JButton(num[i]);<pre name="code" class="java"><span style="white-space:pre">			</span>jp2.add(jButtons[i]);
                 }add(jp2);
		setBounds(200, 200, 320, 270);
		setVisible(true);
		setResizable(false);
		setLayout(new FlowLayout());
		setDefaultCloseOperation(DISPOSE_ON_CLOSE);
	}



在for循環中對按鈕就行事件監聽

for (int i = 0; i < num.length; i++) {
			jButtons[i] = new JButton(num[i]);
//			jButtons[i].setPreferredSize(new Dimension(42,42));
			jp2.add(jButtons[i]);
			jButtons[i].addActionListener(new ActionListener() {

				@Override
				public void actionPerformed(ActionEvent e) {
					// TODO Auto-generated method stub
					String tt = e.getActionCommand();
					if (tt.equals("+") || tt.equals("-") || tt.equals("*")
							|| tt.equals("/") || tt.equals("%")) {
						if (!jTextField.equals("")) {
							num1 = Double.parseDouble(jTextField.getText()
									.toString());
							flag = tt;
							text.removeAll(text);
							jTextField.setText(flag);
						}
					} else if (tt.equals("=")) {
						num2 = Double.parseDouble(jTextField.getText()
								.toString());
						if (flag.equals("+")) {
							result = num1 + num2;
							jTextField.setText(result + "");
						} else if (flag.equals("-")) {
							if (num1 >= num2) {
								result = num1 - num2;
								jTextField.setText(result + "");
							} else {
								result = num2 - num1;
								jTextField.setText("-" + result);
							}
						} else if (flag.equals("*")) {
							result = num1 * num2;
							jTextField.setText(result + "");
						} else if (flag.equals("%")) {
							result = num1 % num2;
							jTextField.setText(result + "");
						} else {
							if (num2 != 0) {
								result = num1 / num2;
								jTextField.setText(result + "");
							} else {
								jTextField.setText("by zero");
							}
						}
					} else if (tt.equals("sqrt")) {
						if (!jTextField.equals("")) {
							num1 = Double.parseDouble(jTextField.getText()
									.toString());
							result = Math.sqrt(num1);
							jTextField.setText(result + "");
						}
					} else if (tt.equals("1/x")) {
						if (!jTextField.equals("")) {
							num1 = Double.parseDouble(jTextField.getText()
									.toString());
							result = 1 / num1;
							;
							jTextField.setText(result + "");
						}
					}else {
						text.addFirst(tt);
						for (int j = 0; j < text.size(); j++) {
							aa = aa + text.get(j);
						}
						jTextField.setText(aa);
						aa = "";
					}
				}
			});
		}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章