最近开始学习java,参考教科书写了一个简单的计算器程序,贴上来,以便有用的时候可以参考。 呵呵,哈哈!!! import java.awt.Container; import java.awt.FlowLayout; import java.awt.GridLayout; import java.awt.Point; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.text.DecimalFormat; import javax.swing.*; public class Calculator extends JFrame implements ActionListener, ItemListener { private JButton buttons[]; private JButton btClear, btTransfer; private JTextField resultArea; private JPanel resultPanel, buttonsPanel, transferPanel; int cmbIndex = 1; private String string[] = { "7", "8", "9", "/", "6", "5", "4", "*", "3", "2", "1", "-", "0", ".", "=", "+" }; private String s = "", shu1 = "", shu2 = "", shu3 = ""; private static int fo = 0; JComboBox cmbox; private boolean ff = true; public Calculator() { super("进制计算器"); Container container = getContentPane(); container.setLayout(new FlowLayout()); resultPanel = new JPanel(); resultArea = new JTextField(13); resultPanel.add(resultArea); btClear = new JButton("C"); resultPanel.add(btClear); transferPanel = new JPanel(); cmbox = new JComboBox(); cmbox.addItem("10进制转换为2进制"); cmbox.addItem("10进制转换为8进制"); cmbox.addItem("10进制转换为16进制"); cmbox.addItem("2进制转换为8进制"); cmbox.addItem("2进制转换为10进制"); cmbox.addItem("2进制转换为16进制"); cmbox.addItem("8进制转换为2进制"); cmbox.addItem("8进制转换为10进制"); cmbox.addItem("8进制转换为16进制"); cmbox.addItem("16进制转换为2进制"); cmbox.addItem("16进制转换为8进制"); cmbox.addItem("16进制转换为10进制"); transferPanel.add(cmbox); btTransfer = new JButton("转"); transferPanel.add(btTransfer); buttonsPanel = new JPanel(); buttonsPanel.setLayout(new GridLayout(4, 4, 10, 10)); buttons = new JButton[string.length]; for (int i = 0; i < string.length; i++) { buttons[i] = new JButton(string[i]); buttons[i].addActionListener(this); buttonsPanel.add(buttons[i]); } container.add(resultPanel); container.add(transferPanel); container.add(buttonsPanel); btClear.addActionListener(this); btTransfer.addActionListener(this); cmbox.addItemListener(this); setSize(200, 250); setVisible(true); try { // JMenuItem itemNative = new JMenuItem("系统平台风格"); UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); // 设置界面样式 } catch (Exception e) { e.printStackTrace(); } setSize(220, 270); setVisible(true); } public static void main(String[] args) { Calculator calculator = new Calculator(); calculator.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public void itemStateChanged(ItemEvent event) { if (event.getStateChange() == ItemEvent.SELECTED) { if (cmbox.getSelectedItem().equals("10进制转换为2进制")) cmbIndex = 1; if (cmbox.getSelectedItem().equals("10进制转换为8进制")) cmbIndex = 2; if (cmbox.getSelectedItem().equals("10进制转换为16进制")) cmbIndex = 3; if (cmbox.getSelectedItem().equals("2进制转换为8进制")) cmbIndex = 4; if (cmbox.getSelectedItem().equals("2进制转换为10进制")) cmbIndex = 5; if (cmbox.getSelectedItem().equals("2进制转换为16进制")) cmbIndex = 6; if (cmbox.getSelectedItem().equals("8进制转换为2进制")) cmbIndex = 7; if (cmbox.getSelectedItem().equals("8进制转换为10进制")) cmbIndex = 8; if (cmbox.getSelectedItem().equals("8进制转换为16进制")) cmbIndex = 9; if (cmbox.getSelectedItem().equals("16进制转换为2进制")) cmbIndex = 10; if (cmbox.getSelectedItem().equals("16进制转换为8进制")) cmbIndex = 11; if (cmbox.getSelectedItem().equals("16进制转换为10进制")) cmbIndex = 12; } } public void actionPerformed(ActionEvent e) { if (!(e.getSource() == buttons[3] || e.getSource() == buttons[7] || e.getSource() == buttons[11] || e.getSource() == buttons[13] || e.getSource() == buttons[14] || e.getSource() == buttons[15] || e.getSource() == btClear || e.getSource() == btTransfer)) { if (e.getSource() == buttons[12]) { s += e.getActionCommand(); char a = s.charAt(0); if (a == '0') { s = "0."; resultArea.setText(s); } else { resultArea.setText(s); ff = true; } } else { s += e.getActionCommand(); resultArea.setText(s); ff = true; } } else { if (e.getSource() == btTransfer) { if (resultArea.getText().equals("")) ; else { jinzhi(); fo = 0; shu1 = ""; s = ""; } } if (e.getSource() == btClear) { resultArea.setText(""); fo = 0; shu1 = ""; s = ""; } if (e.getSource() == buttons[13]) { String ss = s; ss += e.getActionCommand(); char a = ss.charAt(0); if (a == '.') { s = ""; } else { if (ss.matches("[0-9].")) { s += e.getActionCommand(); resultArea.setText(s); } } } if (ff) { ff = false; if (e.getSource() == buttons[3]) { fo = 3; if (resultArea.getText().equals("")) ; else { if (shu1.equals("")) { shu1 = resultArea.getText(); resultArea.setText("/"); s = ""; } else { shu2 = resultArea.getText(); jishu(fo, shu1, shu2); } } } if (e.getSource() == buttons[7]) { fo = 7; if (resultArea.getText().equals("")) ; else { if (shu1.equals("")) { shu1 = resultArea.getText(); resultArea.setText("*"); s = ""; } else { shu2 = resultArea.getText(); jishu(fo, shu1, shu2); } } } if (e.getSource() == buttons[11]) { fo = 11; if (resultArea.getText().equals("")) ; else { if (shu1.equals("")) { shu1 = resultArea.getText(); resultArea.setText("-"); s = ""; } else { shu2 = resultArea.getText(); jishu(fo, shu1, shu2); } } } if (e.getSource() == buttons[15]) { fo = 15; if (resultArea.getText().equals("")) ; else { if (shu1.equals("")) { shu1 = resultArea.getText(); resultArea.setText("+"); s = ""; } else { shu2 = resultArea.getText(); jishu(fo, shu1, shu2); } } } if (e.getSource() == buttons[14]) { if (resultArea.getText().equals("") || shu1.equals("")) ff = true; else { shu2 = resultArea.getText(); jishu(fo, shu1, shu2); // ff = true; } } } } } public void jishu(int fj, String s1, String s2) { DecimalFormat twoDigits = new DecimalFormat("0.00"); double a, b; a = Double.parseDouble(s1); b = Double.parseDouble(s2); switch (fj) { case 3: shu3 = twoDigits.format((double) (a / b)); resultArea.setText(shu3); break; case 7: shu3 = twoDigits.format((double) (a * b)); resultArea.setText(shu3); break; case 11: shu3 = twoDigits.format((double) (a - b)); resultArea.setText(shu3); break; case 15: shu3 = twoDigits.format((double) (a + b)); resultArea.setText(shu3); break; } s = ""; shu1 = shu3; shu2 = ""; } public void jinzhi() { try { if (cmbIndex == 1) resultArea.setText(Integer.toBinaryString(Integer.parseInt(resultArea.getText()))); else if (cmbIndex == 2) resultArea.setText(Integer.toOctalString(Integer.parseInt(resultArea.getText()))); else if (cmbIndex == 3) resultArea.setText(Integer.toHexString(Integer.parseInt(resultArea.getText()))); else if (cmbIndex == 4) { int a = j1(resultArea.getText(), "[0-1]+", 2); resultArea.setText(Integer.toOctalString(a)); } else if (cmbIndex == 5) { j1(resultArea.getText(), "[0-1]+", 2); } else if (cmbIndex == 6) { int a = j1(resultArea.getText(), "[0-1]+", 2); resultArea.setText(Integer.toHexString(a)); } else if (cmbIndex == 7) { int a = j1(resultArea.getText(), "[0-7]+", 8); resultArea.setText(Integer.toBinaryString(a)); } else if (cmbIndex == 8) { j1(resultArea.getText(), "[0-7]+", 8); } else if (cmbIndex == 9) { int a = j1(resultArea.getText(), "[0-7]+", 8); resultArea.setText(Integer.toHexString(a)); } else if (cmbIndex == 10) { int a = j2(); resultArea.setText(Integer.toBinaryString(a)); } else if (cmbIndex == 11) { int a = j2(); resultArea.setText(Integer.toOctalString(a)); } else if (cmbIndex == 12) { j2(); } } catch (Exception e) { JOptionPane.showMessageDialog(null, "检查输入的参数"); } } public int j1(String zhuanhuan, String a1, int a3) { if (zhuanhuan.matches(a1)) { int bb, gg = 0, cc = 1; String s = zhuanhuan; StringBuffer ss = new StringBuffer(s); ss.reverse(); for (int i = 0; i < ss.length(); i++) { String jj = ss.charAt(i) + ""; bb = Integer.parseInt(jj); if (i == 0) gg += bb * cc; else gg += bb * (cc *= a3); } resultArea.setText(gg + ""); return gg; } return 0; } public int j2() { if (resultArea.getText().matches("[0-9,a,b,c,d,e,f]+")) { int bb, gg = 0, cc = 1; String s = resultArea.getText(); StringBuffer ss = new StringBuffer(s); ss.reverse(); for (int i = 0; i < ss.length(); i++) { String jj = ss.charAt(i) + ""; System.out.println(jj); if (jj.equals("a")) jj = "10"; if (jj.equals("b")) jj = "11"; if (jj.equals("c")) jj = "12"; if (jj.equals("d")) jj = "13"; if (jj.equals("e")) jj = "14"; if (jj.equals("f")) jj = "15"; System.out.println(jj); bb = Integer.parseInt(jj); if (i == 0) gg += bb * cc; else gg += bb * (cc *= 16); } resultArea.setText(gg + ""); return gg; } return 0; } }