作业要求,实现一个计算器,写的还不完善,仅供参考。
package AWTCalc;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.List;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Calc extends JFrame implements ActionListener {
JMenuBar mb;
JMenu jm1,jm2;
JMenuItem mi11,mi12,mi13,mi21,mi22,mi23;
JTextField field;
JButton[] b=new JButton[20];
String[] s = new String[]{"%","^","CE","←","7","8","9","/","4","5","6","*","1","2","3","-","0",".","=","+"};//声明button上面的label
public Calc(int x,int y ,int w, int h){
createMenu();
createPanel();
setLocation(x,y);
setSize(w,h);
setVisible(true);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
validate();
}
void createMenu() { //创建menu
mb = new JMenuBar();
jm1 = new JMenu("Edit");
jm2 = new JMenu("look");
mi11 = new JMenuItem("copy");
mi12 = new JMenuItem("paste");
mi13 = new JMenuItem("close");
mi21 = new JMenuItem("standerd");
mi22 = new JMenuItem("scientific");
mi23 = new JMenuItem("math");
jm1.add(mi11);
jm1.add(mi12);
jm1.add(mi13);
jm2.add(mi21);
jm2.add(mi22);
jm2.addSeparator(); //在菜单之间增加分隔线
jm2.add(mi23);
mb.add(jm1);
mb.add(jm2);
setJMenuBar(mb);
}
public void createPanel(){ //创建menu下面的按钮面板
//JButtonListener jbl=new JButtonListener(this);//当前窗口做监视器
Container container = this.getContentPane();
JPanel jpanel1 = new JPanel();
jpanel1.setLayout(new FlowLayout());
field=new JTextField(25);
field.setPreferredSize(new Dimension(500, 40));//添加文本域
field.addActionListener(this);
jpanel1.add(field);
JPanel jpanel2 = new JPanel();
jpanel2.setLayout(new GridLayout(5,4));
Font f=new Font("",Font.BOLD,36);
for(int i =0;i < 20 ; i++){
b[i] = new JButton(s[i]);
b[i].addActionListener(this);
jpanel2.add(b[i]);//把b[i]添加到frame对象
}
container.setLayout(new BoxLayout(container, BoxLayout.Y_AXIS));
container.add(jpanel1);
container.add(jpanel2);
}
public void actionPerformed(ActionEvent e) {
Object target = e.getSource();
String label = e.getActionCommand();
if ("0123456789.".indexOf(label) > 0)
handleNumber(label);
else
handleOperator(label);
}
boolean isFirstDigit = true;
/**
* Number handling.
* @param key the key of the button.
*/
public void handleNumber(String key) {
if (isFirstDigit)
field.setText(key);
else if ((key.equals(".")) && (field.getText().indexOf(".") < 0))
field.setText(field.getText() + ".");
else if (!key.equals("."))
field.setText(field.getText() + key);
isFirstDigit = false;
}
double number = 0.0;
String operator = "=";
void handleOperator(String key) {
if (operator.equals("+"))
number += Double.valueOf(field.getText());
else if (operator.equals("-"))
number -= Double.valueOf(field.getText());
else if (operator.equals("*"))
number *= Double.valueOf(field.getText());
else if (operator.equals("/"))
number /= Double.valueOf(field.getText());
else if (operator.equals("="))
number = Double.valueOf(field.getText());
}
field.setText(String.valueOf(number));
operator = key;
isFirstDigit = true;
}
public static void main(String[] args) { //main方法
Calc c =new Calc(150,150,300,250);
}
}
本文介绍了一个使用Java Swing实现的简易计算器应用程序。该计算器具备基本的算术运算功能,并通过图形用户界面提供良好的用户体验。文中详细展示了计算器的设计思路、组件布局及部分核心代码。
1253

被折叠的 条评论
为什么被折叠?



