java swing入门 计算器布局

来源:互联网 发布:喝咖啡的利弊 知乎 编辑:程序博客网 时间:2024/04/30 08:21

//package adruill;import java.awt.*;import java.awt.event.*;import javax.swing.*;public class JButtonTest {public static void main(String args[]){JFrame main = new JFrame("AD RUI's Calculator");main.setIconImage(new ImageIcon("ct.jpg").getImage());main.setSize(600, 500);main.setLocationByPlatform(true);main.add(new CalPanel());main.setVisible(true);main.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}}class CalPanel extends JPanel{private String[] tmp = {"7", "8", "9", "/", "4", "5", "6", "*", "1", "2", "3", "-", "0", ".", "=", "+"};private JButton tt, show;private JTextField ans;private JPanel r1, r2, r3;private boolean ff = false, login = false;private String c1 = "", c2 = "";private int operID = -1;public CalPanel(){/**mainLayout*/GridLayout base = new GridLayout(3, 1);setLayout(base);ans = new JTextField ("Please click test to login", JTextField.LEFT);ans.setFont(new Font("Consolas", 12, 50));ans.setOpaque(true);/**part1*/r1 = new JPanel();r1.setLayout(new BorderLayout());r1.add(ans);add(r1);/**part2*/tt = new JButton("CLEAR");JButton test = new JButton("test");test.setBackground(Color.BLUE);test.setFont(new Font("Consolas", 12, 30));test.addActionListener(new MyListener());tt.setFont(new Font("Consolas", 12, 30));tt.setBackground(Color.ORANGE);tt.setEnabled(false);tt.addActionListener(new MyListener());r2 = new JPanel();r2.setLayout(new FlowLayout(FlowLayout.CENTER, 20, 40));r2.add(test);r2.add(tt);add(r2);r3 = new JPanel();r3.setLayout(new GridLayout(4, 4));for(int i = 0; i < 16; ++i) addButton(tmp[i], i);add(r3);//add(tt);}public void addButton(String txt, int cnt){JButton tmp = new JButton(txt);tmp.setFont(new Font("Consolas", 12, 30));if(cnt == 14) tmp.setBackground(Color.RED);tmp.addActionListener(new MyListener());r3.add(tmp);}public int getID(String s){for(int i = 0; i < 16; ++i) if(tmp[i].equals(s)) return i;return -1;}class MyListener implements ActionListener{public void actionPerformed(ActionEvent e) {boolean f = false;if(e.getSource() instanceof JButton) f = true;show = (JButton)e.getSource();if(show.getText().equals("test")) {login = true;ans.setText("");}elseif(f && login){String t = show.getText();int id = getID(t);if(id == -1){ tt.setEnabled(false);ans.setText("");init();}else{tt.setEnabled(true);if(id == 14){cal();}else{ans.setText(ans.getText() + t);if(id % 4 == 3){ff = true;operID = id;}else{if(ff) c2 = c2 + t;else c1 = c1 + t;}}}}else{ans.setText("Sign gain!");}//System.out.println(e.getActionCommand());}}public void cal() {System.out.println(c1 + " " + tmp[operID] + " " + c2);double a = tran(c1), b = tran(c2), res = 0;System.out.println(a + " " + tmp[operID] + " " + b);switch(operID){case 3 : if(abs(b) < 1e-6) {ans.setText("Divided By ZERO");init();return;}else res = a / b;break;case 7 : res = a * b;break;case 11 : res = a - b;break;case 15 : res = a + b;break;}init();//System.out.println(res);//c2 = "";String s = String.format("%.6f", res);init();c1 = s;ans.setText(s);}public void init(){c1 = "";c2 = "";operID = -1;ff = false;}public double tran(String s) {int f = 0;boolean mid = false;double l = 0, r = 0;if(s.charAt(0) == '-') f = 1;int len = s.length();for(int i = 0; i < len; ++i){char t = s.charAt(i);if(t == '.'){mid = true; double p = 1;for(int j = i + 1; j < len; ++j){r = 10 * r + s.charAt(j) - '0';p *= 10;}r /= p;}if(mid) break;l = 10 * l + t - '0';}double ans = (f == 1) ? -(l + r) : l + r;return ans;}public double abs(double b) {return b < 0 ? -b : b;}}


运行效果:



0 0
原创粉丝点击